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

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

    接上一篇文章。昨天晚上Vczh Library++的泛型結(jié)構(gòu)體以及泛型類型重命名已經(jīng)搞定了。這部分先做是因?yàn)榉盒徒Y(jié)構(gòu)體以及泛型類型重命名都不需要在鏈接的時(shí)候產(chǎn)生新的指令表,因此完全是編譯器的事情,不需要修改虛擬機(jī)。先來看看泛型結(jié)構(gòu)體以及泛型類型重命名的樣子。這次我仍然在單元測(cè)試用例里面生成了一個(gè)語法樹,然后反編譯成NativeX代碼,然后再一次編譯成語法樹,最后給生成的指令自動(dòng)加注釋:
 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 

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

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

    首先是契約,跟上次差不多,只是命名契約被我刪除了,只剩下匿名契約。總的來說我只需要在鏈接的時(shí)候進(jìn)行檢查就好了,如果發(fā)現(xiàn)新來的Assembly重復(fù)實(shí)現(xiàn)了舊Assembly已經(jīng)特化過的一個(gè)契約,那就會(huì)出現(xiàn)鏈接錯(cuò)誤。至于特化要實(shí)現(xiàn)在哪里,我就不在編譯器上座約束了,因?yàn)檫@個(gè)代價(jià)更大,而且約束了靈活性。

    其次是函數(shù)。函數(shù)的泛型頭現(xiàn)在被我修改成了:
 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 }

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

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

評(píng)論:
# re: Vczh Library++ 3.0之NativeX語言泛型草稿(三)[未登錄] 2010-06-19 01:43 | ccsdu2009
真是高產(chǎn)  回復(fù)  更多評(píng)論
  
# re: Vczh Library++ 3.0之NativeX語言泛型草稿(三) 2010-06-19 07:03 | 陳梓瀚(vczh)
@ccsdu2009
設(shè)計(jì)什么的,顯然要頻繁更改到滿意才行。話說這個(gè)速度比我上學(xué)的平均速度慢多了……  回復(fù)  更多評(píng)論
  
