• <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  評(píng)論-2670  文章-0  trackbacks-0

                考試結(jié)束了,Vczh Free Script 2.0也放出來(lái)了,正則表達(dá)式的代碼也一并發(fā)包含在VFS 2.0里面了。于是想寫(xiě)一個(gè)關(guān)于如何開(kāi)發(fā)腳本引擎的系列。過(guò)幾天要去實(shí)習(xí)了,如果找到晚上上網(wǎng)的辦法的話會(huì)陸續(xù)發(fā)出來(lái),要不然的話只能在實(shí)習(xí)結(jié)束之后一并發(fā)上來(lái)了。

                腳本引擎在很多時(shí)候都能用上,而且現(xiàn)在也有很多腳本引擎的產(chǎn)品了。為什么還要學(xué)習(xí)如何寫(xiě)腳本引擎呢?其一是為了學(xué)習(xí),其二是為了了解。學(xué)習(xí)對(duì)于自己的編程水平的提高很有幫助,了解對(duì)于使用當(dāng)今的腳本引擎也很有幫助。而且自己開(kāi)發(fā)腳本引擎的好處在于可以自己控制安全問(wèn)題。雖然這個(gè)在大多數(shù)情況下并不是優(yōu)先考慮的條件。

                腳本引擎的開(kāi)發(fā)是有一定的方法的。首先,要把輸入的腳本代碼變成記號(hào),也就是說(shuō)把“printf("Hello World");”變成print、(、"HelloWorld"、)和;五個(gè)部分。至于開(kāi)發(fā)可配置的高速詞法分析器可以看這篇文章。接下來(lái)就是語(yǔ)法分析器。這個(gè)時(shí)候首先需要了解為什么代碼是一棵樹(shù)(數(shù)據(jù)結(jié)構(gòu)的樹(shù)),然后才能開(kāi)始工作。至于如何寫(xiě)語(yǔ)法分析器,或者詞法分析器也想手寫(xiě)的話,可以看這篇文章。為了執(zhí)行效率,我們需要將語(yǔ)言抽象成指令集,就像X86的指令集一樣,但是更加簡(jiǎn)單。可以使用堆棧機(jī)。

                一門支持能垃圾收集的string、array和不能垃圾收集的class的語(yǔ)言是很容易編譯成機(jī)器碼的。現(xiàn)在我正在閱讀intel的文檔了解x86(32位)的指令格式。如果在寫(xiě)文章的過(guò)程中這個(gè)問(wèn)題被我解決了的話,我也會(huì)順便把如何將腳本編譯成機(jī)器碼以便加快執(zhí)行速度的辦法寫(xiě)出來(lái)。現(xiàn)在我對(duì)于x86指令集的模式已經(jīng)了解了,剩下具體問(wèn)題。垃圾收集器的資料并不多,我唯一找到的就是《Garbage Collection,Algorithms for Automatic Dynamic Memory Management》。中文版貌似賣完了,我只能下載英文版的影印版看。很慘。在文章里面我會(huì)講述一種比較簡(jiǎn)單的單代compact垃圾收集器(.NET用的是多代)。

                文章的組織暫時(shí)決定使用如下方法:
                ·如何設(shè)計(jì)合適自己使用的語(yǔ)言
                ·詞法分析器、語(yǔ)法分析器與語(yǔ)法樹(shù)的結(jié)構(gòu)(一開(kāi)始只有函數(shù)、字符串以及能進(jìn)行垃圾收集的數(shù)組,弱類型語(yǔ)言)
                ·如何設(shè)計(jì)合適的指令集
                ·指令集(堆棧機(jī))的數(shù)據(jù)結(jié)構(gòu)以及從語(yǔ)法樹(shù)翻譯到指令集的方法
                ·虛擬機(jī)的開(kāi)發(fā)
                ·如何向虛擬機(jī)加入外部函數(shù)以便讓腳本可以調(diào)用程序提供的其他功能
                ·進(jìn)一步修改語(yǔ)言,加上其他特性等
                如果x86的指令集研究的速度夠快的話,將會(huì)添加如下內(nèi)容
                ·分配寄存器的算法
                ·x86指令格式
                ·如何調(diào)用自己產(chǎn)生的機(jī)器碼

                這個(gè)系列持續(xù)的時(shí)間將比較久,而且每一篇文章將附帶示例代碼。如果只需要了解方法而不需要看具體的實(shí)現(xiàn)的朋友們可以略過(guò)這個(gè)部分。關(guān)于具體實(shí)現(xiàn)的部分我將可能在文章中標(biāo)明出來(lái)。

            posted on 2008-07-06 08:37 陳梓瀚(vczh) 閱讀(2280) 評(píng)論(5)  編輯 收藏 引用 所屬分類: 腳本技術(shù)

            評(píng)論:
            # re: 關(guān)于腳本引擎 2008-07-06 16:31 | foxtail
            寫(xiě)完可以出書(shū)了 ^_^  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于腳本引擎 2008-07-06 17:43 | Lnn
            # re: 關(guān)于腳本引擎 2008-07-06 18:37 | 空明流轉(zhuǎn)
            光有x86的code還不行,還得弄成PE格式才有價(jià)值。
            我現(xiàn)在就編譯成C code,然后調(diào)用C編譯器編譯成本地代碼。
            這樣的話不是x86也能用,還能享受一點(diǎn)C的優(yōu)化能力。  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于腳本引擎 2008-07-07 01:43 | 陳梓瀚(vczh)
            PE沒(méi)有宿主程序,所以就不是腳本了,因此不是腳本的考慮范圍。  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于腳本引擎 2008-07-07 17:14 | 空明流轉(zhuǎn)
            no,dll。  回復(fù)  更多評(píng)論
              
            韩国三级大全久久网站| 久久人妻无码中文字幕| 99久久夜色精品国产网站| 久久久久亚洲AV无码专区桃色| 久久精品国产99国产电影网| 国产精品久久久久久一区二区三区| 日本欧美久久久久免费播放网| 少妇内射兰兰久久| AV无码久久久久不卡蜜桃 | 99久久国产主播综合精品| 99精品久久久久中文字幕| 久久被窝电影亚洲爽爽爽| 丰满少妇人妻久久久久久4| 国产亚州精品女人久久久久久 | 久久久亚洲欧洲日产国码aⅴ| 久久亚洲春色中文字幕久久久| 色欲综合久久中文字幕网| 97久久久精品综合88久久| 一级做a爰片久久毛片人呢| 久久久久18| 亚洲欧美日韩中文久久| 久久成人国产精品二三区| 中文字幕无码久久精品青草| 久久亚洲私人国产精品| 精品水蜜桃久久久久久久| 精品久久久久久久国产潘金莲 | 一本久久a久久精品vr综合| 99久久成人国产精品免费| 午夜精品久久久久9999高清| 久久天堂AV综合合色蜜桃网| 久久精品无码免费不卡| 亚洲午夜久久久影院| 久久精品国产亚洲麻豆| 热久久视久久精品18| 色综合久久久久网| 狠狠色狠狠色综合久久| 久久精品夜色噜噜亚洲A∨| 久久精品国产亚洲av麻豆色欲 | 精品久久人人爽天天玩人人妻| av色综合久久天堂av色综合在 | 久久久久久人妻无码|