2008-10-06 42 views
30

我需要找到一個很好的Lua to JavaScript轉換器; luaforge.org上的lua2js已過時(3歲左右,看起來不適用於Lua 5.1),我還沒有在Google上找到任何東西。有沒有最近的Lua to JavaScript轉換器或解釋器?

有沒有人有任何其他轉換器的經驗嗎?它應該在Lua 5.1上工作,最好是基於.NET的,但.NET不是必需的。一個javascript lua解釋器也可以工作。

回答

8

這是一個關於Lua列表的經常性問題,我猜是因爲兩種語言的膚淺相似性。

不幸的是,有很多重要的差異並不那麼明顯。讓它工作需要一個成熟的編譯器來定位JS而不是Lua的字節碼,或者用JavaScript重寫Lua VM。

我不知道Lua2js的原始目標;但如果它僅僅是一個有限的「翻譯者」,那麼編寫想要翻譯的Lua代碼將會拒絕大多數(全部)關於Lua的好事。例如,我不認爲你可以使用函數作爲表鍵,因爲在JavaScript中,鍵只是字符串(和數字?我不確定)。

.NET的選擇更合理,可以通過改變現有的編譯器來發出CLR字節碼而不是標準的Lua字節碼。即使CLR是爲其他類型的語言而設計和優化的,它絕對是通用的,足以運行得非常好。主要的障礙是圖書館的可用性。

我剛剛發現的另一種選擇是由Roberto Ierusalmschy和Fabio Mascarenhas提供的this paper,他們在那裏探索將LuaVM字節碼轉換爲CLR字節碼。

與往常一樣,在學術論文中,沒有關於寫作日期的說明,所以我不知道它是新的革命性的還是舊的和遺忘的。

+0

我想知道人們的真正目標是什麼?他們知道Lua,並且想要編寫JavaScript而不必學習JavaScript?他們有一個用Lua編寫的大型應用程序,並希望以最少的工作將其移植爲一個Web應用程序?這些對我來說似乎都不是那麼可能 – davr 2008-10-08 16:15:29

+0

http://www.computerworld.com.au/index.php/id;1028768484的採訪使得聽起來像Lua.NET是一個近期和正在進行的項目。 – 2008-10-09 19:22:33

+0

問候,人們可以使用一個函數作爲javascript中的表鍵。您的意見似乎並不知情。 – tomdemuyt 2010-07-06 15:43:41

0

翻譯爲JavaScript是有趣的,可以在瀏覽器端進行JavaScript替換。我們也可以在瀏覽器上採取一些安全措施。將JavaScript作爲平臺定位的目標是最普遍的平臺之一 - 地球上的瀏覽器。 GWT執行java2js,但我不確定是否要在應用程序中僅引入幾個頁面的GWT。我得想想。對於你作爲表中關鍵的功能,必須要做一些魔術。也許只需在編譯時爲每個函數分配一個唯一的名稱,並將其用於您的密鑰。您還可以爲所有的鍵添加前綴以進行類型檢查,這是一個不錯的開始。

0

這樣做的一種方法可能是使用LuaSub並生成JavaScript而不是Lua輸出。這可以通過合理的努力完成(目前LuaSub沒有這樣做)。

在編譯時可以發現JS不能屈服於Lua需求的地方,並且會導致錯誤。

我將在未來做很多JS + SVG,如果JS方面頭疼,這可能是一個嘗試的事情。如果其他人想要去一趟,請這樣做。 LuaSub的來源在你身邊。最初,LuaSub被製作爲Lua 5.1的語法擴展器,引入易於使用的概念(s.a.增量,類型檢查),沒有與標準Lua的制動兼容或需要修補它。這與MetaLua類似(這看起來已經變得更加普遍)。

0

我已經寫了一個部分完整的Lua到ECMAscript靜態編譯器。

https://github.com/mherkender/lua2js-experiment

它可能無法滿足您的需求,爲項目缺少許多關鍵功能,我不急於去完成它,因爲它是一個死衚衕。詳情請閱讀自述文件。

儘管我在互聯網上看到了一些擔憂,但只有少數Lua特有的功能(如* fenv函數或大多數調試庫),Javascript並不真正支持這些功能。其他人,如文件庫,受到VM有權訪問的功能的限制。

我也親自嘗試過Lua + Emscripten選項,雖然它令人印象深刻,但它也很慢。

4

ljs在javascript中有一個lua vm的工作演示。源代碼甚至可以使用lua編寫的lua解釋器在瀏覽器中編譯。出現

https://github.com/humbletim/ljs

2

我一直在使用此實現https://github.com/mherkender/lua.js以前的答案中提到過。它可以離線和加載時解析,我發現它非常易於使用。

我的Lua腳本通過C函數進行調用,並將該C代碼轉換爲Javascript並將它與lua.js連接起來非常簡單。

2

訪問http://luajs.org看到我的工作。

有網站菜單上的演示和基準。

壓縮前只有35.5K,壓縮後只有12.2K。它可以直接訪問Javascript對象/數組。它幾乎每天都會更新。

它比lua.vm.js更快。 (因爲metatable的實現不那麼快),我一直在優化它。