【问题标题】:Generating classes at runtime / compile time with Dart使用 Dart 在运行时/编译时生成类
【发布时间】:2016-04-03 21:05:32
【问题描述】:

关于使用 Dart 生成代码的几个问题:

  1. dart 能否在运行时使用 Dart 为在 Dart VM 上运行的代码生成一个类?
  2. 在编译/预运行时是否有任何与 Java 注释处理等效的代码生成?

【问题讨论】:

    标签: dart


    【解决方案1】:

    1) Dart VM 和 dart2js 不支持在运行时生成代码。
    一种解决方法是为文件生成代码并将其加载到新的隔离中(也可以是数据 URI)。应用程序只能通过消息传递与在另一个隔离中运行的生成代码进行通信。

    2) 这就是transformers 的用途,但转换器仅适用于 dart2js(或在开发时发布服务),而不适用于在服务器端 Dart VM 上运行的代码。

    https://github.com/dart-lang/build(目前仅在开发者预览版中)可用于浏览器和服务器端代码的代码生成。它是一个监视源文件并在源文件更改时更新生成的代码的工具。

    【讨论】:

    • 我明白了。我想到了第一种方法。您对隔离和消息通信的开销有任何见解吗?我找不到太多关于最新的隔离性能的信息
    • 我认为它比在同一个隔离区中传递值要慢得多,但它仍然只是在内存中,因此比网络请求快得多。您需要为您的特定用例做一些基准测试以获得正确的结果。我认为这也很大程度上取决于您发送的值类型(原始值、映射或列表,或自定义类实例或自定义类实例的树。
    【解决方案2】:

    我现在发现 dart 团队有一个用于生成源的库。生成源代码预编译时间似乎很有用:https://pub.dartlang.org/packages/source_gen

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多