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

隨筆-341  評論-2670  文章-0  trackbacks-0
    因為在開發(fā)CMinus的過程中為了異常處理(最終沒有實現(xiàn)進CMinus),曾經(jīng)學習了一下怎么用匯編語言寫try-catch,因此這個CPU相關(guān)的處理方法就被我偷了哈,實現(xiàn)在了NativeX的虛擬機里。

    在NativeX里面,try-catch和throw非常簡單。throw你可以加一個值當異常數(shù)據(jù),也可以不加(不會修改上次的異常數(shù)據(jù),可以當rethrow用)。catch的話沒辦法跟C++一樣根據(jù)類型來判斷,因此我會給你一個異常數(shù)據(jù)的指針,你自己看著辦哈,因為NativeX跟C一樣沒有RTTI。因此throw就很簡單了,就是恢復棧頂和棧底指針之后跳轉(zhuǎn)到最近的異常處理程序里面去。try和catch就是用來創(chuàng)建和銷毀異常處理程序的。所有的異常處理程序構(gòu)成了一個鏈表,這個鏈表被我記在了堆棧里面,而最近的異常處理節(jié)點的指針則被我放在了整個堆棧控件的最頂部,接在后面的是異常對象的數(shù)據(jù)。你每次throw的東西的尺寸可以不同,因此占用的“堆棧最頂部空間”也不同。當然如果你函數(shù)遞歸太深而導致棧頂覆蓋了異常對象的數(shù)據(jù)區(qū)域時,就會觸發(fā)“堆棧溢出”事件。在NativeX里面堆棧溢出代表你這程序已經(jīng)廢了,因此這個是不能catch的,虛擬機返回給宿主程序一個信號然后就停止執(zhí)行了。

    我們來看一個簡單的例子,如何throw之后把異常對象的返回給函數(shù),首先是代碼:
 1 /*NativeX Code*/
 2 unit nativex_program_generated;
 3 function int32 main()
 4 {
 5     (result = 10s32);
 6     try
 7         Throw();
 8     catch
 9         (result = ( * cast<int32*>(exception)));
10 }
11 
12 function void Throw()
13     throw 20s32;

    main函數(shù)首先將函數(shù)返回值設(shè)置成10,然后調(diào)用throw函數(shù)。throw函數(shù)會把20給throw出來,然后main函數(shù)catch了,把結(jié)果返回。NativeX使用了關(guān)鍵字exception來表達異常對象的地址。當然你如果要throw各種不同的東西的話,你得自己做標記(親自實現(xiàn)RTTI)了。好了,我們看看產(chǎn)生的指令:
 1 // unit nativex_program_generated;
 2      0: stack_reserve 0
 3      1: stack_reserve 0
 4      2: ret 0
 5 // function int32 main()
 6      3: stack_reserve 0
 7 // (result = 10s32);
 8      4: push s32 10
 9      5: resptr
10      6: write s32
11 // try
12      7: exception_handler_push 14
13 // Throw();
14      8: stack_reserve 1
15      9: stack_top 0
16     10: call 20 1
17     11: stack_reserve -1
18 // try
19     12: exception_handler_pop
20     13: jump 18 1
21     14: exception_handler_pop
22 // (result = ( * cast<int32*>(exception)));
23     15: exception_object_address
24     16: resptr
25     17: copymem 4
26 // function int32 main()
27     18: stack_reserve 0
28     19: ret 0
29 // function void Throw()
30     20: stack_reserve 0
31 // throw 20s32;
32     21: exception_object_reserve 4
33     22: push s32 20
34     23: exception_object_address
35     24: write s32
36     25: exception_raise
37 // function void Throw()
38     26: stack_reserve 0
39     27: ret 0

    try首先會將catch之后的第一個指令給exception_handler_push了,在try的結(jié)尾當然要取消掉這個異常處理函數(shù)了,因此pop一下,然后jump到catch后面。當然catch的第一件事也是exception_handler_pop。exception_object_reserve在棧頂預留指定的空間來存放異常對象,exception_object_address則是獲得異常對象的地址,exception_raise就是跳轉(zhuǎn)到最近的異常處理函數(shù)了。raise不會把異常處理函數(shù)的記錄給pop掉,所以要靠catch自己去pop。

    NativeX已經(jīng)完成了,接下來就可以開始打造周邊工具了哇哈哈。將來的目標是將類似C#和Javascript的語言都編譯到NativeX上,然后為這三類語言寫很多語法分析器,然后他們就變成很多語言了。當然這些語言只是demo。Vczh Library++的目的是提供實現(xiàn)編譯器的中間每一層的類庫,因此想干嘛就可以干嘛了哈。
