写点什么

Dart 准备好了吗

  • 2012-10-18
  • 本文字数:2511 字

    阅读完需:约 8 分钟

一年前,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 的前景?欢迎发表自己的看法。

2012-10-18 08:552925
用户头像

发布了 501 篇内容, 共 284.6 次阅读, 收获喜欢 64 次。

关注

评论

发布
暂无评论
发现更多内容

TCP如何保证数据的可靠传输

W🌥

计算机网络 TCP/IP 8月日更

卷向字节码-Java异常到底是怎么被处理的?

why技术

Java JVM

教你如何使用FusionInsight SqoopShell

华为云开发者联盟

sqoop Shell FusionInsight 脚本 Loader

趁着课余时间学点Python(九)函数的进阶 生成器 装饰器的理解

ベ布小禅

8月日更

生产环境全链路压测平台Takin

TakinTalks稳定性社区

开源 高可用 全链路压测 性能压测

网络攻击的高频出现,高防服务器是最佳的选择

九河云安全

当 CloudQuery 遇到大数据

BinTools图尔兹

大数据 hive ES 数据库管理

模型训练语料少?知识蒸馏解决烦恼

LigaAI

人工智能 神经网络 深度学习 模型训练 nlp

OAuth2.0授权码模式实战

码农参上

OAuth 2.0 8月日更

WeLink的杀手锏和远程办公软件的另一面

华为云开发者联盟

远程办公 华为云 welink 视频会议 数字化办公

【LeetCode】0~n-1中缺失的数字Java题解

Albert

算法 LeetCode 8月日更

Vue进阶(二十三):Promise 详解

No Silver Bullet

Vue Promise 异步请求 8月日更

Compose管理状态

Changing Lin

8月日更

百度AI原生云实践: 基于容器云打造 AI 开发基础设施

百度开发者中心

AI 最佳实践 方法论 云原生

c++ list 详解

若尘

c++ List 8月日更

探究Presto SQL引擎(1)-巧用Antlr

vivo互联网技术

sql 编译器 presto antlr4

索信达控股:打造新一代中小银行智能营销平台体系的道与术

索信达控股

四色建模:用户转化率 KPI

escray

学习 极客时间 如何落地业务建模 8月日更 四色建模

破解三大安防视频痛点,看华为4大硬核视频上云技术

华为云开发者联盟

视频 华为云视频 安防 摄像头 安防视频

百度BaikalDB在同程艺龙的成功应用实践剖析

百度Geek说

数据库 架构 后端

Go 学习笔记之 Goroutines

架构精进之路

Go 语言 8月日更

Prometheus 监控SpringCloud微服务

Rubble

Prometheus SpringCloud 8月日更

从0开始的TypeScriptの三:TS的类型

空城机

typescript 大前端 8月日更

带你读AI论文:基于Transformer的直线段检测

华为云开发者联盟

模型 目标检测 Transformer 线段检测 LETR

中间件运维之故障自愈

安第斯智能云

运维 后端 中间件

带你了解Go怎样实现二级缓存

Regan Yue

redis 二级缓存 Go 语言 8月日更

写作 7 堂课——【5. 结构化写作】

LeifChen

写作技巧 8月日更 结构化

价值连城 人工智能的通识课 - 吴恩达Andrew Ng AI For Everyone John 易筋 ARTS 打卡 Week 59

John(易筋)

ARTS 打卡计划

黑科技解密!实现socket进程间迁移

Java 程序员 架构 面试 架构师

从外卖员到程序员,自学3年终于转行成功,三面“拿下”拼多多

Java~~~

Java spring 面试 微服务 JVM

Vue进阶(二十一):ES6 知识储备

No Silver Bullet

Vue ES6 8月日更

Dart准备好了吗_Google_崔康_InfoQ精选文章