Dart 3.4 发布:Wasm Native Macros(宏)

Google I/O 的结束,除了 Flutter 3.22 的发布 ,Dart 3.4 也迎来了它是「史诗级」的更新,之所以这么说,就是因为 Wasm Native 的落地和 Macros 的实验性展示。

在此之前,其实我也提前整理过一些对应的内容,例如:

  • Flutter 即将放弃 Html renderer ,你是否支持这个提议?
  • Flutter Web 的未来,Wasm Native 即将到来
  • 2024 Flutter 重大更新,Dart 宏(Macros)编程开始支持,JSON 序列化有救

虽然之前的内容都是基于 Flutter 的话题下去展开,但是其实根本上它更多是来自 Dart 的支持,而现在它们终于和我们见面了。

WebAssembly 更新

从 Flutter 3.22 开始, Flutter Web 终于可以实现 Wasm Native 的支持,这得益于 Dart 团队一直在努力推进的 WasmGC ,现在 Dart 终于正式支持编译为 Native 支持 Wasm 运行。

这里面主要涉及 WasmGC 的落地,全新的 Dart 编译器生成 WasmGC 代码,以及 Dart 3.3 里发布的新一代的 JavaScript Interop 的支持。

下一步 Dart 团队将尝试在「纯 Dart 应用」层面全面支持 Wasm ,并完全一些目前趣事的能力,例如延迟加载 等等。

当然,作为第一版的 WebAssembly 支持,目前还存在一些限制,例如:

  1. 需要支持 WasmGC 的浏览器,Chromium 和 V8 在 Chromium 119 中发布了对 WasmGC 的 stable 支持, Firefox 在 Firefox 120 中支持 WasmGC (还有点问题),另外 Safari 尚不支持 WasmGC 。
  2. 编译后的 Wasm 输出当前只支持 JavaScript 环境(例如浏览器),不支持在标准 Wasm 运行时环境(如 wasmtime 和 wasmer)中执行,详细问题可见 #53884
  3. 编译为 Wasm 时仅支持新版本的 JavaScript Interop

总的来说,这个落地只是一个开始,它对于 Flutter Web 来说是对自己核心路线承诺的落地:“ Flutter Web 是围绕 CanvasKit 和 WebAssembly 等新兴 Web 技术进行架构设计的框架。”

Dart Macros(宏)

Dart 开发者其实长期以来的一个痛点就是:序列化和反序列化 JSON ,其实大家都知道 build_runner 有多讨厌,以至于很多开发者更愿意用插件生成一个 Dart 文件而不是用 JsonSerializable

今天,Dart 带来了一种基于 Macros 的 JSON 序列化和反序列化预览支持:JsonCodable ,它可以通过在编译时内省其他代码来生成代码支持,例如:

()
class Vehicle {final String description;final int wheels;Vehicle(this.description, this.wheels);
}
void main() {final jsonString = Vehicle('bicycle', 2).toJson();print('Vehicle serialized: $jsonString');
}

那么它是怎样工作的? toJson()/ fromJson() 是从哪里来的?这就是 Dart Macros 的支持,当 Dart 编译器看到 @JsonCodable() 注释时,它会立即实时定位到 JsonCodable 宏的定义并开始执行它:

  • 创建一个新的 “augmentation class”,这是一种新的语言构造,可以向现有类添加新声明,augmentation 可以分散在多个位置,无论是在单个文件内还是跨多个文件,都可以添加新的顶级声明,将新成员注入到类中,并将函数和变量包装在附加代码中。

  • “阅读”开发人员对该Vehicle类的定义,以确定它有两个字段,descriptionwheels

  • toJson 向 augmentation class 添加新的方法签名

  • 填写方法主体 toJson 以处理 descriptionwheels 字段的序列化

JsonCodable 集成支持现有的开发人员工作流程,例如热重载:

对于宏支持,Dart 团队也考虑未来在 Dart 中添加对数据类的内置支持,这是一项长久的任务,目前正在按照阶段的落地:

  • 在今天的版本中提供了单个宏的预览,JsonCodable 可以让开发者开始体验和熟悉 Dart 宏。
  • 如果进展顺利,后续将推进 JSON 宏变得稳定。
  • 最终目标将是让 Dart 开发者社区能够自定义自己的宏。

