写点什么

Flutter 教程 (二) 了解 Dart 语言

用户头像
Android架构
关注
发布于: 15 小时前

此外,我们有机会与 Dart 社区密切合作,Dart 社区正在积极投入资源改进 Dart 在 Flutter 中的使用。例如,当我们采用 Dart 时,该语言没有提供生成原生二进制文件的工具链(这对于实现可预测的高性能是很有帮助的),但是现在实现了,因为 Dart 团队为 Flutter 构建了它。同样,Dart VM 之前已经针对吞吐量进行了优化,但团队现在正在优化 VM 的延迟时间,这对于 Flutter 的工作负载更为重要。

Dart 在以下主要标准上得到高分:

  • 开发人员的效率。Flutter 的主要价值主张之一是通过让开发人员使用相同的代码库为 iOS 和 Android 创建应用程序,从而节省了工程资源。使用高效的语言可以进一步加速开发周期,并使 Flutter 更具吸引力。这对我们的 framework 团队和开发人员都非常重要。大部分 Flutter 功能都是用 Dart 实现,因此我们需要在 10 万行代码时能保持高效的而不会牺牲 framework 和 widget 的可读性。

  • 面向对象。虽然我们可以使用非面向对象的语言,但这意味着要重新解决几个难题。另外,绝大多数开发人员都具有面向对象开发的经验,因此更容易学习如何使用 Flutter 进行开发。

  • 可预测,高性能。借助 Flutter,我们希望使开发人员能够快速创建流畅的用户体验。为了实现这一点,我们需要能够在每个动画帧中运行大量的代码。这意味着我们需要一种既能提供高性能又能提供可预测性能的语言,而不会出现会导致丢帧的周期性暂停。

  • 快速内存分配。Flutter 框架使用函数式流,它很大程度上依赖于底层的内存分配器,从而有效地处理小的、短期的内存分配会非常重要,所以在缺乏此功能的语言中 Flutter 无法有效地工作。


综上所述,主要的信息就是 Dart 在 flutter 中没有 VM,可以直接通过 AOT 编译器编译成本地代码,并且内存管理比较适合 Flutter. 上面是官方说法,下面说些个人看法:从笔者对 Dart 的使用来看,Dart 的设计目标应该是既对标 Java,也对标 Javascript。

Dart vs Java

先看看 Dart 和 Java,客观的来讲,Dart 语法层面确实比 Java 更有表现力,在 VM 层面,Dart VM 在内存回收和吞吐量都进行了优化,但具体的性能对比,笔者没有找到相关测试数据,但是在我看来只要 Dart 语言能流行,vm 的性能就不用担心,毕竟 Google 在 go(没用 vm 但有 GC)、javascript(v8)、dalvik(android 上的 java vm)上已经有了很多积累,值得注意的是 Dart 在 flutter 中已经可以将 gc 做到 10ms 以内,所以 Dart 和 Java 相比,决胜因素并不会是在性能方面,而语法层面,Dart 要比 java 更有表现力,最重要的是 Dart 对函数式编程支持要远强于 java(目前只停留在 lamda 表达式),而 Dart 不足的是生态,这会在下文讨论。

Dart vs JavaScript

JavaScript 的弱类型一直被抓短,所以 typeScript、coffeescript 甚至是 facebook 的 flow(虽然不是 javascript 的一个超集,但也通过标注和打包工具提供了静态类型检查)才有市场。其实在笔者看来,目前最强大的动态化最好的脚本语言就是 javascript,支持动态扩展属性、创建函数等,用起来超爽。但是你可能听过另一个声音,javascript 的强大的动态化是把双刃剑,毕竟有些人总是对自己写的代码不放心,他们期望有一套静态类型检查系统来帮助自己减少错误,而 Dart 就有静态类型检查(Dart2.0 后加入了动态类型检查,这在最新版的 flutter 中已经启用了),并且可以通过 dart2js 将 dart 代码转成 js 代码,在这个层面来说,Dart 和 typeScript、coffeescript 是差不多的,所以单独来看,dart 并不比 typeScript、coffeescript 有什么明显优势,但综合起来看,dart 既能进行服务端脚本、APP 开发、web 开发,这就有优势了。

Flutter 中的 Dart

Flutter 能够运行大多数不会直接或间接导入 dart:mirrors 或 dart:html 的 dart 代码。Flutter 中 dart 代码会通过 AOT 编译器编译成本地代码,没有 vm,并且 dart 团队专门针对 flutter 进行了优化。

Dart 生态

一个语言的成败,重要的一点还是在于生态。而生态的好坏,有两个主要指标:第三方库的数量和开发者数量。


Dart 目前第三方库还是较少,并且有质量不高,即使是 Dart SDK,里面也有很多 bug,dart-sdk github 现在打开的 issue 一直维持在 5000 左右,在最近 10 天内,我提过一个 P0 bug 和多个 features,由此可见 Dart 目前还是不怎么完善。 但值得庆幸的是,目前 Dart 更新迭代快了很多,这是受 flutter 和 Fuchsia 的带动。


至于开发者,目前大多数 dart 使用者是 flutter 用户,用 dart 写服务端脚本的应该非常少,毕竟现在在 dart 社区没有一个比较著名或经过时间验证的 web server 框架。从 stackoverflow 上 dart 相关的问题来看,用 dart 开发 js 的开发者也有一些,但大概估计不会超过 dart 开发者的 20%。

Flutter 中文社区贡献

Flutter中文网发起了一个开源项目计划,旨在开发一系列 Flutter SDK 之外常用(实用)的 Package、插件,以丰富 Flutter 第三方库,为 Flutter 生态贡献来自中国开发者的


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


力量, 目前社区已有几个开源项目开始公测,详情请查看:?Flutter中文网开源项目 (ps:目前Flutter中文网开源项目组正在寻找有实力、有梦想、热衷于分享的开发者加入,如果你有兴趣,点进去,获取联系方式)。

Dart 未来

虽然 Dart 生态目前还不完善,但可喜的是增速很快,pub 上的每天都有 5 个以上的新包发布,这个数量你也许不以为然,但事实上 java 中最常用的包也就 200 个左右。虽然 Dart 语言本身自有亮点,但是在其对标的领域,目前都有成熟的并且不赖的解决方案,所以我觉得 Dart 是否成功目前来看还是主要看 flutter 和 Fuchsia 是否能成功。Flutter 在没有发布第一个正式版的情况下,目前 Github 上 star 将近 23K,热度相当高了(当然不能和 vue 等前端 web 框架相比,都要上 100k 了,两者开发者群体规模不同,开源时间不同)。 从 Flutter 自身来看,开发的应用程序性能确实流畅很多,比 weex、rn 有明显的性能提升。还有,随着 Google Fuchsia OS 的发布, DART 及 flutter 成为一等公民,也就是说将来具有 Fuchsia OS 的设备,Dart 都会成为主要的开发语言。最后

一些资源:

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Flutter教程(二) 了解Dart语言