写点什么

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

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

关注

评论

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

Redis中有事务吗?有何不同?

EquatorCoco

数据库 redis

腾讯云 AI 代码助手:产品研发过程的思考和方法论

腾讯云 AI 代码助手

腾讯云 代码 腾讯云AI代码助手

巧用观测云可用性监测(云拨测)

观测云

云拨测

万字干货!手把手教你如何训练超大规模集群下的大语言模型

快手技术

人工智能 大语言模型

盘点Vue3 watch的一些关键时刻能够大显身手的功能

快乐非自愿限量之名

JavaScript vue.js

搭建开发体育直播平台,赛事视频源和数据资源从哪里来?

软件开发-梦幻运营部

开源生态发展合作倡议

OpenAnolis小助手

开源 操作系统 龙蜥社区 OpenAnolis

探索工程智能体和RAG建设的思考

腾讯云 AI 代码助手

腾讯云 腾讯 腾讯云AI代码助手

商业画布如何制作?10个优质商业画布模板案例推荐!

职场工具箱

商业模式 在线白板 办公软件 绘图软件 商业模式画布

信创时代的数据库之路:2024 Top10 国产数据库迁移与同步指南

tapdata

数据复制 oceanbase 国产数据库 数据迁移工具 PolarD

忽然就卷起来的AI Coding 赛道

松子(李博源)

#大模型 #AI #AI编程

“双龙”联合!助力辽宁沈抚示范区打造安全可靠的政务云平台 | 龙蜥案例

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥案例

克服 Prometheus 单值数据模型的局限性 — GreptimeDB 的新路径

Greptime 格睿科技

数据库 Promethues

数智化浪潮:如何利用低代码平台加速企业创新

不在线第一只蜗牛

低代码 数智化

鸿蒙NEXT开发案例:数字转中文大小写

zhongcx

鸿蒙

Procedure 框架的设计和应用

Greptime 格睿科技

数据库 分布式 procedure

项目管理,如何做到流程标准化

爱吃小舅的鱼

项目管理

高性能网络SIG月度动态: 推进SMC支持基于eBPF透明替换和内存水位限制等多项功能支持

OpenAnolis小助手

开源 操作系统 龙蜥社区 OpenAnolis 龙蜥社区SIG

Coolbpf 最新特性系列解读:eNetSTL 网络功能加速库在龙蜥社区开源

OpenAnolis小助手

操作系统 龙蜥社区 coolbpf 龙蜥系统运维联盟

缓存与主副本数据一致性系统设计方案(下篇)

HAibiiin

架构 系统设计 分布式系统 缓存一致性 主从架构

Cloud Kernel SIG 月度动态:发布ANCK 5.10-017.3小版本,引入SMC、TDX等多项特性

OpenAnolis小助手

开源 操作系统 龙蜥社区 OpenAnolis 龙蜥sig

手把手教学攻略:如何在Anolis OS上部署OpenVINO深度学习模型?

OpenAnolis小助手

AI 操作系统 OpenVINO Anolis OS

【IoTDB 线上小课 09】时序大模型的发展历程,出现高性能国产成果?

Apache IoTDB

鸿蒙NEXT开发案例:字数统计

zhongcx

高性能存储SIG月度动态:重构和优化fuse,推动containerd社区支持erofs

OpenAnolis小助手

开源 操作系统 龙蜥社区 OpenAnolis 龙蜥社区SIG

深度盘点:国内 7 大企业网盘私有化部署厂商

易成研发中心

TapData 正式加入 openEuler 社区,达成开源共识,携手推进国产基础软件生态创新与发展

tapdata

openEuler 开源社区 Tapdata 开源操作系统

行业热点|助力企业解决降本增效的难题,Altair HPCWorks新功能创新升级

Altair RapidMiner

gpu 数据分析 HPC #人工智能 altair

360企业云盘怎么样?与9款云盘的详细对比

易成研发中心

用 DataEase 分析北京近年房价变化

搞大屏的小北

数据分析 数据可视化 BI 分析工具 DataEase 房价

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