BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Dart准备好了吗

| 作者 崔康 关注 1 他的粉丝 发布于 2012年10月19日. 估计阅读时间: 8 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

一年前,Google发布了一门新的编程语言——Dart,试图弥补Javascript的不足,Google希望Dart最终能够取代JavaScript成为Web开发的主流语言。当时,Google只是提供了一些技术预览,大家的关注主要集中在Dart语言本身,而不是如何用它来做实际开发。原因在于想要成为一门主流的编程语言,Dart需要有一套完成的开发工具包。在Dart一周岁生日之际,Google发布了面向开发人员的Dart SDK第一版,对于Web开发人员来说值得关注。

Dart SDK提供的关键特性包括:

  • 更快的Dart虚拟机,甚至在某些测试上超过V8
  • 新的Dart-JavaScript的转换器,可以生成快速、压缩的代码
  • 能够透明的运行在现代浏览器上的HTML库
  • 与Javascript代码的交互库
  • 易用的编辑器
  • 新的打包工具——Pub
  • Dartium——原生支持Dart的Chromium构建(Dartium是集成Dart虚拟机的Chromium浏览器,过去要想在浏览器中运行Dart代码,只能将Dart代码编译为Javascript,但是现在有了Dartium, Dart代码可以真正地在浏览器里的Dart虚拟机中运行了。 Dartium支持一些的基本开发工具,如调试等。如果你对Dartium开发工具感兴趣,可以观看Seth Ladd博客中关于Dartium中的开发工具的视频演示。)
  • 服务器端IO库
  • 描述Dart语法和新特性的语言规范

Dart语言存在许多出色的特性,其中包括模块化和可选类型:

  • 模块化——Dart中的命名空间采用了库机制,它不同于Java中仅能使用类名来定义方法或变量命名空间。很重要的一点是:Dart中的库除了包含类之外,还可以包含顶级元素,即类之外的变量和函数。print函数正是一个例子,因为它是无类的顶级函数。库系统也为名字冲突提供了一种解决方案:库A可以导入另一个库B,为了避免A和B间的命名冲突,所有从库B中导入的名字都会被加上前缀,也就是说,使用#import("foo.dart", "foo") 导入库后,所有其中的可用元素都会拥有前缀"foo."。

  • 可选类型(Optional Typing)——“可选类型”关键在于“可选”。开发人员可以为代码加上类型标注,但这些标注又对代码行为根本没有影响。事实上,Dart中还可以指定一个无意义类型——而同时代码仍然能够正常运行。在代码中拥有类型可以让各种类型检查器各司其职。Dart附带的编辑器中拥有一种类型检查器,它能够高亮类型错误并将其当做警告。Dart中还有一种检查模式,在该模式中类型标注可用来检查代码,任何违规都会被报告成警告或错误。实际上可选类型标注在代码中会具有类型信息,这些信息对编制文档会有帮助;使用可选类型不再需要更多的文档来解释某个参数必须实现一个特定的方法才可以接受。接口的存在(即带有方法签名的方法名称集合,以及可选类型标注)可以帮助文档化API。关键在于,语言总是动态的而且参数也可以被指定为动态的,也就是Dynamic类型。

针对Dart SDK的发布和Dart的前景,开发社区展开了热烈的讨论,大家发表了各自的看法。

ColinABQ:Dart从一出生就注定是“Javascript的转换器”和“Javascript代码的交互库”,Google知道它面临多大的障碍,大家认为Dart不可能获得真正的应用。如果其他转换器被禁用,那么Dart也会消失。不过我想知道Dart是否在Google公司内部使用,处理一些开发问题。

Deekthesqueak:我对Web新技术非常感兴趣,但是坦白的说,在应用新技术之前,我们需要考虑如何处理低版本的浏览器。我们需要想办法强制用户升级IE、Chrome、Firefox等等。作为一名曾经为IE 7-9、Firefox和Chrome开发过Web应用的过来人,我不得不考虑最小支持集合,这严重影响了应用可以具备的特性。

Dilbert:我认为Dart还没有准备好。Google需要浏览器来支持Dart语言。你不能把内建Dart虚拟机的Chromium构建用于普通的上网,其他浏览器厂商还没有支持Dart,而且Google也是Javascript标准化进程的一员,它还在招聘大量的Javascript开发人员……我认为,Lars Bak想要开发Dart,因此Google投入了相应的资源,这就像Rob Pike和Ken Thompson想要开发Go语言一样,Google也提供了支持。Google公司的一些员工认为Javacript很糟糕,希望完全抛弃它,但是很显然更多的人不支持。

Desverger:我个人认为Javascript是一门很糟糕的语言,原因有很多。因此,我会尽力避开web开发。那些从事Web开发的人正是那些真正喜欢Javascript的人。我对Dart了解不多,但是我相信相比Javascript,我会更享受Dart。作为一名开发人员,我希望能够使用Dart开发网站,应该会满足我的需求。我猜Dart会吸引更多的人从事Web开发。

PervertRyan:为何我们要花时间学习一种新语言?我们应该做的是为统一的字节码和虚拟机制定一个Web标准。只要JVM或者CLR没有把我们绑定到某一种特定的语言上,我们就可以选择。Dart可能比Javascript更好(希望如此),但是这并不意味着它就是银弹。如果我们创建标准化的字节码,那么具体的语言我们就不必关心了。 这就是我想要的。我希望能够选择动态类型还是静态类型,低性能还是高性能。我们已经做了不少Javascript的替代品(CoffeeScript、TypeScript、ScriptSharp、GWT等等),但是它们本质上都利用Javascript作为底层的字节码。

xxgreg(回复PervertRyan):字节码存在一系列问题——1.验证,你需要验证字节码是否安全。这个过程会像解析源代码一样缓慢。更糟糕的是,难以确保安全。2.缺少AST,虚拟机经常额外的修改源代码的初始AST,从而可以进行运行时优化。字节码经常会导致源代码中的有用信息丢失。3.尺寸,字节码通常不比源代码小,可能会创建一个压缩的二进制AST。字节码和虚拟机必须经常做出优化决定。对于虚拟机上的所有语言,虚拟机很难公平对待。

cletus:坦白说,我依然看不到Dart的意义,它做出了一些奇怪的选择,比如可选类型。代码在服务器端和客户端共享是GWT吹嘘的想法,但最终失败。Dart看起来又要重蹈覆辙,我对它的成功不太乐观。不过从另一方面讲,Dart也可能会有不错的前景,它所包含的不少特性我都很喜欢。我认为Javascript就像是编程语言界的电子邮件——它无处不在,但是大家都觉得它存在问题,而且这些问题的修补特别复杂。

读者朋友是否看好Dart的前景?欢迎发表自己的看法。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

描述Dart语法和新特性的语言规划 by 臧 秀涛

语言规范?

Re: 描述Dart语法和新特性的语言规划 by 崔 康

谢谢指正,已修改。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT