私はLuaのソースコードを読んでいましたが、驚いたことにはそれがいくつかの奇妙な命令(例えばGETUPVAL、FORLOOPなど)を生成するために実装されていることがわかりました。次に、これらのオペコードは仮想マシンによって実行されます。 純粋なASTベースのインタプリタと比較して、これを行う利点はありますか?Luaが中間のオペコードを生成するように設計されているのはなぜですか?
ありがとう。
私はLuaのソースコードを読んでいましたが、驚いたことにはそれがいくつかの奇妙な命令(例えばGETUPVAL、FORLOOPなど)を生成するために実装されていることがわかりました。次に、これらのオペコードは仮想マシンによって実行されます。 純粋なASTベースのインタプリタと比較して、これを行う利点はありますか?Luaが中間のオペコードを生成するように設計されているのはなぜですか?
ありがとう。
バーチャルマシンを使用することは、少なくともUSCD Pascal、BCPL、Smalltalkまでの長い言語の実装手法です。ほとんどのスクリプト言語で仮想マシンが使用されています。あるものは汎用の仮想マシンを使用します。 Luaは、言語のセマンティクスを反映した専用の仮想マシンを使用します。特殊なオペコード。 Luaは、従来のスタックベースのものではなく、レジスタベースの仮想マシンにバージョン5.0で移行することで、この分野での新規性をもたらしました。
バイトコードインタープリタと抽象構文ツリーインタープリタの一般的な比較については、Wikipedia:Interpreterを参照してください。
ルアは誕生以来仮想マシンを使用しており、Lua 5.0(広範囲に使用する最初のレジスタベースの仮想マシン)にレジスタベースの仮想マシンを導入しました。The Evolution of Lua Luaは、そのトピックに関する多くのリソースを提供しています。
のLuaの著者によって書かれた別の紙、The Implementation of Lua 5.0は、実装の詳細の多くを提供し、第7章仮想マシンはあなたに特に役立つだろう、この論文はまた、ルアのソースコードを読み取るための偉大なリファレンスです。
ありがとうたくさん!これらの論文は非常に便利です。 – babel92
非常に役に立ちます。ありがとう:) – babel92