質問
この答え
これらすべてのプログラミング言語はstackless
- Stackless Python
- PyPy
- Lisp
- スキーム
- Tcl
- Lua
- Parrot VM
れるものを教えてくださいねるとはどういうことを意味するstackless?ることがどういうことなのかを使用呼び出しスタック?決めなければならない使用呼び出しスタックに対してどのようなものを使用しますか?
解決
れるものを教えてくださいねるとはどういうことを意味するstackless?ることがどういうことなのかを使用呼び出しスタック?
ありそうです。
決めなければならない使用呼び出しスタックに対してどのようなものを使用しますか?
正確に実装はもちろん、異なる言語の言語です。にStackless Pythonがディスパッチャを開始するにはPythonインタプリタを最上位フレームおよびその調査結果を集計したものです通訳のプロセスopcodes必要に応じて同時に達するまで CALL_FUNCTION
opcodeの信号まで約する機能です。これにより、ディスパッチャを新しいフレームに関連する情報のディスパッチャにほっこります。さらにディスパッチャに始まり改めて指摘の通訳者の最上位フレーム。
Stackless言語eschewコールスタックの要因により、多くの場合で使用されるようにプログラムを構築しますになります。の標準は continuations.Continuationsは非常に強力で、非常に単純な制御構造を表現できる他、通常の管理体制のしょにいたるまで(while
, do
, if
, switch
, 宅から).
この干の混乱をもたらすでしょうが、まされている方も多いと思い包頭のWikipedia記事については、特にcutesy 継続をサンドイッチ類推:
うん、キッチンの前には冷蔵庫、考えて荷しました。ご利用の継続が貼り付けおけます。その一部のコン、冷蔵庫、自分をサンドイッチ、座机に置ける簡単操作の串刺機。きの呼び出しは引き続きポケットには、まだまだ立ちの前には冷蔵庫、考えて荷しました。だが幸いにあり、サンドイッチのカウンターでは、すべての材料を使用してください。そのまま食べます。
他のヒント
な利用を呼び出しスタックです 続き-パスタイル.だ知らないテールコの最適化、それからず何なのかを理解す。
をエミュレートする従来のコ/returnこのモデルではなく、押し戻りアドレスとを期待し、残りのフレームが未使用設定しており、呼び出し側が閉じ、残りのコードは、他の変数が必要なのは解放された).もしテール通話の相手先、この引数に使います。場合の相手先"を返します"とだけでなく、この継続、戻り値は、引数としています。
どのもので、単に複雑ない機能ます。しかし、generalizesはとてもよく、より複雑なシナリオ:
- exception/た/などのブロックも簡単にモデル化-回すことができる場合には、その一つに"戻る"継続引数としてとすることができます2(以上)です。lisp-y"の状態でハンドラ"ブロック(わせへの復帰制御に入ると呼び出しも簡単にパス継続のために残り、この機能がない呼び出しを行います。
- 複数の戻り値は、同じくパスの複数の引数に続など。
- 戻りtemporaries/コピーなの異なる超関数の引数を生み出していきます。この多くをtemporaries.
- 尾再帰最適化は自明であるが-は、呼び出し側での経過の"戻る"を継続での受取よりも撮影できます。