• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-341  評論-2670  文章-0  trackbacks-0
                今天寫了Kernel FP模板函數實例化的代碼。雖然還有一點小bug,不過還是說一下。

                Kernel FP的Runtime Assembly是沒有模板信息的,函數由簽名、表達式引用以及函數引用構成。函數引用表記錄了函數在一種類型的實例化下實際調用的其他函數的實例。譬如函數參數在類型A和類型B下函數def function param=print param,print有可能因為param的類型的變化而變化。因此這需要記錄在一個函數的實例里。

                在寫完代碼之后我粗略跑了一下,使用之前用來做類型推導的代碼,以及寫了一個main函數:
            1 module main
            2 import system
            3 import sysutils
            4 import list
            5 
            6 def main score = if (flt score 60.0"fail" "pass"

                字符串被解釋成字符列表,于是"fail"被翻譯成list 'f'(list 'a'(list 'i'(list 'l'))),但是操作符作為一種函數的語法糖尚未引入,非完整模板函數也尚未引入,所以操作符就沒有實現了。此處flt是小于的意思,main函數的作用就是判斷score是否過了60并打出fail和pass作為結果。

                編譯器通過類型推導,得到函數的類型float->list char:
             1 【Code Unit system】
             2     module system::system
             3     type bool
             4     type char
             5     type float
             6     type int
             7     type list T
             8     type string = (system.list system.char)
             9     type void
            10     ctor empty :: type list T
            11     ctor false :: type bool
            12     ctor list :: <T> -> (system.list <T>-> type list T
            13     ctor true :: type bool
            14     func ceil :: (system.float -> system.float) alias "kernelfp::ceil" codefrom -1
            15     func chr :: (system.int -> system.char) alias "kernelfp::chr" codefrom -1
            16     func fadd :: (system.float -> (system.float -> system.float)) alias "kernelfp::fadd" codefrom -1
            17     func fdiv :: (system.float -> (system.float -> system.float)) alias "kernelfp::fdiv" codefrom -1
            18     func fequ :: (system.float -> (system.float -> system.bool)) alias "kernelfp::fequ" codefrom -1
            19     func fgt :: (system.float -> (system.float -> system.bool)) alias "kernelfp::fgt" codefrom -1
            20     func floor :: (system.float -> system.float) alias "kernelfp::floor" codefrom -1
            21     func flt :: (system.float -> (system.float -> system.bool)) alias "kernelfp::flt" codefrom -1
            22     func fmul :: (system.float -> (system.float -> system.float)) alias "kernelfp::fmul" codefrom -1
            23     func fsub :: (system.float -> (system.float -> system.float)) alias "kernelfp::fsub" codefrom -1
            24     func iadd :: (system.int -> (system.int -> system.int)) alias "kernelfp::iadd" codefrom -1
            25     func idiv :: (system.int -> (system.int -> system.int)) alias "kernelfp::idiv" codefrom -1
            26     func iequ :: (system.int -> (system.int -> system.bool)) alias "kernelfp::iequ" codefrom -1
            27     func igt :: (system.int -> (system.int -> system.bool)) alias "kernelfp::igt" codefrom -1
            28     func ilt :: (system.int -> (system.int -> system.bool)) alias "kernelfp::ilt" codefrom -1
            29     func imod :: (system.int -> (system.int -> system.int)) alias "kernelfp::imod" codefrom -1
            30     func imul :: (system.int -> (system.int -> system.int)) alias "kernelfp::imul" codefrom -1
            31     func isub :: (system.int -> (system.int -> system.int)) alias "kernelfp::isub" codefrom -1
            32     func ord :: (system.char -> system.int) alias "kernelfp::ord" codefrom -1
            33     func tofloat :: (system.int -> system.float) alias "kernelfp::tofloat" codefrom -1
            34     func trunc :: (system.float -> system.int) alias "kernelfp::trunc" codefrom -1
            35 
            36 【Code Unit sysutils】
            37     module sysutils::sysutils
            38     import system
            39     type pair T1 T2
            40     ctor pair :: <T1> -> <T2> -> type pair T1 T2
            41     func and :: (system.bool -> (system.bool -> system.bool)) codefrom 4
            42     func if T1 :: (system.bool -> (<T1> -> (<T1> -> <T1>))) codefrom 9
            43     func ineg :: (system.int -> system.int) codefrom 11
            44     func not :: (system.bool -> system.bool) codefrom 2
            45     func or :: (system.bool -> (system.bool -> system.bool)) codefrom 6
            46     func pairop T1 T2 T3 :: ((<T1> -> (<T2> -> <T3>)) -> ((sysutils.pair <T1> <T2>-> <T3>)) codefrom 12
            47     func xor :: (system.bool -> (system.bool -> system.bool)) codefrom 8
            48 
            49 【Code Unit main】
            50     module main::main
            51     import list
            52     import system
            53     import sysutils
            54     func main :: (system.float -> (system.list system.char)) codefrom 0


                這個時候,只有模板函數if被實例化,所以我們可以在下面看到所有被實例化的函數(非模板函數一律實例化):
              1 【Assembly Unit system】
              2 
              3     [Information]
              4         Name             : system
              5         Function Count   : 1
              6         Slot Count       : 1
              7 
              8     [Function]
              9         Function Name    : flt
             10         Unique Name      : system::flt::$kernelfp::flt
             11         Owner Unit       : system
             12         Level            : 0
             13         External Command : kernelfp::flt
             14         Instance         : system::flt::$kernelfp::flt::(system.float -> (system.float -> system.bool))
             15 
             16     [Slot Item]
             17         Unique Name      : system::flt::$kernelfp::flt::(system.float -> (system.float -> system.bool))
             18         Parent Slot      : <NULL>
             19         Owner Function   : system::flt::$kernelfp::flt
             20 
             21 【Assembly Unit sysutils】
             22 
             23     [Information]
             24         Name             : sysutils
             25         Function Count   : 7
             26         Slot Count       : 7
             27 
             28     [Function]
             29         Function Name    : result
             30         Unique Name      : sysutils.5.1::result::#0
             31         Owner Unit       : sysutils
             32         Level            : 2
             33         External Command : 
             34         Instance         : <NULL>
             35 
             36     [Function]
             37         Function Name    : and
             38         Unique Name      : sysutils::and::#4
             39         Owner Unit       : sysutils
             40         Level            : 0
             41         External Command : 
             42         Instance         : sysutils::and::#4::(system.bool -> (system.bool -> system.bool))
             43 
             44     [Function]
             45         Function Name    : if
             46         Unique Name      : sysutils::if::#9
             47         Owner Unit       : sysutils
             48         Level            : 0
             49         External Command : 
             50         Instance         : <NULL>
             51 
             52     [Function]
             53         Function Name    : ineg
             54         Unique Name      : sysutils::ineg::#11
             55         Owner Unit       : sysutils
             56         Level            : 0
             57         External Command : 
             58         Instance         : sysutils::ineg::#11::(system.int -> system.int)
             59 
             60     [Function]
             61         Function Name    : not
             62         Unique Name      : sysutils::not::#2
             63         Owner Unit       : sysutils
             64         Level            : 0
             65         External Command : 
             66         Instance         : sysutils::not::#2::(system.bool -> system.bool)
             67 
             68     [Function]
             69         Function Name    : or
             70         Unique Name      : sysutils::or::#6
             71         Owner Unit       : sysutils
             72         Level            : 0
             73         External Command : 
             74         Instance         : sysutils::or::#6::(system.bool -> (system.bool -> system.bool))
             75 
             76     [Function]
             77         Function Name    : xor
             78         Unique Name      : sysutils::xor::#8
             79         Owner Unit       : sysutils
             80         Level            : 0
             81         External Command : 
             82         Instance         : sysutils::xor::#8::(system.bool -> (system.bool -> system.bool))
             83 
             84     [Slot Item]
             85         Unique Name      : sysutils::and::#4::(system.bool -> (system.bool -> system.bool))
             86         Parent Slot      : <NULL>
             87         Owner Function   : sysutils::and::#4
             88 
             89     [Slot Item]
             90         Unique Name      : sysutils::if::#9::(system.bool -> ((system.list system.char-> ((system.list system.char-> (system.list system.char))))
             91         Parent Slot      : <NULL>
             92         Owner Function   : sysutils::if::#9
             93             0 = sysutils::if::#9::(system.bool -> ((system.list system.char-> ((system.list system.char-> (system.list system.char))))/sysutils.5.1::result::#0::(system.list system.char)
             94 
             95     [Slot Item]
             96         Unique Name      : sysutils::if::#9::(system.bool -> ((system.list system.char-> ((system.list system.char-> (system.list system.char))))/sysutils.5.1::result::#0::(system.list system.char)
             97         Parent Slot      : sysutils::if::#9::(system.bool -> ((system.list system.char-> ((system.list system.char-> (system.list system.char))))
             98         Owner Function   : sysutils.5.1::result::#0
             99 
            100     [Slot Item]
            101         Unique Name      : sysutils::ineg::#11::(system.int -> system.int)
            102         Parent Slot      : <NULL>
            103         Owner Function   : sysutils::ineg::#11
            104 
            105     [Slot Item]
            106         Unique Name      : sysutils::not::#2::(system.bool -> system.bool)
            107         Parent Slot      : <NULL>
            108         Owner Function   : sysutils::not::#2
            109 
            110     [Slot Item]
            111         Unique Name      : sysutils::or::#6::(system.bool -> (system.bool -> system.bool))
            112         Parent Slot      : <NULL>
            113         Owner Function   : sysutils::or::#6
            114 
            115     [Slot Item]
            116         Unique Name      : sysutils::xor::#8::(system.bool -> (system.bool -> system.bool))
            117         Parent Slot      : <NULL>
            118         Owner Function   : sysutils::xor::#8
            119 
            120 【Assembly Unit list】
            121 
            122     [Information]
            123         Name             : list
            124         Function Count   : 0
            125         Slot Count       : 0
            126 
            127 【Assembly Unit main】
            128 
            129     [Information]
            130         Name             : main
            131         Function Count   : 1
            132         Slot Count       : 1
            133 
            134     [Function]
            135         Function Name    : main
            136         Unique Name      : main::main::#0
            137         Owner Unit       : main
            138         Level            : 0
            139         External Command : 
            140         Instance         : main::main::#0::(system.float -> (system.list system.char))
            141 
            142     [Slot Item]
            143         Unique Name      : main::main::#0::(system.float -> (system.list system.char))
            144         Parent Slot      : <NULL>
            145         Owner Function   : main::main::#0
            146             0 = sysutils::if::#9::(system.bool -> ((system.list system.char-> ((system.list system.char-> (system.list system.char))))
            147             1 = system::flt::$kernelfp::flt::(system.float -> (system.float -> system.bool))

                明天要修bug了。
            posted on 2008-11-01 07:05 陳梓瀚(vczh) 閱讀(1393) 評論(0)  編輯 收藏 引用 所屬分類: 腳本技術
            亚洲va中文字幕无码久久不卡| 99久久这里只精品国产免费 | 国产91久久综合| 久久精品国产黑森林| 久久青青色综合| 国内精品九九久久久精品| 精品免费久久久久国产一区| 久久经典免费视频| 国产精品99久久久久久猫咪 | 国产叼嘿久久精品久久| 久久青青色综合| 精品久久久久一区二区三区| 97精品伊人久久久大香线蕉| 国产69精品久久久久9999| 无码国内精品久久人妻| 婷婷久久综合九色综合绿巨人| 久久99久久99小草精品免视看| 久久亚洲国产成人影院| 久久性精品| 精品视频久久久久| 丰满少妇人妻久久久久久4| 国内精品伊人久久久久AV影院| 久久久久久久女国产乱让韩| 国内精品伊人久久久久网站| 久久久国产精品网站| 久久99国产精品尤物| 综合久久国产九一剧情麻豆| 久久最新免费视频| 日韩中文久久| 久久国产AVJUST麻豆| 久久久久亚洲精品男人的天堂| 91久久精品国产91性色也| 91精品国产乱码久久久久久| 久久成人国产精品| 无码精品久久久天天影视| 亚洲愉拍99热成人精品热久久| 久久福利资源国产精品999| 狠狠色丁香久久婷婷综合蜜芽五月| 久久影院午夜理论片无码| 中文字幕精品久久| 色婷婷综合久久久久中文一区二区 |