Flutter教程(二) 了解Dart语言

flutter

在上一篇教程中说了Flutter使用Dart语言开发。本篇教程整体介绍一下Dart语言,注意,本篇不会介绍Dart具体语法细节,也不会介绍Dart VM、dart2js,因为这些和Flutter无关。本文会从Flutter开发角度来介绍一下Dart语言特点、生态、未来三个方面。

注:如果你想快速的了解Dart以进行Flutter开发,Flutter中文网有一个Dart语言的资源列表 ,按照顺序看一遍,相信你就可以直接上手了。

Dart语言特点

首先我们看看为什么Flutter会选择Dart作为开发语言,下面是官方给出的理由:

Flutter在四个主要维度进行了评估,并考虑了框架作者、开发人员和最终用户的需求等因素。我们发现不同的语言在不同的层面符合一部分需求,但Dart在所有评估维度上得分都很高,并且符合我们的所有要求和标准。

Dart运行时和编译器支持Flutter的两个关键特性的组合:基于JIT的快速开发周期:允许使用类型的语言进行形状更改和有状态的热重载;以及AOT编译器,可生成高效的ARM代码,可以快速启动并拥有可预测的生产部署性能。

此外,我们有机会与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生态贡献来自中国开发者的力量, 目前社区已有几个开源项目开始公测,详情请查看: 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 都会成为主要的开发语言。

最后

一些资源:

  1. Flutter资源教程,请访问Flutter中文网
  2. Flutter http请求库dio
  3. Flutter教程
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容