青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評論-2670  文章-0  trackbacks-0
    大概都是要定稿了罷,想了這么久……前人果然是前人啊,C++的concept也好,Haskell的type class也好,C#的generic interface也好,都非常精確地描述出了NativeX的泛型所應該有的形式。設計語言什么的,還是大部分要抄啊……

    接上一篇文章。昨天晚上Vczh Library++的泛型結構體以及泛型類型重命名已經搞定了。這部分先做是因為泛型結構體以及泛型類型重命名都不需要在鏈接的時候產生新的指令表,因此完全是編譯器的事情,不需要修改虛擬機。先來看看泛型結構體以及泛型類型重命名的樣子。這次我仍然在單元測試用例里面生成了一個語法樹,然后反編譯成NativeX代碼,然后再一次編譯成語法樹,最后給生成的指令自動加注釋:
 1 /*NativeX Code*/
 2 unit nativex_program_generated;
 3 generic<T>
 4 type Unit = T;
 5 
 6 generic<T>
 7 structure Vector
 8 {
 9     Unit<T> x;
10     Unit<T> y;
11 }
12 
13 function Unit<int32> main()
14 {
15     variable Unit<Vector<int32>> v;
16     (v.x=10);
17     (v.y=20);
18     (result=(v.x+v.y));
19 }
20 
21 
22 /*Assembly*/
23 .data
24 .label
25      0: instruction 3
26 .code
27 // unit nativex_program_generated;
28      0: stack_reserve 0
29      1: stack_reserve 0
30      2: ret 0
31 // function Unit<int32> main()
32      3: stack_reserve 8
33 // (v.x=10);
34      4: push s8 10
35      5: convert s32 s8
36      6: stack_offset -8
37      7: push s32 0
38      8: add s32
39      9: write s32
40 // (v.y=20);
41     10: push s8 20
42     11: convert s32 s8
43     12: stack_offset -8
44     13: push s32 4
45     14: add s32
46     15: write s32
47 // (result=(v.x+v.y));
48     16: stack_offset -8
49     17: push s32 4
50     18: add s32
51     19: read s32
52     20: stack_offset -8
53     21: push s32 0
54     22: add s32
55     23: read s32
56     24: add s32
57     25: resptr
58     26: write s32
59 // function Unit<int32> main()
60     27: stack_reserve -8
61     28: ret 0
62 

    在這里可以看出實際上編譯完了之后,指令集里面根本不會包含有關反省的任何信息,甚至是原先的類型也都丟掉了。當然為了解決這個問題,我給Assembly加了“資源”,那是一種通過C++的技巧封裝之后,你可以不斷地構造越來越大的只讀數據結構,方便二進制形式的序列化和反序列化。所有的信息都存在里面,供以后使用(反正虛擬機不需要讀)。

    但是泛型的全局變量、函數和契約就不一樣了。泛型全局變量還是很容易做的因此我就忽略掉了。泛型的函數需要把契約的類型完整保留在指令表里面,這樣在特化的時候才知道哪些地方需要被替換掉。總的來說最終的設計是這個樣子的:

    首先是契約,跟上次差不多,只是命名契約被我刪除了,只剩下匿名契約。總的來說我只需要在鏈接的時候進行檢查就好了,如果發現新來的Assembly重復實現了舊Assembly已經特化過的一個契約,那就會出現鏈接錯誤。至于特化要實現在哪里,我就不在編譯器上座約束了,因為這個代價更大,而且約束了靈活性。

    其次是函數。函數的泛型頭現在被我修改成了:
 1 generic<T>
 2 concept Comparable
 3 {
 4     int Compare(T a, T b);
 5 }
 6 
 7 generic<T> with
 8 Comparable<T> ct
 9 function bool AreEqual(T a, T b)
10 {
11     result = ct::Compare(a, b)==0;
12 }

    你會發現最終concept變成了對一個類型或者一組類型附加的屬性。泛型的函數除了這些屬性以外,就只能用一些基本的東西了(當然如果你把一個變量T的地址拿出來,強轉……)。這些時候所有泛型參數類型的參數、變量和結構體的地址都變成了一個表達式,譬如說&a == stack_offset+sizeof(int)*4而&b == stack_offset+sizeof(int)*4+sizeof(T)等等。而且如果AreEqual要調用其它關于T的泛型函數的話,如果其他的泛型函數對concept的要求比Comparable更多,那么就變成了編譯錯誤。當然最簡單的解決辦法就是在AreEqual函數上把所有用到的concept全部加滿。

    當然,最后一個泛型函數還是可以被編譯成指令表和一組待計算向量的,只是鏈接的時候,會查看新來的Assembly需要多少還沒特化的函數,然后一一為他們生成。于是現在最難的問題就變成了重構已有代碼,以及如何判斷concept instance是否被多個Assembly重復特化了……
posted on 2010-06-19 00:07 陳梓瀚(vczh) 閱讀(2459) 評論(3)  編輯 收藏 引用 所屬分類: VL++3.0開發紀事

評論:
# re: Vczh Library++ 3.0之NativeX語言泛型草稿(三)[未登錄] 2010-06-19 01:43 | ccsdu2009
真是高產  回復  更多評論
  
# re: Vczh Library++ 3.0之NativeX語言泛型草稿(三) 2010-06-19 07:03 | 陳梓瀚(vczh)
@ccsdu2009
設計什么的,顯然要頻繁更改到滿意才行。話說這個速度比我上學的平均速度慢多了……  回復  更多評論
  
