それが質問です。スタックレス python が python で行っていることを模倣しようとする他の言語のプロジェクトはありますか?
3 に答える
Andrew Appel はずっと前にCompiling with Continuationsという本を書き、古いバージョン (110?) の SML/NJ (スタックなしで、ガベージ コレクションの「継続フレーム」を使用) を実装し、論文Garbage Collection Can Be Faster Than Stackを書きました。割り当て(これはすべて前世紀のものです)。
Flanaganなどの継続を伴うコンパイルについて言及している論文がいくつかあります。
Scheme には継続関連のプリミティブcall/ccがあります。
また、Quinnec のLisp In Small Piecesや、J.Pitrat の著書『Artificial Beings (意識のある機械の良心) 』の 1 章も含まれています。
そしてGo Routinesなど..
最近の GCC は-fsplit-stackを提供します。これは非常によく似ており (特にGo 言語フロントエンドの GCC への実装に役立ちます)、GCC によってコンパイルされた多くの言語 (C & C++ を含む) で (注意して) 使用できます。
Chicken Schemeは、スタックで奇妙なトリックを実行しています (特にテール コールとcall/cc
)。
したがって、スタックレス Pythonがこれを最初に考えた (そしてこれらのアイデアを実装した) とは思いません。
コールスタックのウィキページも参照してください。
PS。そしてもちろん、Haskell、Erlang、Oz、...
軽量な並行性を備えたスタックレス コンパイルを意味する場合、Haskell は最初からそれを行っています。Haskell の最初のコンパイル方式である IIRC はG-machineと呼ばれていました。その後、STG-machineに置き換えられました。これは実際には効率的な遅延のために必要ですが、簡単な同時実行と並列処理は追加のボーナスとして提供されます。
この分野で注目すべきもう 1 つの言語は、Erlang とその悪いジョークの模倣言語である Go、Scheme のような継続ベースの言語です。Haskell とは異なり、STG コンパイル スキームを使用しません。
Haskell と Erlang の両方に (標準実装では) マイクロスレッド/グリーン スレッドが含まれており、マルチコア サポート、プリエンプティブ スケジューラ、およびチャネルの類似物があります。私が考えることができるスタックレスの唯一のかなりユニークな機能は、スレッドのシリアル化ですが、関数の状態をシリアル化する方法を提供することで、それを偽造できる場合があります。