跳过导航
跳过mega-menu

WasmGC以及它如何改变飞镖和Flutter的游戏规则

WasmGC 飞镖 Flutter | Foresight Mobile

快速介绍Wasm

大多数现代浏览器已经支持 WebAssembly (Wasm)功能, 一种相对较新的技术,允许高性能应用程序在web环境中运行. WebAssembly之所以被广泛采用,是因为它支持用底层语言编写代码,比如 C++ 在网络上以接近本地的速度运行.

使用Wasm的常见web应用程序包括各种游戏平台,如 团结,图形密集型应用程序,如 Figma,甚至是一些生产力工具. 这些应用程序受益于Wasm比传统JavaScript更快、更有效地执行任务的能力, 导致更平滑, 在网络上有更灵敏的用户体验.

那么WasmGC是什么呢?

WebAssembly垃圾收集(WasmGC)代表了WebAssembly (Wasm)领域的重大改进。, 特别是对于垃圾收集的编程语言,如 飞镖, 芬兰湾的科特林, PHP, or Java. 这些语言不像那些需要手动内存管理的语言(例如.g., C, C++, 生锈),通常将垃圾收集作为标准功能.

垃圾收集, 在本质上, 是否有一种方法来回收以前由程序分配但不再使用的内存. 这使得开发人员编写软件的过程更加容易和高效,因为他们不再需要手动释放他们使用过的内存.

WasmGC的引入带来了多种好处. 对于开发人员来说,它简化了将高级语言移植到Wasm运行时的过程. 传统上, 移植涉及到将一种语言的主要虚拟机代码重新编译为Wasm, 以及实现特定于Wasm体系结构的即时(JIT)或提前(AOT)编译的后端. 这种方法, 虽然功能, 需要大量的工作来适应Wasm的底层架构.

那么这对网页上的Flutter有什么影响呢?

图片由Kevin Moore提供@ Wasm I/O 2023

当前的游戏状态

飞镖和flutter已经在网络上提供了很好的体验,因为 飞镖编译成JavaScript的原生能力. 您可以在诸如 撕开, 无论你是在网页上还是在本地桌面上,都能提供很好的体验——所有这些都是用飞镖和flutter制作的.

目前,网页上的Flutter应用带有一个WASM版本的Skia渲染器 CanvasKit. 这个高性能渲染器与Chrome浏览器中使用的相同,并允许更多引人入胜的图形功能. 它是硬件加速, 它和Flutter的移动体验使用的渲染器是一样的, 所以这是一个非常一致的堆栈.

然而,实际的Flutter框架和应用程序代码是用垃圾回收的飞镖编写的, 并且需要在当前稳定的Flutter发行版中翻译成Javascript. 这仍然可以很好地工作,浏览器在优化和JIT编译JS部分方面非常出色. 但是,如果没有WasmGC的特性,就不可能将框架和应用程序代码迁移到Wasm,并将整个应用程序作为一个Wasm包发布.

图片由Kevin Moore提供@ Wasm I/O 2023

现在是100%的WebAssembly

然而,WasmGC的出现释放了新的潜力. 想象一下整个Flutter应用, 框架等等, 紧凑的包装和运输作为一个单一的, 统一Wasm包. 这不仅意味着更流畅的性能, 但一个单一的和优化的二进制下载为用户加载应用程序时.

飞镖如何编译成WASM-GC

老实说,这是一个相当技术性的部分, 如果你不太在意细节,你可以跳过这一部分, 但对于像我这样的极客来说,我觉得这很有趣!

1. 普通省道前端

方法执行编译的第一阶段 dart2wasm 工具. 它共享一个通用的前端,dart编译器和静态分析器也使用这个前端. 它提供了解析、类型检查和低级语言特性.

2. 型流分析

该过程的下一个阶段是类型流分析. 这是与dart本机共享的 AOT编译器,并提供ast级优化,如恒定传播和树摇.

3. 表示相

下一个阶段是表示阶段. 这就是飞镖类型被转换成Wasm解释器所认为的类型的地方. 例如, 省道字符串将被转换为asm的字符串表示形式, 复杂类型可以装箱和拆箱,在此阶段执行更多优化.

4. 代码生成

接下来的阶段是代码生成. 这是在浏览器上生成实际Wasm指令的地方. 这类似于本机平台上的机器码, 并且不需要中间表示(IR), 与其他编译器(如LLVM)一样. 这里使用来自前一个类型流分析步骤的信息执行更多的优化.

5. Binaryen

最后,该流程利用Wasm生态系统中其他部分共有的另一个组件 Binaryen. 这是一个独立的wasm -to- asm优化器, 也被芬兰湾的科特林等语言用作它们自己的WasmGC堆栈的一部分.

以上大多数阶段实际上是共享组件,只有 表示代码生成 组件需要更新以支持飞镖GC. 它们本身也是用飞镖编写的,并且是开源的, 所以如果你愿意的话,你可以自己在GitHub上看到飞镖语言的功能.

那么,这对我现有的飞镖应用程序或我的新全屏桌面计划意味着什么呢, Web和移动体验?

有了Skia渲染器,我们已经为当前的应用程序提供了一个出色的高性能解决方案. Foresight Mobile使用这个堆栈开发了几个web和移动应用程序,包括 RyzePlanpoint.

但是很高兴听到明年初我们将在浏览器中本机运行完整的Flutter堆栈, 早期的迹象表明,它的速度和能力将是当前JS堆栈的2到3倍. 这不仅在网页上提供了惊人的游戏般的体验,而且还提高了低规格浏览器和旧设备上的网页性能. 

好奇发现更多?

正如你在上面看到的, Flutter开发栈提供了一些巨大的成本节约, 高性能, 跨平台功能将改变新产品在移动领域的发展方向, Web或桌面. 所有这些都不会影响质量或可维护性.

很想看看我们能如何改造你的项目? 请 保持联系 友好地讨论您的需求,并讨论我们可以提供的好处和成本节约.

十大正规博彩网站评级

在这里注册