Dart汇总请点击这里
vm:entry-point 语用
注释@pragma("vm:entry-point", ...) 必须放在类或成员上,以表明它可以在 AOT 模式下直接从本机或 VM 代码解析、分配或调用。
背景
Dart VM 预编译器(AOT 编译器)执行整个程序优化,例如摇树和类型流分析 (TFA),以减少生成的编译应用程序的大小并提高其性能。这种优化假设编译器可以看到整个 Dart 程序,并且能够发现和分析所有可能在运行时执行的 Dart 函数和成员。虽然 Dart 代码完全可用于预编译器,但嵌入器的本机代码和本机方法是编译器无法访问的。这样的原生代码可以通过原生 Dart API 回调到 Dart。
为了引导预编译器,程序员必须明确列出入口点(roots)——从本机代码访问的 Dart 类和成员。请注意,列出入口点不是可选的:只要程序定义了调用 Dart 的本地方法,入口点是编译正确性所必需的。
此外,当启用混淆时,预编译器需要知道需要保留哪些符号以确保可以从本机代码中解析它们。
Syntax
注释的允许用途如下。
Classes
以下任何一种形式都可以附加到一个类中:
@pragma("vm:entry-point")
@pragma("vm:entry-point", true/false)
@pragma("vm:entry-point", !const bool.formEnvironment("dart.vm.product"))
class C { ... }
如果缺少第二个参数,null或者true,该类将可直接从本机或 VM 代码分配。
@pragma("vm:entry-point")可能会添加到抽象类中——在这种情况下,它们的名称会

本文详细介绍了Dart的`vm:entry-point`注解,用于指示AOT预编译器处理从本机代码直接访问的类、方法和字段。该注解对于确保预编译时的正确性和混淆后的符号保留至关重要。内容涵盖了语法、应用场景,以及如何在类、方法和字段上使用该注解。
最低0.47元/天 解锁文章
3873

被折叠的 条评论
为什么被折叠?