# re: Vczh Library++ 3.0之NativeX語言泛型草稿(三) 2010-06-21 04:04 | 小時候可靚了
哈哈,你們都是高產  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲免费在线视频| 久久影院午夜论| 欧美香蕉大胸在线视频观看| 夜夜爽99久久国产综合精品女不卡| 免费成人毛片| 免费成人毛片| 日韩亚洲欧美在线观看| 在线一区二区三区四区五区| 国产精品美腿一区在线看| 久久成人18免费网站| 久久久久久久网站| 一区二区三区鲁丝不卡| 亚洲免费人成在线视频观看| 国外成人在线视频网站| 亚洲日本精品国产第一区| 欧美午夜电影完整版| 久久国产主播精品| 久久婷婷久久| 亚洲在线观看免费| 久久精品国产一区二区三区免费看 | 亚洲精品在线观看免费| 国产精品日本欧美一区二区三区| 久久精品国产精品亚洲综合| 久久婷婷激情| 亚洲综合成人婷婷小说| 久久久精彩视频| 亚洲影院色无极综合| 久久精品亚洲一区二区| 国产精品99久久久久久www| 性欧美1819性猛交| 99成人免费视频| 久久久久国产精品午夜一区| 中文日韩欧美| 裸体丰满少妇做受久久99精品| 中日韩男男gay无套| 久久夜色精品国产欧美乱极品| 亚洲影院色在线观看免费| 久久综合给合久久狠狠狠97色69| 亚洲免费视频网站| 欧美裸体一区二区三区| 久久夜色撩人精品| 国产精品久久久久久久久果冻传媒| 另类国产ts人妖高潮视频| 国产精品成av人在线视午夜片 | 亚洲人成网站999久久久综合| 亚洲综合好骚| 亚洲图片在线| 欧美精品成人一区二区在线观看 | 亚洲香蕉在线观看| 日韩一级免费观看| 久久乐国产精品| 久久久久国产精品一区| 国产精品日本一区二区| 中文精品视频| 亚洲视频欧美视频| 欧美电影免费| 亚洲高清av| 亚洲日韩欧美视频一区| 久久久国产视频91| 久久夜精品va视频免费观看| 国产精品资源在线观看| 亚洲自啪免费| 欧美夜福利tv在线| 国产日韩精品一区| 午夜精品久久久久久久99热浪潮 | 久久久久国产精品午夜一区| 国产欧美短视频| 亚洲欧美日韩精品久久亚洲区| 亚洲免费视频网站| 国产九九视频一区二区三区| 亚洲影视九九影院在线观看| 午夜久久一区| 国产一区自拍视频| 欧美有码在线视频| 蜜桃精品一区二区三区 | 国产精品国产馆在线真实露脸| 日韩亚洲一区在线播放| 亚洲一二三级电影| 国产精品久久久久久久久久妞妞 | 欧美成人资源| 9久草视频在线视频精品| 亚洲一区三区视频在线观看| 国产精品麻豆欧美日韩ww| 亚洲一区二区三区视频播放| 欧美专区在线观看一区| 有码中文亚洲精品| 欧美日韩国产精品一卡| 亚洲一区二区伦理| 麻豆精品国产91久久久久久| 最新成人av在线| 欧美午夜精品| 久久av红桃一区二区小说| 亚洲国产精品成人久久综合一区| 99re热这里只有精品视频| 欧美视频免费在线观看| 香蕉尹人综合在线观看| 欧美成人精品h版在线观看| 日韩亚洲成人av在线| 久久国产精品99国产精| 亚洲电影天堂av| 欧美午夜在线视频| 久久精视频免费在线久久完整在线看| 欧美激情第1页| 性欧美精品高清| 亚洲精品国产品国语在线app | 你懂的国产精品永久在线| 一本大道av伊人久久综合| 久久久午夜电影| 亚洲特色特黄| 亚洲国产婷婷香蕉久久久久久| 国产精品福利久久久| 欧美sm视频| 欧美一区二区三区精品电影| 亚洲人成小说网站色在线| 欧美在线视频一区二区| 一区二区日韩欧美| 在线日韩av片| 国产偷自视频区视频一区二区| 欧美激情区在线播放| 久久精品视频亚洲| 亚洲欧美成人在线| 日韩亚洲一区二区| 亚洲国产精彩中文乱码av在线播放| 欧美亚洲免费电影| 亚洲一区二区视频在线| 亚洲国产视频一区二区| 国产一区二区久久久| 国产精品欧美精品| 欧美日韩在线亚洲一区蜜芽| 欧美成ee人免费视频| 久久久精品国产99久久精品芒果| 亚洲欧美国产高清| 亚洲一区在线直播| 在线视频亚洲一区| 99视频在线精品国自产拍免费观看| 欧美激情第10页| 欧美成人性生活| 欧美a级一区| 久久亚洲精品中文字幕冲田杏梨| 欧美一级视频免费在线观看| 亚洲特级片在线| 亚洲天堂网站在线观看视频| 中文国产成人精品| 一区二区三区精品视频| 日韩视频在线一区二区| 亚洲精品少妇网址| 日韩网站在线观看| 99热在这里有精品免费| 日韩午夜激情| 亚洲午夜在线观看| 午夜欧美精品| 久久精品视频在线免费观看| 久久久另类综合| 久热精品视频在线观看一区| 久久久噜噜噜| 免费不卡视频| 最新国产成人av网站网址麻豆| 91久久国产自产拍夜夜嗨| 日韩亚洲精品电影| 亚洲午夜视频| 久久激情一区| 欧美日本亚洲韩国国产| 国产精品99免费看| 国产一区二区三区免费不卡| 一区二区三区无毛| 夜夜嗨av一区二区三区四季av| 亚洲一区免费在线观看| 久久国产手机看片| 欧美激情视频免费观看| 一区二区三区成人| 欧美一区免费视频| 欧美成人精品激情在线观看| 欧美片在线观看| 国产日韩一区欧美| 亚洲日韩第九十九页| 午夜精品福利一区二区三区av| 久久精品亚洲乱码伦伦中文| 欧美成人在线免费观看| 亚洲视频一区二区在线观看 | av成人福利| 欧美在线短视频| 欧美看片网站| 国产亚洲精品久久久| 日韩午夜视频在线观看| 久久精品水蜜桃av综合天堂| 亚洲成色最大综合在线| 日韩视频国产视频| 亚洲欧美日本精品| 亚洲国产精品一区制服丝袜| 亚洲午夜在线观看| 欧美成人中文| 国内在线观看一区二区三区| 宅男精品导航| 毛片一区二区| 亚洲欧美激情诱惑| 国产精品成人午夜| 亚洲乱码国产乱码精品精| 久久久999| 亚洲一区图片| 欧美区一区二区三区|