2013-07-29 5 views
7

私はLuaのソースコードを読んでいましたが、驚いたことにはそれがいくつかの奇妙な命令(例えばGETUPVAL、FORLOOPなど)を生成するために実装されていることがわかりました。次に、これらのオペコードは仮想マシンによって実行されます。 純粋なASTベースのインタプリタと比較して、これを行う利点はありますか?Luaが中間のオペコードを生成するように設計されているのはなぜですか?

ありがとう。

答えて

9

バーチャルマシンを使用することは、少なくともUSCD Pascal、BCPL、Smalltalkまでの長い言語の実装手法です。ほとんどのスクリプト言語で仮想マシンが使用されています。あるものは汎用の仮想マシンを使用します。 Luaは、言語のセマンティクスを反映した専用の仮想マシンを使用します。特殊なオペコード。 Luaは、従来のスタックベースのものではなく、レジスタベースの仮想マシンにバージョン5.0で移行することで、この分野での新規性をもたらしました。

+0

非常に役に立ちます。ありがとう:) – babel92

10

バイトコードインタープリタと抽象構文ツリーインタープリタの一般的な比較については、Wikipedia:Interpreterを参照してください。

ルアは誕生以来仮想マシンを使用しており、Lua 5.0(広範囲に使用する最初のレジスタベースの仮想マシン)にレジスタベースの仮想マシンを導入しました。The Evolution of Lua Luaは、そのトピックに関する多くのリソースを提供しています。

のLuaの著者によって書かれた別の紙、The Implementation of Lua 5.0は、実装の詳細の多くを提供し、第7章仮想マシンはあなたに特に役立つだろう、この論文はまた、ルアのソースコードを読み取るための偉大なリファレンスです。

+0

ありがとうたくさん!これらの論文は非常に便利です。 – babel92

関連する問題