# re: Vczh Library++ 3.0之NativeX語言泛型草稿(三) 2010-06-21 04:04 | 小時(shí)候可靚了
哈哈,你們都是高產(chǎn)  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美风情在线| 久久大逼视频| 久久亚洲图片| 久久激情视频免费观看| 欧美日韩一区二区三区在线 | 午夜亚洲性色福利视频| 欧美1区免费| 欧美1区2区视频| 红桃视频国产一区| 亚洲欧美日韩在线一区| 亚洲性色视频| 欧美性大战久久久久久久蜜臀| 亚洲第一中文字幕在线观看| 精品91在线| 欧美亚洲在线| 欧美一级视频精品观看| 欧美三级视频在线播放| 亚洲日本va午夜在线影院| 亚洲电影天堂av| 久久米奇亚洲| 欧美不卡三区| 亚洲欧洲一区二区三区在线观看| 久久久久久999| 免播放器亚洲一区| 亚洲国产欧美另类丝袜| 久久综合伊人| 亚洲国产高清aⅴ视频| 日韩亚洲精品电影| 欧美日韩一区二区欧美激情| 一本久久知道综合久久| 亚洲欧美激情精品一区二区| 国产精品夫妻自拍| 亚洲综合色视频| 久久成人国产精品| 伊人激情综合| 欧美国产成人精品| 一区二区三区视频观看| 性做久久久久久| 狠狠色狠狠色综合日日91app| 久久国产精品久久w女人spa| 欧美jizzhd精品欧美巨大免费| 亚洲二区免费| 欧美日韩亚洲网| 亚洲欧美日韩中文在线制服| 久久综合久久综合九色| 亚洲人成久久| 国产精品一区=区| 久久精品一区二区国产| 亚洲国产婷婷| 午夜在线不卡| 亚洲国产日韩欧美综合久久| 欧美人与禽性xxxxx杂性| 亚洲色诱最新| 欧美激情亚洲国产| 午夜精品国产精品大乳美女| 狠狠色噜噜狠狠狠狠色吗综合| 欧美成年人视频| 亚洲欧美春色| 亚洲经典在线看| 久久久久久精| 欧美一区二区日韩| 国内精品美女av在线播放| 欧美大尺度在线观看| 亚洲午夜极品| 亚洲国产欧美一区二区三区同亚洲| 亚洲一区高清| 亚洲精品日日夜夜| 国产欧美一区二区三区在线老狼| 久久久综合免费视频| 亚洲精品社区| 欧美在线视频观看免费网站| 亚洲乱码国产乱码精品精| 国产精品爽爽爽| 免费观看成人鲁鲁鲁鲁鲁视频 | 久久综合影视| 亚洲欧美日韩国产精品| 亚洲片在线资源| 欧美成人精品在线观看| 欧美有码视频| 国产精品99久久久久久人| 亚洲成人在线网站| 国产日韩亚洲欧美| 欧美日韩亚洲一区| 欧美激情 亚洲a∨综合| 快射av在线播放一区| 欧美一区二区三区免费看| 一本色道久久88精品综合| 欧美寡妇偷汉性猛交| 久久久久九九视频| 先锋a资源在线看亚洲| 亚洲一区二区av电影| 一本色道久久综合亚洲精品按摩| 亚洲福利国产| 在线观看中文字幕亚洲| 国产综合色精品一区二区三区| 国产精品av久久久久久麻豆网| 欧美劲爆第一页| 欧美成人激情在线| 欧美成人精品| 另类成人小视频在线| 噜噜爱69成人精品| 久久久夜精品| 久久夜色精品国产欧美乱极品 | 久久综合给合久久狠狠狠97色69| 欧美aa在线视频| 亚洲婷婷综合色高清在线| 99亚洲视频| 亚洲色图制服丝袜| 亚洲一区二区三区视频播放| 一区二区三区欧美在线| 亚洲无限av看| 香蕉久久夜色精品国产使用方法| 亚洲欧美成人一区二区在线电影| 亚洲欧美日本国产专区一区| 小嫩嫩精品导航| 久久久国产精品一区二区三区| 久久久久高清| 欧美久久综合| 国产精品久久看| 国产综合色一区二区三区| 在线免费观看日本一区| 亚洲激情偷拍| 亚洲永久在线观看| 久久久亚洲人| 亚洲高清在线| 亚洲视频在线观看视频| 欧美一区二区三区在线| 久久精品国产视频| 欧美激情一区| 国产精品爽黄69| 在线看欧美日韩| 亚洲图片在线| 久久琪琪电影院| 最新亚洲一区| 亚洲欧美日韩久久精品 | 夜夜夜久久久| 午夜精品福利视频| 久久永久免费| 欧美午夜影院| 黄色亚洲大片免费在线观看| 亚洲精品乱码久久久久久蜜桃91| 亚洲欧美成aⅴ人在线观看| 久久精品电影| 亚洲精品一区二区三区在线观看 | 日韩手机在线导航| 亚洲欧美日韩精品久久久| 久久夜色精品亚洲噜噜国产mv| 亚洲黄色成人久久久| 午夜精品福利一区二区蜜股av| 久久青草久久| 国产精品久久久久久亚洲调教 | 亚洲毛片av在线| 欧美在线视频一区二区| 欧美日韩亚洲一区二区三区四区| 国产一区久久久| 亚洲一区二区少妇| 欧美成人一区二区三区片免费 | 夜夜嗨av一区二区三区中文字幕| 久久成人免费电影| 国产精品激情| 亚洲精品小视频| 噜噜噜91成人网| 亚洲影院一区| 欧美日韩精品在线| 亚洲电影第三页| 久久精品日产第一区二区| 亚洲剧情一区二区| 免费国产一区二区| 国产一区二区视频在线观看 | 久久精品1区| 国产精品综合网站| 亚洲男人第一av网站| 日韩网站免费观看| 欧美激情一区二区三区蜜桃视频| 国内外成人免费激情在线视频网站 | 91久久综合| 欧美777四色影视在线| 欧美在线观看一区二区| 国产日韩在线不卡| 先锋资源久久| 亚洲欧美另类在线| 国产精品自拍小视频| 亚洲在线视频观看| 亚洲婷婷综合色高清在线 | 国产精品―色哟哟| 亚洲字幕在线观看| 亚洲婷婷在线| 国产伦精品一区二区三区视频黑人| 一区二区黄色| 中文久久精品| 国产精品美女在线观看| 亚洲欧美在线播放| 亚洲一区二区三区久久| 国产精品你懂得| 欧美一区二区三区免费视频| 亚洲免费在线播放| 国产亚洲欧美aaaa| 女生裸体视频一区二区三区| 玖玖视频精品| 99国产麻豆精品|