10

このページは私にとって非常に混乱しています。

それは言う:

newLISPのメモリ管理は、ガベージコレクションアルゴリズムに依存していません。メモリはマークされておらず、参照カウントもされていません。代わりに、新しく作成されたメモリオブジェクトを削除するかどうかの決定は、メモリオブジェクトが作成された直後に行われます。

newLISPは、1つの参照のみ(ORO)のルールに従います。シンボルによって参照されていないすべてのメモリオブジェクトは、式の評価中にnewLISPがより高い評価レベルに達すると、廃止されます。newLISP内のオブジェクト(シンボルとコンテキストを除く)は、値のコピーによって他のユーザー定義関数に渡されます。その結果、各newLISPオブジェクトは1つの参照のみを必要とします。

さらに下に、私は見る:

すべてのリスト、配列、および文字列は、参照によって組み込み関数に出入りします。

私はこれらの2つを理解することはできません。

newLISPが「ガベージコレクションアルゴリズムに依存しない」のに、参照によって物事を渡すにはどうすればよいでしょうか。
たとえば、循環参照の場合はどうなりますか?!

LISPがパフォーマンスを低下させずにガベージコレクションを使用しないことさえ可能ですか?(常に値で渡すことができるか、必要と思われるときはいつでもフルヒープスキャンを実行できると思いますが、そうすると、パフォーマンスがめちゃくちゃ損なわれるように思えます。)
もしそうなら、どのようになりますか?循環参照を扱いますか?そうでない場合、それらはどういう意味ですか?

4

1 に答える 1

12

おそらく、http ://www.newlisp.org/ExpressionEvaluation.htmlを読むと、 http://www.newlisp.org/MemoryManagement.htmlの論文をよりよく理解するのに役立ちます。循環参照について:newLISPには存在しないため、作成する方法はありません。パフォーマンスの問題は、そのメモリ管理ペーパーのサブチャプターとここで扱われます:http://www.newlisp.org/benchmarks/

newLISPを使用して実験している可能性があります。つまり、循環参照を作成しようとすると、ほとんどの質問が解決されます。

于 2012-06-25T16:05:04.300 に答える