问题标签 [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 将在每一行之后运行,因此如果您创建一个对象并且不保留引用,它将在行尾调用其析构函数。这允许您做许多有趣的事情,其中​​之一是模拟可选参数:

另一个是允许使用方便的构建器语法:

在此示例中,定义和 attr 返回对象,这些对象最终确定了析构函数中的架构和属性定义。

我一直将临时对象称为 ephemeron,但我想知道是否存在此类构造的预先存在的术语。有人在别处见过这个吗?

0 投票
1 回答
5095 浏览

c# - 应条件弱表用于非编译目的?

我最近ConditionalWeakTable<TKey,TValue>在搜索IDictionary使用弱引用的类时遇到了这个类,正如这里这里的答案中所建议的那样。

一篇权威的 MSDN 文章介绍了该类并指出:

您可以在 System.Runtime.CompilerServices 命名空间中找到类 ...。它在 CompilerServices 中,因为它不是通用字典类型:我们打算让它只供编译器编写者使用。

后来又一次:

...条件弱表并非旨在成为通用集合...但是,如果您正在编写自己的 .NET 语言并且需要公开将属性附加到对象的能力,您绝对应该查看 Conditional弱表。

与此一致,该类的 MSDN 条目描述为:

使编译器能够将对象字段动态附加到托管对象。

所以很明显,它最初是为了一个非常特定的目的而创建的——帮助 DLR,而System.Runtime.CompilerServices命名空间体现了这一点。但它似乎发现了比这更广泛的用途——即使在 CLR 中也是如此。例如,如果我在ILSpy中搜索ConditionalWeakTable的引用,我可以看到它在 MEF 类和内部 WPF类等中使用。CatalogExportProviderDataGridHelper

我的问题是在编译器编写和语言工具之外使用ConditionalWeakTable是否可以,以及这样做是否存在任何风险,即在未来的 .NET 版本中会产生额外的开销或实现显着变化。(或者应该避免使用类似这样的自定义实现)。

还有进一步的阅读hereherehere关于ConditionalWeakTable如何利用一个隐藏的CLR实现的ephemerons(通过System.Runtime.Compiler.Services. DependentHandle)来处理键和值之间的循环问题,以及这如何不能以自定义方式轻松完成。