2013-04-25 6 views
6

私はちょうどLuaでちょっと遊んで、Koneki Eclipseプラグインを試しました。これはかなりいいです。問題は、私が現時点でデバッグしている関数を変更すると、変更を保存するときに変更が有効にならないということです。だから私は強制的にアプリケーションを再起動します。デバッガを変更することができればすばらしいだろうし、スモールトークなどのようにオンザフライで有効になるか、あるいはJavaのホットコードの置き換えのように拡張されるだろう。これが可能かどうか誰かが手掛かりを持っていますか?Luaの "デバッガで"コードを書く方法は?

答えて

5

いくつかの制限がありますが、ある程度可能です。私はこの機能を提供するIDE/debuggerを開発してきました。実行中のアプリケーションのコンテキスト/環境でコマンドを実行するためのリモートコンソールへのアクセスを提供します。 IDEはlive codingもサポートしています。変更したコードを変更すると、そのコードがリロードされます。デモhereを参照してください。

主な制限は、現在実行中の機能を変更することができないことです(少なくともLua VMを変更することなく)。つまり、現在実行中の機能に対する変更の影響は、その機能を終了して再入力した後にのみ表示されます。同じ関数を繰り返し呼び出す環境(例えば、drawを呼び出すゲームエンジン)ではうまく機能しますが、あなたのケースではうまくいかないかもしれません。

もう一つの課題は、関数の外部で作成され、その内部で参照される値であるupvaluesを扱うことです。現在のupvaluesを "読み込み"、新しい(new)関数が作成されたときに再作成する方法がありますが、現在の値を取得するために関数を再作成し、それらの上位値を持つ新しい環境を作成し、それらに適切な値を割り当てます。私の現在の実装はこれをしません。つまり、回避策としてグローバル変数を使用する必要があります。

ちょうど前日のLuaメーリングリストにrelevant discussionもありました。

+0

洞察力のある回答、Paul。ありがとう。 – OlliP

+0

私は、Smalltalkで動作する理由は、全体のコードが完全にメモリにあるバイナリスナップショット(Smalltalkの "image")であるためだと思います。だから私はSmalltalkがこれを行うことができる唯一の言語だと思う。非常に残念です... – OlliP

関連する問題