写点什么

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:552911
用户头像

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

关注

评论

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

上线一天销售额超15亿!《黑神话:悟空》火爆全网的技术秘诀!

可信AI进展

人工智能

Python开发中,SQLAlchemy 的同步操作和异步操作封装,以及常规CRUD的处理。

不在线第一只蜗牛

Python 数据库 oracle

解锁未来财富密码:AI自动化副业创收班——终身财富加速器

霍格沃兹测试开发学社

Python多进程日志以及分布式日志的实现方式

我再BUG界嘎嘎乱杀

Python 编程 多线程 日志 分布式日志

2025第二十四届杭州国际智能楼宇展览会

AIOTE智博会

智能楼宇展 智能楼宇展会 智能楼宇展览会

预制菜工厂MES系统:具体功能与应用场景

万界星空科技

mes 万界星空科技 预制菜加工 预制菜工厂 预制菜生产管理

云原生与AI融合持续深化,华为推动全球智能化新浪潮

新消费日报

数业智能心大陆:用AI关怀青少年心理健康

心大陆多智能体

智能体 AI大模型 心理健康 数字心理

关于智能编码助手【通义灵码】,开发者们这么说...

阿里云云效

阿里云 云原生 通义灵码

Go 语言异常处理

FunTester

python Socket无限发送接收数据方式

我再BUG界嘎嘎乱杀

Python 编程 后端 socket 开发语言

如何使用 Higress 快速构建 AI 应用?

阿里巴巴云原生

阿里云 云原生 Higress

腾讯会议升级“万室如意”计划,助力实体会议室引入AI能力

极客天地

Voice agent connected!回顾一场 24 小时的黑客松

RTE开发者社区

关于智能编码助手【通义灵码】,开发者们这么说...

阿里巴巴云原生

阿里云 云原生 通义灵码

MES系统如何支持多品种小批量生产

万界星空科技

工业互联网 制造业 生产管理系统 mes 万界星空科技

GitHub星标破万!Python学习教程(超详细),真的太强了!

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言 学习教程

关于 API 你应该知道的一切

幂简集成

API

快手主站前端工程化探索:Gundam 脚手架在新春除夕项目中的实践与展望

快手技术

前段

阿里巴巴拍立淘API返回值:商品分类与属性的智能识别

技术冰糖葫芦

API Explorer API 接口 API 策略

关于 IoTDB 的疑问,我们这次有奖征集!

Apache IoTDB

RPA的九大主要特征:全面优化业务流程的利器

八爪鱼采集器︱RPA机器人

RPA 自动化 RPAxAI

统一多层网关好处多,阿里云云原生 API 网关打造全能型网关

阿里巴巴云原生

阿里云 云原生 云原生API

新时代下,作为IT 管理员的我们如何快速构建一个安全高效的IT 体系

coxi_vv

1Panel 运维效率

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