Dart元编程功能

时间:2014-05-20 11:50:51

标签: dart dart-mirrors

dart中是否存在c#Reflection.Emit命名空间的等价物?

Reflection.Emit有许多类,用于在运行时构建类型并添加属性,在运行时混淆其getter和setter以及构建方法和事件处理程序,这在元编程方面非常强大。

我的想法是在运行时生成我的数据模型并在地图中缓存它们,这样我就可以在运行时创建实例,并在需要时添加新的方法和属性,而不是在生成后不必经常使用镜像在编写ORM和更多动态应用程序时,这可能非常有用,您只需使用一次反射而不是每次需要修改实例时都使用它

我的问题是:

  • 未来的飞镖版本会有这样的东西吗?他们提到 关于Mirror Builder的事情,但我不确定是否也这样做 事情,有人可以确认这是什么镜像生成器 大约?
  • 另一个问题是,如果我能够生成我的数据类型 服务器作为字符串,有没有办法在发送之前编译它们 他们到客户端并将它们映射到Map中并使用此Map创建实例?

1 个答案:

答案 0 :(得分:3)

我已经看到讨论,这应该在某个时候得到支持,但据我所知,在不久的将来不会开始工作。

类似的要求通常通过变换器在构建时生成代码(Polymer,Angular,others)来解决,变换器分析代码并生成反射属性访问的代码或HTML中的代码片段。

Smoke是一个旨在简化此操作的软件包。

代码生成的优势在于客户端需要下载的代码量要小得多。 当您在运行时进行代码生成时,您需要一个编译器,这是需要下载到浏览器中的大量代码。

try.dartlang.org采取了这样的方法。来源可在此处https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/site/try/获取。 它包括dart2js(内置于JavaScript)并运行背景隔离,将Dart代码编译为JS。