JsonCodable 宏目前还不稳定,处于实验性阶段,仅适用于 Dart 3.5.0-152或更高版本,更多可见:https://dart.dev/go/json-codable

其他改进

Dart 3.4 还包含了其他一些改进,例如:

  • 解决了超过 50% 的分析器代码完成错误。
  • 改进了条件表达式、if-null 表达式和 switch 表达式的类型分析与语言规范 :https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md#language-1
  • 从 dart:cli 库中删除了不完整和不一致的工具。
  • 解决了一些不足以改进 dart:js_interop

参考原文:https://medium.com/dartlang/dart-3-4-bd8d23b4462a

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/702023.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平安养老险深圳分公司携手福海街道开展5.12防灾减灾活动

在构建和谐社会、倡导人文关怀的当下,平安养老险深圳分公司以高度的社会责任感和深厚的人文情怀,持续关注老年人的健康与安全。在今年“5.12防灾减灾日”来临之际,公司积极响应倡议,于5月10日携手福海街道举办了一场别开生面的消防…

校园电话机对于校园信息化管理非常重要

任何一部校园电话机都有信息办理渠道,并且发挥着重要的效果,能够满意整个机器的更快速运作。然后使学生能够取得一个更好的运用条件,学生在运用产品的过程中,要经过正确的操作环节才能够发挥产品的优胜功能,然后到达一…

[Algorithm][回溯][组合][目标和][组合总和]详细讲解

目录 1.组合1.题目链接2.算法原理详解3.代码实现 2.目标和1.题目链接2.算法原理详解3.代码实现 3.组合总和1.题目链接2.算法原理详解3.代码实现 1.组合 1.题目链接 组合 2.算法原理详解 思路:每次都只选一个数,此后只能选它后面的数函数设计&#xff…

金万维动态域名小助手怎么用?

金万维动态域名小助手是一个域名检测工具,使用此工具可以进行检测域名解析是否正确、清除DNS缓存、修改DNS服务器地址及寻找在线客服(仅支持付费用户)等操作。对不懂网络的用户是一个很好的检测域名的工具,下面我就讲解一下金万维…

【class8】人工智能初步(图像识别-----卷积神经网络)

上节回顾 上节课,我们简单了解了图像识别和深度学习的相关知识。 快速回顾一下吧~ A图像识别是以图像的主要特征为基础的。B. 图像分辨率决定图像的质量。 C. 像素是图像中的最小单位D. 在图像识别的原理上,计算机和人类在本质…

VNA校准补充知识点

双端口校准中,SLOT已知直通校准;SLOR未知直通校准;后者精度更高 其余校准方式补充 1.增强型频响校准(比SOLT简单),适用于器件的单向测量(S11,S21) 2.SOLR(未知直通校准&…

Java聚合项目打包运行笔记

聚合项目创建 略 聚合项目打包配置 父工程 pom文件添加 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>…

一本书打通SLAM在智能汽车/自动驾驶领域应用

自动驾驶技术已成为当今数字化时代汽车行业的热点话题之一。随着技术的不断成熟&#xff0c;越来越多的车辆采用激光SLAM&#xff08;即时定位与地图构建&#xff09;和视觉SLAM技术&#xff0c;实现更高层次的智能网联汽车。SLAM技术在智能网联汽车中的应用是非常重要的&#…

深入解析Linux逻辑卷管理器(LVM)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Linux的起源与发展 2、什么是逻辑卷管理器&…

Kubernetes学习-深入Pod篇(二) 探针技术详解与应用

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Kubernetes渐进式学习-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 探针是什么 3. 探针的分类 3.1. StartupProbe(启动…

Spring WebFlux 初探-响应式编程-021

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Nex…

连接虚拟机的 redis

用Windows 的 Redis Insight 连接虚拟机的 安装redis发现连不上 我的redis是新安装&#xff0c;没有用户名密码&#xff0c;发现是ip问题 127 开头的被我注释了&#xff0c;换成了ifconfig查到的ip