開源了之后反而就不是很想寫開發紀事了,因為每一次check-in到服務器上都會寫幾句描述,就有了一種已經公布了進度的錯覺。Codeplex加上Visual Studio Team Foundation System真是方便,不像其他的源碼管理系統一樣要配置到半死,還要到命令行里面搞來搞去,好不容易找到一個UI插不進Visual Studio,好不容易找到一個能插的老是要掛。
但是開源了之后就不好意思不寫文檔了。把自己的代碼放上網的另一個好處就是總是覺得會有很多人來看,所以還是要寫點文檔介紹介紹。Codeplex是英文的,文檔還不能只有中文。而且自己認識的很多程序員是說中文的,文檔也不能只有英文。結果干脆就維護起了雙語文檔。不過雙語文檔真是麻煩啊。現在沒看到什么文檔生成工具可以產生多種語言(指自然語言)的文檔的,而且格式還不好看(想象一下Doxygen的東西,全都是參差不齊的表格,不知道從哪里下手看啊),因為文檔除了介紹每一個函數的作用以外,還要有編程指南。其實有些函數用指南來寫反而比單獨的介紹函數的返回值參數什么的要好得多。特別是C++。
現在Vczh Library++3.0的Core Library應該算成型了,于是在做腳本引擎的部分。我打算把腳本引擎分為若干個模塊。首先是基礎語言的中間指令集,其實就像是專門為C語言設計出來的指令集。其次是基礎語言的語法樹,這次的語法樹的類型規則要足夠簡單,因為主要是用來給高級語言的編譯器產生輸出的。第三是一門類似C#(當然這只是個比喻)的語言,然后把這個語言的語法樹轉換為C語言的語法樹。想來想去之前 CMinus的失敗其實并不是說高級語言語法樹不能轉換為C語言的語法樹,而是設計出來的語法樹太強大了反而不好拿來生成。最后就是動態語言了。
這次做出來的應該是一個框架,我提供一大堆工具輔助開發語法分析器,然后底下有一層把虛擬機的事情全都給做了。于是就可以在上面用非常小的代價來實現各種各樣的語言了。
現在基礎語言的中間指令集算是搞定了,當然只剩下一點點,不過這個在后面的東西完成之前沒法繼續寫。C語言的編譯器正在搞,我提供了一大堆的工具讓人們可以在C++里面漂亮的拼出語法樹,然后可以執行。當然以后還可能會有專門的語法分析器和代碼生成器來在一些語言和這個語法樹之間進行轉換,不過這也僅僅是為了調試用的,因為要實現的語言其實是一門類似C#的高動態和靜態結合的語言的語法樹。
但是開發一個語法樹是相當麻煩的,因為語法樹基本上就是幾套大規模繼承類的組合,然后要給他們寫各種各樣的虛函數,每一次要修改虛函數的參數表的時候都是大動干戈。于是今天早上開發出了一堆宏,用來方便地寫語法樹的visitor(這幾乎是處理語法樹的唯一辦法),萬一遇到需求變更,改起來更加方便。代碼在Library\Scripting\Common\AlgorithmDeclaration.h,還附帶有一個TestCase,在UnitTest\UnitTest\TestScripting_BasicLanguage.cpp里面。
接下來就可以開發C語言語法樹到中間指令集的轉換了,然后一層一層做下去。最后要是有空,把最低下的中間指令集拿來一x86,整個瞬間就變成JIT了。
posted on 2010-01-09 23:37
陳梓瀚(vczh) 閱讀(2410)
評論(1) 編輯 收藏 引用 所屬分類:
VL++3.0開發紀事