質問

私は、コンパイル時に型チェックされるが、標準の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は最初に注目するツールです。

PS Luaをすべて大文字にしないでください

この質問は6歳です...しかし、新しい答えは次のとおりです: http://terralang.org/

  

Cと同様に、Terraはシンプルで静的に型付けされたコンパイル済み言語であり、   手動メモリ管理。ただし、Cとは異なり、   Luaとの相互運用を開始します。 Terra関数は一流です   terraキーワードを使用して作成されたLua値。必要なときは   マシンコードにJITコンパイル。

そのようなことはありません。これを行うためにMetaLuaを拡張することは可能かもしれませんが、誰もそれをしていません。 Luaは動的言語であることを意図しています。静的に型付けされた言語が必要な場合は、それを使用してください。

基本的に探しているのは、JavaやC#のようなものです。その場合、 Lua.NET のようなプロジェクトを使用して統合できますC#を使用した既存のLuaコード。 Java用の Kahlua もあります。

新しい論文「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でのプログラミングを本当に楽しんでいます(上記参照)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top