已經(jīng)差不多有三個(gè)多星期沒(méi)有寫博客了。這段時(shí)間主要是在休假。休假的時(shí)候?qū)懘a,跟朋友玩,去了趟廣州辦點(diǎn)事情,然后就要結(jié)束了。
Vczh Library++3.0還是一直在開(kāi)發(fā)。第一層語(yǔ)言的語(yǔ)義分析基本上已經(jīng)做完了,不過(guò)還需要加一點(diǎn)功能進(jìn)去,這在代碼生成部分做了之后再做。
這次的思路比之前清晰了很多。我一直在思考如何將Javascript編譯成C#再編譯成C語(yǔ)言的問(wèn)題。當(dāng)然這說(shuō)的三種語(yǔ)言只是“類似”,無(wú)論換成python也好lua也好都是一樣的。作為一個(gè)通用的腳本語(yǔ)言開(kāi)發(fā)平臺(tái),我的目標(biāo)是讓一門新語(yǔ)言可以被很快的組裝起來(lái),并在我開(kāi)發(fā)的平臺(tái)上運(yùn)行,與平臺(tái)上的其他語(yǔ)言互通并共享函數(shù)庫(kù)。前者是重點(diǎn),后者是支撐。也就是說(shuō)無(wú)論怎么定位,最終都是要做成一個(gè)可以讓各種語(yǔ)言同時(shí)運(yùn)行,并讓新語(yǔ)言可以被快速開(kāi)發(fā)的一個(gè)平臺(tái)。于是每一層語(yǔ)言需要支持的特性都得經(jīng)過(guò)深思熟慮才能確定下來(lái)。
因此,我的策略是為各種不同類型的語(yǔ)言開(kāi)發(fā)一個(gè)元語(yǔ)言,然后通過(guò)描述一門新語(yǔ)言與相應(yīng)的元語(yǔ)言的不同之處來(lái)完成該新語(yǔ)言的開(kāi)發(fā)工作。因此最近的工作主要都是針對(duì)最基礎(chǔ)的那一層——也就是面向過(guò)程非托管語(yǔ)言。在這里大概可以稱之為Native X語(yǔ)言吧。之所以叫Native X,是因?yàn)檫@玩意兒跟C語(yǔ)言還是有一些比較大的區(qū)別的。跟之前的CMinus不一樣,CMinus致力于將C(做了一點(diǎn)修改)編譯成x86的代碼,而Native X則致力于提供大多數(shù)面向過(guò)程的非托管語(yǔ)言所需要的組件,并且為面向?qū)ο蟮耐泄苷Z(yǔ)言提供必要的基礎(chǔ)設(shè)施。
在不斷地思考中,我的目標(biāo)已經(jīng)漸漸清楚了。Native X語(yǔ)言與C語(yǔ)言的差別主要有以下部分:
1、沒(méi)有宏
2、提供struct的構(gòu)造函數(shù)和析構(gòu)函數(shù)
3、提供泛型
4、提供dll級(jí)別的反射和泛型支持。
5、源代碼組織方法不體現(xiàn)在代碼里(沒(méi)有#include,或者#import之類的預(yù)編譯指令)
6、提供new和delete的變形
也就是說(shuō),今后用Native X語(yǔ)言寫的模板函數(shù)和模板類型,就算編譯進(jìn)dll也無(wú)所謂,照樣可以被其他程序拿去使用。這樣的話可以做很多事情,譬如說(shuō)實(shí)現(xiàn)pascal和basic的數(shù)組和字符串,實(shí)現(xiàn)C#的類引用等等。但是Native X語(yǔ)言同時(shí)具有操作指針和內(nèi)存的能力,雖然比較危險(xiǎn),但是可以通過(guò)上層語(yǔ)言的編譯器來(lái)確保產(chǎn)生的代碼是受保護(hù)的。這樣做的好處是在Vczh Library++3.0開(kāi)發(fā)完以后,一個(gè)游戲的腳本可以大部分用Lua來(lái)寫,而且其中需要后門的一小部分代碼可以用C來(lái)寫,然后編譯在一起成為一個(gè)獨(dú)立的腳本程序,最后讓游戲去執(zhí)行它。
上面描述的功能是在抽象了很多語(yǔ)言的語(yǔ)法之后確定下來(lái)的。這個(gè)目標(biāo)在當(dāng)前進(jìn)度下實(shí)現(xiàn)了一般,也就是說(shuō)這些多出來(lái)的部分還沒(méi)做,但是C語(yǔ)言有的那一部分的語(yǔ)義分析已經(jīng)做完了,順帶搞定了一個(gè)通用的符號(hào)表雛形,還有大大簡(jiǎn)化語(yǔ)法樹(shù)以及相關(guān)算法開(kāi)發(fā)的各種基礎(chǔ)設(shè)施。目前的計(jì)劃是先實(shí)現(xiàn)C語(yǔ)言有的那一部分的代碼生成,讓腳本可以運(yùn)行起來(lái),然后將上面列出來(lái)的“區(qū)別”一個(gè)一個(gè)添加進(jìn)去,同時(shí)做好unit test的工作。
最新的代碼可以在
http://vlpp.codeplex.com下載。