飞镖3.4今天出来了!此版本在Flutter 3.22 / Dart 3.4 / IO24帖子中展示了Dart和Flutter的共同努力,因此请务必在那里获得完整的独家新闻。这篇文章介绍了我们对WebAssembly的支持,然后详细介绍了今年Dart语言的主要路线图项目之一:macros。
今天,我们很高兴地宣布,最新的Flutter 3.22稳定版本可以为Flutter Web应用程序提供对WebAssembly(Wasm)的全面支持!
这是Dart & Flutter的多年投资。如果您一直在关注这些发展,那么您已经看到了我们的渐进式发展:
我们将继续投资WebAssembly。我们的下一步工作将在纯Dart应用程序中全面支持Wasm,并完成一些缺失的功能(例如延迟加载)。Dart中Wasm编译的端到端工具仍在开发中,但您现在可以尝试稳定的预览,并采取一些临时步骤。稍后,我们还希望在JS环境之外支持Dart中的Wasm,例如标准的Wasm运行时,如wasmtime和wasmer。
我们投入了多年来设计Dart宏系统。为了改善Dart的开发体验,宏提供了一个元编程解决方案,如代码生成。该解决方案内置在Dart语言中,为开发人员提供最大的性能、效率和生产力。现在,我们准备提供这种体验的预览!
Dart开发人员长期以来的一个痛点是序列化和反序列化JSON数据的琐碎但乏味的模式。制作一个可重用、足够强大的解决方案是Dart的一个挑战,因为出于性能原因,它不支持运行时反射。作为替代方案,我们依靠像JsonSerializable代码生成解决方案。这些依赖于在代码本身之前运行的外部工具,使开发人员的体验复杂化。
今天,我们宣布JSON序列化和反序列化的激进新方法的预览:JsonCodable宏。
宏是一种代码,通过在编译时内省其他代码来生成更多代码。例如,这里有一个应用了新的JsonCodable宏的Dart级车辆:
@JsonCodable()类车辆{ 最终字符串描述; 最终的int车轮;车辆(this.description,this.wheels);}void main() { final jsonString = Vehicle('bicycle', 2).toJson(); print('车辆序列化: $jsonString');}
那么,它是如何工作的呢?toJson()方法(和companifromJsonfromJson()构造函数)从何而来?这是我们新宏系统的实验实现,旨在简化开发人员的体验。当Dart编译器看到@JsonCodable()注释时,它会立即实时找到JsonCodable宏的定义并开始执行它。这导致宏:
所有这些都毫不拖延地发生了。集成体验支持我们现有的开发人员工作流程,例如热重新加载,正如本截屏视频所示:
显示使用宏体验的截屏视频:最初不存在toJson代码完成,但在将@JsonCodable添加到类中后,toJson代码完成会立即显示。
最终目标是使社区能够创建自己的宏。这提高了Dart编程的抽象水平。以数据类为例,投票率最高的Dart语言功能。我们考虑在Dart中添加对数据类的内置支持,但了解到,对于这种结构应该支持什么来建立标准,意见差异很大。字段应该是immutable吗?它应该支持平等吗?hashCode呢?也许也是toString?我们的结论是,支持宏观系统将是更好的方法。社区可以创建自己的抽象,允许更可扩展的实验和多样性。
设计和实施这样一个强大的宏观系统是一项艰巨的任务。我们决心以不会对核心Dart开发人员用例产生不利性能影响的方式进行,例如代码协助和完成、代码分析和热重新加载。考虑到这一点,我们正在采取一种分阶段的方法:
还有很多工作要做才能完成这些阶段。与此同时,您可以阅读文档以了解有关Dart宏系统的更多信息,并立即尝试JsonCodable宏的预览。
一如既往,此版本包含提供Dart最佳版本的所有持续发展。在这个版本中,我们进行了以下改进: