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