問題タブ [ephemeron]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
248 参照

design-patterns - デザインパターンの名前を探す

VBScriptは、GCがすべての行の後に実行されることを保証します。したがって、オブジェクトを作成し、参照を保持しない場合、そのデストラクタは行の最後で呼び出されます。これにより、いくつかの興味深いことを実行できます。そのうちの1つは、オプションの引数をシミュレートすることです。

もう1つは、便利なビルダー構文を使用できるようにすることです。

この例では、デストラクタのスキーマと属性の定義を確定するオブジェクトをdefineとattrで返します。

私は一時オブジェクトをエフェメロンと呼んでいますが、そのような構造には既存の用語があるのではないかと思いました。他の場所でこれを見た人はいますか?

0 投票する
1 に答える
5095 参照

c# - ConditionalWeakTableである必要がありますコンパイラ以外の目的で使用されますか?

ここここの回答で示唆されているように、最近、弱い参照を使用ConditionalWeakTable<TKey,TValue>するクラスを検索しているときにこのクラスに出くわしました。IDictionary

クラスを紹介し、次のように述べている決定的なMSDNの記事があります。

クラス...は、System.Runtime.CompilerServices名前空間にあります。汎用ディクショナリタイプではないため、CompilerServicesにあります。コンパイラの作成者のみが使用することを目的としています。

そして後で再び:

...条件付きウィークテーブルは、汎用コレクションを意図したものではありません...ただし、独自の.NET言語を作成していて、プロパティをオブジェクトにアタッチする機能を公開する必要がある場合は、必ず条件付きを調べる必要があります。弱いテーブル。

これに沿って、クラスのMSDNエントリの説明は次のようになります。

コンパイラーがオブジェクトフィールドを管理対象オブジェクトに動的にアタッチできるようにします。

したがって、明らかにそれは元々非常に特定の目的のために作成されました-DLRを支援するためであり、System.Runtime.CompilerServices名前空間はこれを具体化します。しかし、CLR内でさえ、それよりもはるかに幅広い用途が見つかったようです。たとえば、ILSpyでConditionalWeakTableの参照を検索すると、MEFクラスや内部WPFクラスなどで使用されていることがわかります。CatalogExportProviderDataGridHelper

私の質問は、コンパイラの記述および言語ツールの外部でConditionalWeakTableを使用しても問題がないかどうか、および追加のオーバーヘッドが発生したり、将来の.NETバージョンで実装が大幅に変更されたりするリスクがあるかどうかです。(または、回避して、代わりにこのようなカスタム実装を使用する必要があります)。

また、 ConditionalWeakTableが(を介して)エフェメロンの非表示のCLR実装を使用して、キーと値の間のサイクルの問題を処理する方法、およびこれをカスタム方法で簡単に実行できない方法について、ここここ、およびここでさらに読んでください。System.Runtime.Compiler.Services. DependentHandle