一直想實(shí)現(xiàn)一個腳本語言,拖拉幾年終于實(shí)現(xiàn)了一個。做個記錄。
想方便其他感興趣的道友的,可惜文章寫的糟糕了。
one more script
lua方言,C#實(shí)現(xiàn),省掉垃圾回收的代碼,沒有用高級特性,換成其他語言問題也不大。
實(shí)現(xiàn)部分:詞法解析,語法解析,代碼生成,虛擬機(jī),協(xié)程(線程)。
初具架子,oms0.1版本。
學(xué)習(xí)路程
為之,則難者亦易已;不為,則易者亦難已。
- 13年末知道lua語言,只有2萬行代碼,決定通讀源代碼,然后實(shí)現(xiàn)個方言。然而源代碼一直沒能堅(jiān)持讀完。
- 15年11月,給自己定規(guī)矩,晚上8點(diǎn)前后,花1~2小時在lua源碼閱讀上。當(dāng)時想就是當(dāng)成看小說,也要看完每一行代碼。一個月左右時間讀完源代碼。語法解析部分沒理清,不能做什么修改。
- 16年3月,決定寫個小語言,最終變成抄了一遍luna的源碼。從16-03-06到16-08-05中間花了40天左右的空閑時間,把luna的代碼手動抄了一遍。luna的代碼寫的相當(dāng)易讀,很值得閱讀。發(fā)現(xiàn)幾個bug,修改了不少代碼,信心大增,實(shí)現(xiàn)編程語言也不難嘛。
- 17-01-25,過年回家,準(zhǔn)備從零開始實(shí)現(xiàn)lua方言。大量參考luna的代碼實(shí)現(xiàn)。一個月后,實(shí)現(xiàn)了一個不完整版lua方言,小有成就。也發(fā)現(xiàn)完備的腳本語言實(shí)現(xiàn)起來,確實(shí)不容易啊,自己實(shí)現(xiàn)的更像個玩具,特別是架構(gòu)層面,不過也算簡潔易修改。
https://github.com/treert/script_learn/blob/master/doc/記錄.txt
https://github.com/treert/oms/blob/master/doc/記錄.md
資料鏈接
最有價值的資料是lua的官方源代碼和luna的C++實(shí)現(xiàn)源代碼。兩套代碼讀完,對與腳本語言的實(shí)現(xiàn)也就理解個7788了。
- lua官網(wǎng): https://www.lua.org
- luna github: https://github.com/airtrack/luna
其他的資料:
lua5.2的_ENV
http://blog.codingnow.com/2011/12/lua_52_env.html
lua的好與壞
http://blog.csdn.net/xoyojank/article/details/12762909
lua垃圾回收
http://blog.csdn.net/xuzhonghai/article/details/8465028
lua的table,閉包
http://www.blogjava.net/killme2008/archive/2008/04/07/191324.html
lua 性能優(yōu)化技巧【好文章】
http://wenku.baidu.com/view/bcc4a24ecf84b9d528ea7ae4.html
JIT 動態(tài)編譯【luajit用到動態(tài)編譯技術(shù)】
http://blog.csdn.net/hsuxu/article/details/9320699
ruby的作用域
https://ruby-china.org/topics/26824
ruby的變量
http://blog.csdn.net/weeweee/article/details/8885480
ruby的閉包
http://www.oschina.net/translate/know-your-closures-blocks-procs-and-lambdas
ruby的module和class
http://www.cnblogs.com/wangkangluo1/archive/2011/07/24/2115538.html
php的接口 c# as 也是類似的 主要用于多繼承把
http://blog.sina.com.cn/s/blog_75ad10100101iv1s.html
lua的內(nèi)部比較字符串用到strcoll,這個函數(shù)比較中文可能會按拼音來
http://www.cnblogs.com/gakusei/articles/1585216.html
lua的迭代器
http://www.cnblogs.com/stephen-liu74/archive/2012/06/20/2413799.html
lua的垃圾回收【這是第五篇】
http://blog.codingnow.com/2011/03/lua_gc_5.html
lua的語法解析【這個作者寫了個類似lua的語言(https://github.com/airtrack/luna)】
http://www.cppblog.com/airtrack/archive/2012/08/12/186998.aspx
從lex&yacc介紹到編譯器
http://www.cppblog.com/woaidongmao/archive/2008/09/20/62354.aspx