有沒有一種可以編譯為 Lua 運行的語言?

Google的Dart可以基於Chrome的虛擬機獨立運行, 也可以編譯為js兼容運行

MS的TypeScript也同理

對於lua來說, 現在大概只有運行效率高一個優點了. 基於棧的C API設計和無類型的方式廣受詬病.

有沒有一種可以編譯為lua運行的語言, 這樣不就可以在編譯期進行各種類型檢查, 又可以照顧到lua的運行效率?


有沒有投入可觀、維護良好、文檔齊全的,我不知道。不過你在 GitHub 上搜 Lisp2Lua 什麼的就有一大把。不過我覺得提問者大可不必說得要救 Lua 於水火一般。

靜態檢查的 Lua 擴展也有。搜 TypedLua 就是。2014 Lua 大會還有作者的 presentation。

Lua 成功之處就在於 expressiveness。語法啰嗦只是在 keyword 這個級別。沒有靜態類型檢查是 rapid protoype 和 long-term maintainability 一直在權衡的問題。這個方面沒有 ideal solution。To-Lua compiler 玩玩也未嘗不可。但是當成 Lua 社區迫切的任務那就是買櫝還珠了。


其實題主的問題我沒完全看懂。主要是下面這句完全沒看懂:

這樣不就可以在編譯期進行各種類型檢查, 又可以照顧到lua的運行效率?

更新:啊之前把「不就」看成「就不」了難怪讀不通順。OK明白了。

基於棧的C API對很多人來說還是優點?

然後運行效率高低也是要看相對啥的。我覺得吸引遊戲引擎嵌入它的原因有諸如穩定、乾淨、小巧,還很好的支持coroutine;有這些feature set的實現里Lua確實也還算運行效率OK的。

「無類型」是說Lua語言層面的動態類型的設計么?還是說基於棧的C API的「無類型」?

題主真正想要的是類似Hack之於PHP那樣的語言語義基本兼容但帶有type checker的東西么?

讀了 @馮東 的回答,果然已經有這樣的東西了,andremm/typedlua · GitHub

看下面這幾個有沒有吸引題主的地方?

Clue

Terra

MoonScript


MonoScript MoonScript, a language that compiles to Lua

MoonScript is a dynamic scripting language that compiles into Lua. It gives you the power of one of the fastest scripting languages combined with a rich set of features.


Neovim 項目還計劃把 VimL 編譯到 Lua 來運行呢!

不過 VimL 的語法……


我開發的

GitHub - sy-yanghuan/bridge.lua: Bridge.lua is a C#-to-Lua Compiler,which generates equivalent and consistent lua code

可將C#編譯成Lua,已在實際項目中使用,生成的Lua代碼擁有非常優異的可讀性。


有, haxe(Haxe - The Cross-platform Toolkit)就是這種。

haxe支持"編譯/轉換"到多種其他語言,源代碼方式的包括js、as、php、c++、java、c#、python,還有最近增加的lua(2016-05-27)。

雖然生成的代碼幾乎沒法看,但確實能運行。

至於haxe自身,它是支持靜態類型的語言,語法有些類似c#,其自身實現語言是OCaml。

至於 MoonScript (MoonScript, a language that compiles to Lua),也是動態類型的,只是語法看起來舒服點。


推薦閱讀:

作為一名遊戲開發或運營人員,你在體驗時遇到過哪些對你設計思路「特別有收穫」的遊戲作品?
三角形填充演算法的主要實現細節和注意點是什麼?
育碧的UBIart Framework是怎樣的一個遊戲引擎?市面上是否有類似的開源遊戲引擎?
開發的一個rts moba遊戲在手機上的性能不大好,如何進行優化?
俯視角2D遊戲該如何表現角色多個方向的動作?

TAG:編程語言 | 遊戲開發 | 腳本語言 | 編譯原理 | Lua |