目前進展比較多的是chapter 5 ultimate machine,該章節已經寫完了,大概是因為結構簡單,相比chapter 1的syntax 要建AST好寫很多,該段的code也已經衍合進master:
https://github.com/yodalee/computationbook-rust
在這裡有幾個譔寫上的技巧
enum 要加上#[allow(dead_code)]
這好像是rust 設計上的…feature,因為enum的code 只要沒用到就會判定為dead_code,但通常是測試檔沒測到,或主程式沒用到
其實這樣也有負面效果,也許你的enum是真的有廢選項
寫到這邊我的code 跟原書的ruby code 已經開始有差了
例如裡面的tape function,每呼叫一次write, move_tape_left這類的function,都是用自身的狀態回傳一個新的Tape回來
不過我在Rust,改用call by reference的寫法,大概是感覺到每次都return 一個新的物件感覺很浪費資源吧,這樣就變成兩者執行行為不同的來源Orz
之後檢討並改進XD
附上要如何執行computation book 裡面的內容,我在archlinux 上是真的弄了一段時間,首先要裝Ruby,再裝bundle
感覺Rust 愈寫愈有手感,這種東西果然是要練習寫才會變熟,下次來直播寫rust 好了XD
enum 要加上#[allow(dead_code)]
這好像是rust 設計上的…feature,因為enum的code 只要沒用到就會判定為dead_code,但通常是測試檔沒測到,或主程式沒用到
其實這樣也有負面效果,也許你的enum是真的有廢選項
寫到這邊我的code 跟原書的ruby code 已經開始有差了
例如裡面的tape function,每呼叫一次write, move_tape_left這類的function,都是用自身的狀態回傳一個新的Tape回來
不過我在Rust,改用call by reference的寫法,大概是感覺到每次都return 一個新的物件感覺很浪費資源吧,這樣就變成兩者執行行為不同的來源Orz
之後檢討並改進XD
附上要如何執行computation book 裡面的內容,我在archlinux 上是真的弄了一段時間,首先要裝Ruby,再裝bundle
sudo pacman -S ruby
gem install bundle
在shell 設定檔內加入:gem install bundle
export GEM_HOME=$(ruby -e 'print Gem.user_dir')
export PATH=$GEM_HOME/bin:$PATH
接著就可以在computationbook 的家目錄,執行export PATH=$GEM_HOME/bin:$PATH
bundle exec irb -I.
>>>require 'the_ultimate_machine.rb'
如果出錯,好像要執行bundle install 把有缺的套件補上,再來的指令就只能用貼的了,測試的檔案都在資料夾下的irb.txt裡面。>>>require 'the_ultimate_machine.rb'
感覺Rust 愈寫愈有手感,這種東西果然是要練習寫才會變熟,下次來直播寫rust 好了XD