Ruby發明者Matz藉助AI開發原生編譯器
Ruby創建者Yukihiro Matsumoto(Matz)正在Anthropic的Claude協助下構建Spinel,一個實驗性的Ruby提前編譯(AOT)編譯器。Spinel將Ruby代碼轉換為C語言,性能提升顯著,但存在諸多限制,包括不支持eval、線程等特性。
文章情報
要點
- Matz使用Anthropic的Claude Code開發Ruby的AOT編譯器Spinel。
- Spinel將Ruby AST轉換為C代碼,執行速度比MiniRuby快11.6倍。
- Spinel有侷限:不支持eval、線程、元編程等,且與大多數現有Ruby代碼(如Rails)不兼容。
- 該項目是實驗性的,已使用AI生成的代碼重建三次。
為甚麼重要
這條新聞值得關注,因為Matz使用Anthropic的Claude Code開發Ruby的AOT編譯器Spinel。
技術影響
可能影響模型選型、推理成本、產品能力和評測基準。
Ruby的發明者Yukihiro Matsumoto(更廣為人知的名字是Matz)正在利用Anthropic的Claude Code構建一個名為Spinel的實驗性原生編譯器。Spinel是一個提前編譯(AOT)編譯器,旨在將Ruby代碼直接編譯為原生可執行文件,從而大幅提升性能。
Spinel的工作原理是將Ruby代碼解析為抽象語法樹(AST)文件,然後將其轉換為C代碼,最後通過標準的C編譯器(如Linux或Windows上的gcc,或macOS上的LLVM Clang)編譯成原生可執行文件。據Matz的測試,使用Spinel編譯的代碼在Roby 4.1.0上運行速度比MiniRuby(一個精簡版Ruby構建)快約11.6倍。
Ruby傳統上是一種解釋型語言,依賴運行時引擎解析和執行代碼。為了提高性能,Ruby社區開發了多種即時編譯(JIT)技術,如MJIT、YJIT和ZJIT,其中後兩者由Ruby的重度用户Shopify開發。Spinel與這些JIT編譯器不同,它生成獨立的原生代碼可執行文件,無需任何額外運行時即可部署。
然而,Spinel目前僅支持Ruby的一個子集。不支持的特性包括:eval語句(運行時評估和執行Ruby代碼)、線程、除UTF-8之外的文本編碼、元編程(如運行時定義方法)以及深度嵌套的lambda函數。由於Ruby變量無類型化而對象強類型化,Spinel通過類型推斷來生成C代碼。它使用了成熟且成熟的Ruby解析器Prism,並實施了多種優化,如方法內聯和死代碼消除。生成的C代碼在默認警告級別下編譯無誤。Spinel還包含一個垃圾收集器以自動回收內存,並支持外部函數接口(FFI),可與libc或SQLite等原生代碼庫集成。
目前Spinel仍處於實驗階段,無法與大多數現有Ruby代碼(包括流行的Web框架Ruby on Rails)配合使用。不過,Ruby開發者可以針對Spinel編寫代碼,例如編寫輔助函數,然後從其他Ruby代碼中調用,以此作為優化手段。
Matz在上個月於日本函館舉行的RubyKaigi 2026大會上介紹了Spinel。據與會者透露,Matz表示Spinel的想法三年前就已形成,但藉助AI僅在幾周內就實現了。Spinel倉庫中的大部分代碼都帶有註釋“co-authored by: Claude Open 4.7 (1M context)”。此外,該項目已經在一系列實驗中重建了三次。
Matz可能是AI生成代碼的理想用户。他理解代碼,能夠從開發速度的提升中獲益,同時不會失去對代碼功能的掌控,並能夠利用他現有的技能以及進一步的AI提示來優化代碼。此外,這些代碼還經過了數百個測試和基準測試的驗證。