在上一篇教程中说了Flutter使用Dart语言开发。本篇教程总体介绍一下Dart语言,注意,本篇不会介绍Dart具体语法细节,也不会介绍Dart VM、dart2js,由于这些和Flutter无关。本文会从Flutter开发角度介绍一下Dart语言特色、生态、将来三个方面。javascript
注:若是你想快速的了解Dart以进行Flutter开发,Flutter中文网有一个Dart语言的资源列表 ,按照顺序看一遍,相信你就能够直接上手了。html
首先咱们看看为何Flutter会选择Dart做为开发语言,下面是官方给出的理由:前端
Flutter在四个主要维度进行了评估,并考虑了框架做者、开发人员和最终用户的需求等因素。咱们发现不一样的语言在不一样的层面符合一部分需求,但Dart在全部评估维度上得分都很高,而且符合咱们的全部要求和标准。vue
Dart运行时和编译器支持Flutter的两个关键特性的组合:基于JIT的快速开发周期:容许使用类型的语言进行形状更改和有状态的热重载;以及AOT编译器,可生成高效的ARM代码,能够快速启动并拥有可预测的生产部署性能。java
此外,咱们有机会与Dart社区密切合做,Dart社区正在积极投入资源改进Dart在Flutter中的使用。例如,当咱们采用Dart时,该语言没有提供生成原生二进制文件的工具链(这对于实现可预测的高性能是颇有帮助的),可是如今实现了,由于Dart团队为Flutter构建了它。一样,Dart VM以前已经针对吞吐量进行了优化,但团队如今正在优化VM的延迟时间,这对于Flutter的工做负载更为重要。android
Dart在如下主要标准上获得高分:git
- 开发人员的效率。Flutter的主要价值主张之一是经过让开发人员使用相同的代码库为iOS和Android建立应用程序,从而节省了工程资源。使用高效的语言能够进一步加速开发周期,并使Flutter更具吸引力。这对咱们的framework团队和开发人员都很是重要。大部分Flutter功能都是用Dart实现,所以咱们须要在10万行代码时能保持高效的而不会牺牲framework和widget的可读性。
- 面向对象。虽然咱们可使用非面向对象的语言,但这意味着要从新解决几个难题。另外,绝大多数开发人员都具备面向对象开发的经验,所以更容易学习如何使用Flutter进行开发。
- 可预测,高性能。借助Flutter,咱们但愿使开发人员可以快速建立流畅的用户体验。为了实现这一点,咱们须要可以在每一个动画帧中运行大量的代码。这意味着咱们须要一种既能提供高性能又能提供可预测性能的语言,而不会出现会致使丢帧的周期性暂停。
- 快速内存分配。Flutter框架使用函数式流,它很大程度上依赖于底层的内存分配器,从而有效地处理小的、短时间的内存分配会很是重要,因此在缺少此功能的语言中Flutter没法有效地工做。
综上所述,主要的信息就是Dart在flutter中没有VM,能够直接经过AOT编译器编译成本地代码,而且内存管理比较适合Flutter. 上面是官方说法,下面说些我的见解:从笔者对Dart的使用来看,Dart的设计目标应该是既对标Java,也对标Javascript。github
先看看 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不足的是生态,这会在下文讨论。web
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:mirrors 或 dart:html的dart代码。Flutter中dart代码会经过AOT编译器编译成本地代码,没有vm,而且dart团队专门针对flutter进行了优化。
一个语言的成败,重要的一点仍是在于生态。而生态的好坏,有两个主要指标:第三方库的数量和开发者数量。
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 SDK以外经常使用(实用)的Package、插件,以丰富Flutter第三方库,为Flutter生态贡献来自中国开发者的力量, 目前社区已有几个开源项目开始公测,详情请查看: Flutter中文网开源项目 (ps:目前Flutter中文网开源项目组正在寻找有实力、有梦想、热衷于分享的开发者加入,若是你有兴趣,点进去,获取联系方式)。
虽然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 都会成为主要的开发语言。
一些资源: