静的に型付けされたLua
-
03-07-2019 - |
質問
私は、コンパイル時に型チェックされるが、標準のLua 5.1バイトコード(実行時型のみ)を出力するLuaフロントエンドコンパイラを探しています。私が欲しいのは、実行時よりもささいなエラーを検出するための、かなりの量の静的なコンパイル時の構文解析とオプションの入力です。結果のバイトコードは、標準のLoadString()でコンパイルされた既存のLuaバイトコードとうまく連携する必要があります。
明確にするために、違いはバイトコンパイル時にのみ発生します。実行時、バイトコードは、コンパイルフェーズ中に異なる/異常なことが発生したことを認識しません。
私が考えていることは、ActionScriptによく似ています。 Luaバイトコードを出力するActionScriptコンパイラも気にしません!
そのような努力を聞いたことがありますか?これを行うためにMetaLuaを使用することについていくつかの参照を見てきましたが、正直なところ、私は彼らのドキュメントの最後尾を作るほど明るくはありません
解決
2005年の夏頃、信じられないほど優秀な学部生と一緒に、 Luaのコンパイル時の型推論。おそらく注釈によって支援されます。この問題は非常に難しいことが判明しました! (私の学生は短いテクニカルノートを書きましたが、それは実際に一般的な流通を意図したものではありません。)
あなたが提起した問題を解決したい場合、それは重要な静的型チェックを許可し、標準のバイトコードでコンパイルされたLuaコードと相互運用 、 これら2つの制約を満たすために、新しい言語をゼロから設計します。かなりの作業量になりますが、型システムをLuaに後付けしようとするよりもはるかに簡単です。
他のヒント
このMetaluaブログ投稿をご覧ください。
>-{ extension "types" }
function sum (x :: list(number)) :: number
local acc :: number = 0
for i=1, #x do acc=acc+x[i] end
return acc
end
これは実行時のソリューションのように見えます。
とにかく、 Metaluaメーリングリストでご質問ください。 Lua構文を拡張する場合、Metaluaは最初に注目するツールです。
この質問は6歳です...しかし、新しい答えは次のとおりです: http://terralang.org/
Cと同様に、Terraはシンプルで静的に型付けされたコンパイル済み言語であり、 手動メモリ管理。ただし、Cとは異なり、 Luaとの相互運用を開始します。 Terra関数は一流です terraキーワードを使用して作成されたLua値。必要なときは マシンコードにJITコンパイル。
新しい論文「Typed Lua:An Optional Type System for Lua」があります。 Dyla'14で公開されたばかりのPUC-Rioから。 http://dl.acm.org/citation.cfm?id=2617553
これは、「型指定されたLuaの初期設計、オプションで型指定されたLuaスクリプト言語の拡張」についてです。まだ進行中であり、型システムはまだ比較的単純です。型推論/型チェックツールは提供されていません。
metaluaベースのタイピングシステム、Tidal Lockに関して:オプションの静的型チェックとFabienからのLuaの推論。 http://lua-users.org/lists/lua-l /2013-02/msg00403.html 。
Raviもあります https://github.com/dibyendumajumdar/ravi
Raviプログラミング言語は、オプションの静的型付けとLLVMおよびlibgccjitベースのJITコンパイラーが制限されたLua 5.3の派生物です
Terraでのプログラミングを本当に楽しんでいます(上記参照)