Dart 3.4 发布:Wasm Native Macros(宏)

news2024/12/26 11:14:41

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.coloradmin.cn/o/1677059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运维别卷系列 - 云原生监控平台 之 06.prometheus pushgateway 实践

文章目录 [toc]Pushgateway 简介Pushgateway 部署创建 svc创建 deployment Pushgateway 测试删除 Pushgateway 上对应 lable 的数据 Pushgateway 简介 WHEN TO USE THE PUSHGATEWAY Pushgateway 是一种中介服务,允许您从无法抓取的作业中推送指标。 The Pushgateway…

深入理解 npm、cnpm、npx、yarn 和 pnpm:JavaScript 包管理器的对比

在 JavaScript 的世界中,包管理器是一个重要的工具,它帮助我们管理、安装和升级项目的依赖。在这篇文章中,我们将深入探讨三个最流行的 JavaScript 包管理器:npm、yarn 和 pnpm。 npm(Node Package Manager&#xff0…

未来IT行业的模块化、学习与跨界融合

随着技术的快速发展,IT行业已成为推动全球经济和社会发展的核心动力。从云计算和大数据到人工智能(AI)和物联网,这些创新技术正在彻底改变我们的生活方式和工作模式。而在AI领域,尤其是人工智能生成内容(AI…

怎么识别数学公式?分享简单识别方法

怎么识别数学公式?在学术研究和日常工作中,数学公式无疑是一个常见且重要的元素。然而,手动输入复杂的数学公式往往既耗时又容易出错。幸运的是,随着科技的发展,现在我们有了一些高效的软件工具,可以帮助我…

奥维地图下载高清影像的两种方式!以及ArcGIS、QGIS、GlobalMapper、自编工具下载高清影像的方法推荐!

今天来介绍一下奥维互动地图是如何下载高清影像的,也不是多了不起的功能!有朋友问,加上这个软件确实用的人多。 下载的高清数据在ArcGIS中打开的效果! 开始介绍奥维之前我们也介绍一下我们之前介绍的几个方法,没有优劣…

IP代理网络协议介绍

在IP代理页面上,存在HTTP/HTTPS/Socks5三种协议。它们都是客户端与服务器之间交互的协议。 HTTP HTTP又称之为超文本传输协议,在因特网使用范围广泛。它是一种请求/响应模型,客户端向服务器发送请求,服务器解析请求后对客户端作出…

四信5G全连接工厂一站式解决方案上线,打造可持续发展工业未来

政策背景 2022年9月,为进一步加快“5G工业互联网”新技术新场景新模式向工业生产各领域各环节深度拓展,工信部印发《5G全连接工厂建设指南》,明确提出,推动万家企业开展5G全连接工厂建设,建成1000个分类分级、特色鲜明…

#Docker | Ngrok# 使用Ngrok和Docker进行内网穿透

一、注册 Ngrok官网注册,可以使用gmail或者outlook邮箱, 正常填写后你会收到一封电子邮件,点击邮件中链接即注册成功 二、获取密钥 登录,点击Your Authtoken,最上面copy左边就是你得密钥 三、使用内网穿透启动docker…

C++面向对象程序设计-北京大学-郭炜【课程笔记(九)】

C面向对象程序设计-北京大学-郭炜【课程笔记(九)】 1、输入输出流相关的类1.1、标准输出重定向1.2、标准输入重定向1.3、判断输入流结束1.3.1、强制类型转换符重载 1.4、istream类的成员函数1.4.1、cin.getline()函数 2、流操纵算子控制输出格式2.1、流操…

「51媒体」家居生活发布会,展览展会有哪些媒体邀约资源

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 家居生活类媒体包括多种类型,包括门户网站家居生活消费频道,专业的家居消费生活门户,以及行业媒体,平面媒体,KOL和意见领袖。下…

类人速度超快语音响应!OpenAI推出新旗舰模型GPT-4o,图文音频手机AI搞定

内容概述 虽然没有带来备受期待的人工智能(AI)搜索引擎,但OpenAI在主打产品AI模型上花了更多心思,拓展多模态功能,让用户可以免费玩转文字、图片和语音输入。 美东时间5月13日周一,OpenAI首席技术官Mira …

绝地求生:一穿四教学,绿色玩家也能轻松一穿四

PUBG一穿四速成班开课啦!我这里只做PUBG干货分享,不搬运!不搬运!!不搬运!!! 有很多朋友是否在排位里kd不高,开局不是扎堆roll点就是一直搜东西然后一波就没?这…

《灵摆疗法》PDF完整版阅读

译者序 神奇丶快速又有效的灵摆疗法 2008年当我开始走上自己的灵性道路时就与灵摆结下了不解之缘当时我非常热衷于水晶疗愈所以疯狂地搜集各种不同的矿石学习如何将矿石 和水晶灵摆连结起来做能量疗愈后来在我开设马雅心能量课程时也会教大家如何使用水晶灵摆 …然而这两年来不…

09.Hadoop的安装

Hadoop的安装 1.拖拽安装包上传到/opt/software 2.解压文件到/opt/module [itwisenode2 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/3查看文件 drwxr-xr-x. 2 itwise itwise 4096 9月 12 2019 bin drwxr-xr-x. 3 itwise itwise 4096 9月 12 2019 etc …

企业计算机服务器中了rmallox勒索病毒怎么解密,rmallox勒索病毒解密工具流程

在当今数字化时代,越来越多的企业依赖计算机服务器进行办公开展业务,计算机服务器犹如企业的心脏,能够为企业存储许多重要的核心信息,帮助企业有效的开展各项工作业务,提高企业的生产效果,但网络是一把双刃…

守护长者安全,平安养老险携手福海街道开展防灾减灾活动

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

java项目之企业资产管理系统(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的企业资产管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 管理员功能有个人中心&…

Flutter 3.22 发布,快来看看有什么更新吧?

Flutter 3.22 发布,快来看看有什么更新吧? 本次 Flutter 跟随 Google I/O 发布的版本是 3.22 ,该版本主要还是带来了 Vulkan backend 和 Wasm Native 的落地,另外还有一个重点就是 Dart macros ,但是它更多只是一个预…

Warning logs 2024-05-15

mysql数据库中文模糊查询时出现异常 Error querying database. Cause: java.sql.SQLException: Illegal mix of collations for operation like Select("select f.* from fundDetails f" " where (case when #{keyword} is not null then f.operateTime like c…

AXI GPIO IP核配置详解

AXI GPIO(AXI General-Purpose Input/Output)设计提供了一个通用的输入/输出接口,该接口连接到一个AXI4-Lite接口。AXI GPIO可以被配置为单通道或双通道设备,每个通道的位宽可以独立配置。 端口(即GPIO引脚&#xff0…