SmallLanguage發布記錄

來源:互聯網
上載者:User

項目託管到這裡了:

http://code.google.com/p/smalllanguage/

version 0.1

2011.6.17
SmallLanguage?的version 0.1總算完了。算起來,從第一次開始寫指令碼到現在也有一年多的時間了,前兩次都是寫了幾天就由於種種原因放下了,好在一次比一次思路更開闊。這一次算是徹底地實現了一直以來追求的模樣。很多很多的地方看起來依然不甚滿意,我會一條條地記錄下來,挨個修改。 這兩天CSDN首頁掛出了一條新聞,說Lua已經進入前十了。以前工作中用過Lua,也為它寫過擴充庫,所以多瞭解一些。它的小巧和靈活是名不虛傳的。我寫SmallLanguage?之前構思的時候,也一直在想,同是比較小的指令碼,那麼和Lua比,它需要有什麼特色?技術沒有好壞之分,但沒有特色的東西是活不下去的。初期的想法,是要比Lua更簡潔,甚至沒有預置的API和複雜的資料結構。但這種寄生於主流程式設計語言的指令碼天然是需要擴充的,只是方式問題。目前有了一些思路,但還需要再完善。要在寫的過程中慢慢地體會和修改了。

version 0.2
2011.6.18
可以寫一些C/C++函數註冊進去,然後在指令碼裡面調用,目前唯寫了一個System包,包裡面只有print,scan,add三個函數。主要用於調試。這種擴充機制很簡單,學習的Lua。這一塊兒不想搞得再複雜了。

version 0.3
2011.6.19
重新編排了一下目錄,可以用Makefile進行編譯和測試了。

version 0.4
2011.6.22
變數分成三種:text,number,boolean。變數具有初始值(text:空,number:0,boolean:false)。函數參數也有這三種類型。函數傳回值有void,text,number,boolean四種類型。 另外增加了test的功能。只要把測試指令碼(假設檔案名稱是script.txt)放在test目錄下,然後回到SmallLanguage?目錄運行 ./test.sh script.txt 即可測試

version 0.5
2011.7.1
增加指令碼錯誤提示功能,當指令碼解釋失敗時,會提示出兩種錯誤: user error:告訴指令碼開發人員,錯誤的行號和原因。 developer error:告訴指令碼引擎開發人員,發生錯誤的.cpp檔案、程式碼號和原因。 另外,重新組織了一下目錄。 
編譯: make 
安裝: make install 
運行: ./test.sh code.txt(需要測試的指令檔名,放在script目錄下) 
卸載: make uninstall 

clean: make clean

version 0.6
2011.7.11
寫了幾個工具類:String,Vector,Log,Stack
替換C++的vector,string,iostream等庫,方便向Android等對C++庫支援不完全的平台上面移植。
更新了檔案夾結構安排,方便Makefile編譯和擴充自訂庫

version 0.7
2011.7.18
markError與LOGE合并。建立了統一的LOG架構。LOGV是列印資訊之用,LOGE是出錯時使用,它們都支援可變參數列表。LOGE使用了longjmp來跳到executeScript的起點,不會導致程式強制退出,可以讓宿主語言很從容地結束指令碼引擎。
Vector和Stack的內部機制進行了最佳化。

version 0.8
2011.7.29
實現了函數呼叫堆疊記錄功能,LOG中除了指令碼錯誤行數、指令碼引擎錯誤行數以外,也可以列印指令碼函數調用軌跡了。
建立了位元組碼OPCode的記憶體池。避免指令碼長時間運行過程中不斷new/delete引起的記憶體片段問題。
模仿Java做了一個字串常量池,反覆進行相同的字串操作時不會再引起記憶體的分配/釋放了。但在字串常量池中進行尋找和比較仍然需要線性時間,所以寫指令碼時還是要盡量避免重複進行字串運算。

version 0.9
2011.8.16

OPCode從記憶體池分配後記錄位置,後面交給記憶體池回收時只需要常量時間。
把以前寫的一個智能指標工具SmallPointor移植過來了。與Android的sp不同的是,指標放入SmallPointor封裝起來後只能通過SmallPointor->和*SmallPointor訪問。因為計數器在SmallPointor內部。
添加了計時器精確到微秒

寫時共用(copy-on-write)技術實現起來會讓String變得複雜,而實際的工作並沒有少做,只是延時去做。對於小字串來說,好處不大,而String用的地方很多,穩定性很重要。所以暫時沒有加上。加的時候可以參考這篇文章:
標準C++類std::string的記憶體共用和Copy-On-Write技術

http://blog.csdn.net/haoel/article/details/24058

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.