7
ガベージコレクションされた言語のオブジェクトデストラクターパラダイムがなぜ普及しないのですか?
ガベージコレクションされた言語設計に関する決定についての洞察を探しています。おそらく、言語の専門家が私を啓発できるでしょうか?私はC ++のバックグラウンドを持っているので、この領域は私を困惑させます。 Ruby、Javascript / ES6 / ES7、Actionscript、LuaなどのOOPyオブジェクトをサポートするほとんどすべてのガベージコレクション言語は、デストラクタ/ファイナライズパラダイムを完全に省略しているようです。Pythonは、そのclass __del__()メソッドを持つ唯一のものであるようです。どうしてこれなの?オブジェクトのデストラクタ/ファイナライズメソッドの効果的な実装を妨げる自動ガベージコレクションを使用する言語には、機能的/理論的な制限がありますか? これらの言語がメモリを管理する価値のある唯一のリソースと見なしていることは非常に欠けていると思います。ソケット、ファイルハンドル、アプリケーションの状態はどうですか?オブジェクトファイナライズの非メモリリソースと状態をクリーンアップするカスタムロジックを実装する機能がない場合、アプリケーションにカスタムmyObject.destroy()スタイルの呼び出しを散らかし、クリーンアップロジックを「クラス」の外に配置し、カプセル化を中断し、 gcによって自動的に処理されるのではなく、人的エラーによるリソースリークへのアプリケーション。 これらの言語がオブジェクト破棄のカスタムロジックを実行する方法を持たないことにつながる言語設計の決定は何ですか?正当な理由があると想像しなければなりません。これらの言語がオブジェクトの破壊/最終化をサポートしなくなった技術的および理論的な決定をよりよく理解したいと思います。 更新: おそらく私の質問を表現するより良い方法: なぜ言語には、カスタムインスタンス化(コンストラクター)とともにクラスまたはクラスに似た構造を持つオブジェクトインスタンスの組み込みコンセプトがありますが、完全に破棄/ファイナライズ機能を省略しますか?自動ガベージコレクションを提供する言語は、オブジェクトが使用されなくなったときに100%の確実性でわかるように、オブジェクトの破壊/最終化をサポートする主要な候補のようです。しかし、これらの言語のほとんどはサポートしていません。 私は、デストラクタが呼び出されることは決してないだろうとは思わない。それは、gcsが回避するように設計されているコアメモリリークだからだ。デストラクタ/ファイナライザは、将来の不確定な時間まで呼び出されないかもしれないが、JavaまたはPythonが機能をサポートするのを止めなかったという議論を見ることができました。 オブジェクトのファイナライズをサポートしない理由は、言語設計の中核となる理由は何ですか?