Duetto:更快更智能的C++/JavaScript代碼轉換器
Duetto 是一個編譯器,可以將 C++ 程序編譯為二進制代碼和 Javascript 代碼,這允許開發者使用單一的 C++ 代碼庫編寫高性能的分布式 Client/Server 應用。

Duetto 的作用
為了使 Web 應用的執行速度接近于本地應用,科技巨頭開始探索使用底層語言開發 Web 應用的可能性。Mozilla 帶來了 asm.js,這是一個 JavaScript 子集,可以被用來作為一個底層的、高效的編譯器目標語言,也就是說開發者可以將本地應用編譯為該語言或 JavaScript,以實現更高的性能。
目前比較知名的解決方案是 Emscripten,這是一個基于 LLVM 的編譯器,可以將任何通過 LLVM 前端(比如 C/C++ Clang)生成的 LLVMIR 中間碼編譯成 JavaScript。
Duetto 類似于 Emscripten,同樣基于 LLVM。但 Duetto 的開發人員表示,Duetto 比 Emscripten 更快、更智能。
更智能的 Emscripten 替代品
Emscripten 通過模擬一個完整的字節尋址地址空間來處理 C++ 代碼,盡管這是一個很好的解決方案,但是不太理想。因為 JavaScript 不是基于字節尋址地址模式的,而是基于對象尋址模式——所有內存被包含在一個對象中。而 C++ 沒有什么不同。
Duetto 的做法是——集成了 clang 和 LLVM 工具鏈,能夠將 C++ 面向對象的結構映射為本地 JavaScript 對象。事實證明,在現代 JavaScript 引擎上,訪問對象比訪問數組要更快。Duetto 開發人員給出了以下基準測試結果:

目前狀態
Duetto 開發人員表示,目前該編譯器的后端已經開發完備,已經可以將 C++ 應用程序編譯為 Web 應用,尤其是游戲應用。
但是 Duetto 前端還不太完善,目前 Duetto 開發人員的首要任務是改進 bug 報告,使用戶的移植體驗更加平滑。
Duetto 開發人員稱,未來 6 個月內,Duetto 將會作為開源項目正式發布。
項目官網:http://leaningtech.com/duetto/