posted on 2010-08-28 01:14 陳梓瀚(vczh) 閱讀(3537) 評論(9)  編輯 收藏 引用 所屬分類: VL++3.0開發(fā)紀事

評論:
# re: Vczh Library++的NativeX語言最后一個特性完成——異常處理 2010-08-29 01:50 | Tanky Woo
朋友你好:
C/C++和算法論壇:C++奮斗樂園
歡迎你加入。
里面有C/C++交流,求助,源碼,
算法學習,求助,
ACM刷題
等各種板塊,
相信大家在一起能學習快樂。

論壇地址:
[url=http://www.cppleyuan.com/index.php]http://www.cppleyuan.com/index.php[/url]

另外,論壇現(xiàn)在招收版主,有意愿的朋友可以看看:
[url=http://www.cppleyuan.com/forumdisplay.php?fid=44]http://www.cppleyuan.com/forumdisplay.php?fid=44[/url]

注:此留言絕不是廣告,只是看見博主也是C/C++和算法的愛好者,我們想邀請博主一起加入我們的論壇。

我也是一名C/C++和ACM愛好者,大家可以去我博客看看就知道了:
[url=http://www.wutianqi.com/]http://www.wutianqi.com/[/url]

打擾之處請見諒。
  回復  更多評論
  
# re: Vczh Library++的NativeX語言最后一個特性完成——異常處理 2010-08-30 04:36 | mm
哇,bb好厲害!  回復  更多評論
  
# 能不能出個NativeX語言的使用說明或?qū)嵗? 2010-08-31 02:35 | luoxiangbi
一定支持,非常感謝,當然還得強烈要求。。。。什么時候能出一個使用NativeX語言的教程或者實例啊,東西是個好東西,也不能就你自己獨自享用啊,得想辦法讓大家用起來,呵呵,代碼注釋本來就少,文檔又不多,對于非科班出身的業(yè)余程序員,哎,慚愧,我都算不上業(yè)余程序員,就是自己瞎搗鼓,這個真的是有困難,呵呵。
  回復  更多評論
  
# re: Vczh Library++的NativeX語言最后一個特性完成——異常處理 2010-09-01 06:42 | 陳梓瀚(vczh)
@luoxiangbi
我會的,等到NativeX完成之后,現(xiàn)在還有可能發(fā)生變動,還不能寫教程  回復  更多評論
  
# re: Vczh Library++的NativeX語言最后一個特性完成——異常處理 2010-09-14 01:31 | yted
冒昧留言,只是因為剛剛在網(wǎng)上看了一篇文章,想知道您對文章里面的觀點(見文章第二段)有什么看法:

A Better Programming Language
http://mdmstudios.wordpress.com/2010/08/31/a-better-programming-language/  回復  更多評論
  
# re: Vczh Library++的NativeX語言最后一個特性完成——異常處理 2010-09-15 07:45 | 陳梓瀚(vczh)
@yted
所以我也只看了第二段不知道會不會斷章取義……我的看法是這樣的
1:對于自己的學習來說,最好是低級語言高級語言一起來,做幾個困難的什么,當然可以學到很多東西,
2:對于公司來說,我相信軟件慢一點點其實是無所謂的,能在短時間內(nèi)開發(fā)出高質(zhì)量的軟件,才有可能應(yīng)對社會的需求變更哈,所以其實是有好處的。舉個例子,就如同C#和C++,我相信雖然C#并沒有比C++多出什么,但至少節(jié)省了你思考那里應(yīng)該delete的時間,你可以去寫更多的東西……  回復  更多評論
  
# re: Vczh Library++的NativeX語言最后一個特性完成——異常處理 2010-09-15 07:46 | 陳梓瀚(vczh)
@yted
還有,根據(jù)實踐,OOP其實作用沒有我們想象中大。所以如果一門語言只讓你可以O(shè)OP而不能【方便】使用其他【范式】,是會讓歷史的車輪倒退的。  回復  更多評論
  
# re: Vczh Library++的NativeX語言最后一個特性完成——異常處理 2010-09-17 00:34 | yted
@陳梓翰

同意第一第二點,軟件工程和編程語言的發(fā)展一直都在降低復雜度這個點上做文章,包括內(nèi)存管理機制,范式,閉包,異常,等等等等,等等等等.

對于 OOP, 其實它只是一種思考的方式, 但作用似乎不僅想象中的小, 因為很多技巧都是基于 OOP 之上的, 當然我們也不妨說其實很多技巧的作用沒有想象中大...

而范式的使用, 感覺某些語言不僅讓我們方便地使用, 還讓我們方便地【犯錯】, 記得 Linus 對 C++ 的評價嗎 :)   回復  更多評論
  
# re: Vczh Library++的NativeX語言最后一個特性完成——異常處理 2010-09-17 07:16 | 陳梓瀚(vczh)
@yted
程序員有義務(wù)通過學習而減少犯錯,Linus只是招不到合適的人而發(fā)囧而已,竟然被眾人捧為圣經(jī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>
            免费一级欧美片在线播放| 新片速递亚洲合集欧美合集| 亚洲午夜极品| 1024精品一区二区三区| 在线成人中文字幕| 亚洲黄页视频免费观看| 亚洲黄色影片| 亚洲破处大片| 一本大道久久a久久精品综合| 久久久99免费视频| 国产精品久久九九| 国产精品久久久久国产a级| 国产精品久久久一区麻豆最新章节 | 性色av一区二区三区红粉影视| 欧美日韩免费高清| 一本大道久久a久久精品综合 | 欧美日韩国产免费| 日韩亚洲在线观看| 亚洲免费观看视频| 欧美视频免费在线| 午夜视频在线观看一区二区三区| 亚洲少妇中出一区| 国产精品色午夜在线观看| 午夜精品一区二区三区在线| 亚洲欧美日韩专区| 黄色av一区| 亚洲国产精品久久| 欧美日韩成人在线播放| 亚洲视频成人| 欧美一区二区成人| 亚洲二区免费| 一本色道久久加勒比88综合| 国产精品美女www爽爽爽视频| 欧美亚洲一区二区三区| 欧美一区二区三区四区在线观看地址| 精品91视频| 亚洲国产一区二区三区a毛片| 欧美日本乱大交xxxxx| 亚洲综合激情| 欧美一区二区三区另类| 亚洲国产精品va在线看黑人动漫| 亚洲精一区二区三区| 国产精品入口日韩视频大尺度| 久久久夜色精品亚洲| 免费一级欧美在线大片| 亚洲欧美视频在线观看| 久久免费视频观看| 亚洲网址在线| 久久久久久免费| 亚洲午夜电影| 久热国产精品视频| 午夜精品免费视频| 男人的天堂亚洲| 午夜亚洲激情| 欧美成人在线免费视频| 午夜精品区一区二区三| 麻豆国产精品一区二区三区| 亚洲欧美国产精品桃花| 玖玖玖国产精品| 久久成人精品一区二区三区| 欧美精品 国产精品| 久久人人97超碰国产公开结果 | 亚洲美女中出| 一区二区三区自拍| 亚洲社区在线观看| 亚洲电影免费在线| 亚洲欧美色婷婷| 一区二区三区毛片| 久久另类ts人妖一区二区| 亚洲一区一卡| 欧美激情第4页| 久久精品国产亚洲一区二区三区| 欧美日韩国产在线播放网站| 免费中文日韩| 韩国av一区| 亚洲午夜久久久久久久久电影网| 亚洲精品亚洲人成人网| 久久精品视频99| 欧美一级欧美一级在线播放| 欧美日韩91| 亚洲精品少妇30p| 亚洲精品国产精品乱码不99| 久久网站热最新地址| 久久亚洲图片| 国产一在线精品一区在线观看| 中文在线资源观看视频网站免费不卡| 亚洲美女色禁图| 欧美激情小视频| 亚洲欧洲综合| 亚洲精品综合在线| 欧美高清自拍一区| 亚洲激情视频网站| 亚洲精品国产精品国自产观看| 免费观看在线综合色| 欧美激情一级片一区二区| 亚洲国产合集| 欧美精品日韩| 一区二区三区精品| 午夜欧美精品久久久久久久| 国产精品久久精品日日| 亚洲一区精品电影| 久久国产精品黑丝| 国产午夜亚洲精品不卡| 久久9热精品视频| 欧美成人一二三| 亚洲精品日本| 欧美四级电影网站| 亚洲欧美经典视频| 久久一区免费| 亚洲麻豆av| 国产精品九九| 欧美一区二区在线| 亚洲第一毛片| 亚洲一区二区av电影| 国产精品久久久久久久一区探花 | 欧美黄在线观看| 一区二区三区日韩精品视频| 欧美一区二区精品| 影音先锋亚洲一区| 欧美精品在线一区| 亚洲女爱视频在线| 欧美成人综合| 中文日韩在线| 狠狠色狠狠色综合| 欧美理论电影网| 午夜精品www| 亚洲国产精品久久| 欧美一区二区三区四区高清| 亚洲第一网站| 国产精品一区久久久久| 欧美成人免费在线视频| 亚洲专区免费| 亚洲国产日韩欧美在线动漫| 欧美午夜视频在线| 久久久久久免费| 亚洲最快最全在线视频| 久久综合狠狠| 亚洲欧美日韩在线播放| 亚洲第一精品夜夜躁人人爽| 欧美日韩在线视频一区二区| 久久久www成人免费精品| 日韩写真视频在线观看| 美女脱光内衣内裤视频久久影院 | 欧美一区二区免费观在线| 亚洲国产日韩欧美在线99| 国产精品毛片一区二区三区| 欧美α欧美αv大片| 亚洲欧美在线x视频| 最新日韩欧美| 蜜臀av性久久久久蜜臀aⅴ| 亚洲永久免费av| 亚洲精品一区二区三区99| 国产三级欧美三级| 欧美系列精品| 欧美激情中文字幕一区二区| 久久精品一区| 午夜激情综合网| 中文精品99久久国产香蕉| 亚洲国产精品高清久久久| 久久先锋资源| 久久精品中文| 欧美一区二区三区免费视| 亚洲私拍自拍| 一区二区三区四区国产精品| 亚洲经典在线| 亚洲国产精品高清久久久| 韩国一区电影| 狠狠v欧美v日韩v亚洲ⅴ| 国产欧美亚洲一区| 国产精品综合| 国产精品视频导航| 国产精品久久久久毛片软件| 欧美日韩在线大尺度| 欧美日韩成人一区二区| 欧美区一区二| 欧美视频一区二区三区在线观看| 欧美日韩国产三级| 欧美日韩一区二区三区在线观看免 | 久久精品国产99| 欧美在线观看天堂一区二区三区| 亚洲欧美日韩精品一区二区| 亚洲欧美国产制服动漫| 亚洲欧美在线免费观看| 亚洲欧美日韩国产中文 | 99re热这里只有精品视频| 亚洲伦理网站| 宅男噜噜噜66一区二区| 亚洲资源av| 久久99伊人| 农村妇女精品| 欧美日韩第一区日日骚| 国产精品久久久久aaaa九色| 国产乱肥老妇国产一区二| 国产精品激情电影| 国产精品第十页| 国内成人在线| 日韩视频一区二区三区| 亚洲欧美999| 亚洲精品一区二区三区在线观看| 亚洲精品视频在线看|