Skip to content

四火的唠叨

一个纯正程序员的啰嗦

Menu
  • 所有文章
  • About Me
  • 关于四火
  • 旅行映像
  • 独立游戏
  • 资源链接
Menu

Dart:JavaScript 的未来

Posted on 09/17/201206/23/2019 by 四火

dart 最近在关注 Dart 语言,下面这篇文章译自这里,其实是 2011 年 11 月 Google 内部员工的一封邮件,邮件中提到的 Dash,就是如今的 Dart 语言的前身。Google 搞东西很有意思,思维似乎非常超前,总是能挖到现在火爆的东西的不足,然后搞一个新的东西代替它,真是凶猛异常。比如 SPDY、V8、WebP、Go 等等,有的成功,有的失败。还有,希望大家能从下面粗糙的译文中留意到,Google 对于标准非常重视,谈论中也是霸气外露,希望把一切标准都控制在自己手里。

Subject: [Caja] 转发:从上周的 JavaScript 会议看 JavaScript 的未来
From: Mark S. Miller
Date: Nov 16, 2010 3:46:58 pm
List: com.googlegroups.google-caja-discuss

11 月 10 号和 11 号,一簇 Google 团队展现了一组关于客户端语言 JavaScript 未来的观点。

这个文档就是结论,最初发布在 Buzz。

请转发此信息给团队和朋友,这个内部的邮件列表,就是我们在 Google 范围内讨论这个文档和这些问题的地方。如果你要加入讨论,请订阅:https://groups.google.com/a/google.com/group/javascript-standard/topics。

结果摘要

JavaScript 有一些根本性的缺陷,这些缺陷无法被修复,我们将采取两套策略来为 JavaScript 的未来做准备。

  1. Harmony(低风险/低回报):继续结合 TC39(EcmaScript 标准体)来发展 JavaScript。
  2. Dash(高风险/高回报):开发一个新语言(Dash),以维持 JavaScript 的动态特性,但是可以拥有更高的性能,可以更好地被工具化,应用到大型系统中。把 Dash 推广成为开源的标准,并且让其它浏览器都支持它,开发者可以使用 Dash 工具,也可以通过一个交叉编译器来转成 JavaScript 以便兼容那些无法支持 Dash 本身的浏览器。

好吧,这是在一万英尺上空的概览,是该看看细节了(包括 FAQ),继续……

——————————

未来用 JavaScript 来构建漂亮的 web 应用远不会像现在这么困难,创新的旋风已经从 web 挂到 iOS 和其他封闭平台上了。JavaScript 从一开始就成为了 web 平台的一部分,但是 web 看起来已经长得过大了。Web 开发者社区使用了大量的 JS 来改善平台的不足。复杂的 web 应用,也就是 Google 特别专注的,始终在平台、不容易被工具加工和历来的性能问题中挣扎。即使是业余开发者写的小众应用,也被迫在框架的混乱迷宫和不兼容的设计模式中寻找方向。

从历史角度来看,Web 毫无疑问是成功的,web 平台基本上发挥了它自己的长项。但是像正在极力改善的 iOS 平台告诉我们,必须继续完善它的,而不是停留在现在的高度上。JavaScript 当今好端端地发展,但是看起来也不像一个长远的解决方案,是到改变的时候了。看看前面提到的这两条策略,有两种办法来解决这个问题,要么继续发展 JavaScript,或者我们可以推广一种新的语言,致力于解决这些 JavaScript 天生难以被修复的问题。

发展 JavaScript 的选项相对是低风险的,但是即使最好的情况下,也要花好多年,并且由于 JavaScript 这些基础的问题(比如存在单独 Number 原语),历史已经告诉我们,不彻底革命,改良是走不通的。所以虽然是低风险的方案,回报也好不到哪里去。

那么革命的选项就是相当的高风险了,要去让那么多浏览器制造商满意,来支持这门新语言,这真是一个巨大的挑战。但是这也是唯一的办法。所以高风险意味着高回报,一个典型的跳蛙战略。

可是无论采用哪一种方案看起来都会失败。如果只采用改良的方案,web 发展会蹒跚不前,并且逐渐难以和那些独立的非开放平台竞争。如果只采用革命的方案,一旦失败会导致我们处于不受欢迎的境地——JavaScript 演进会减缓,甚至,失去支持,这些最基础的缺陷仍然存在,但是 Google 却失去了 web 的领导位置。

所以,唯一的解决办法就是要并行地执行这两个策略。当跳蛙的尝试成功,就是说,它已经成为市场上主要浏览器都支持的开放标准的时候,web 程序员就可以拥有一个可行的 JavaScript 替代品。Harmony:改良 JavaScript,Google 会继续保持它在开放 web 标准的领导地位。Harmony 是 EcmaScript 在 TC39 协议达成的名字。我们的 JS++项目(Parkour 项目的一部分),会加入 Caja 项目的成果,以改进 Harmony。同时,我们会专注于改进公共 Harmony 文档,尽快提交外部标准委员会,Chrome 也要尽可能地作为支持的典范。

为了帮助加速可能漫长的标准化进程,内部的 Harmony 措施会实验性地以一种允许写真实代码的方法来使用 V8 预处理器原型化新特性。具体措施还未定。我们需要和浏览器厂商(比如 Mozilla)一起合作,来获取试验阶段的支持,给出更大的压力来加速 Harmony 标准化和广泛化的进程。Harmony 会被 V8 和 JSC(Safari)同时实现,以避免出现 WebKit 兼容性的空白。

只专注于 Chrome 的开发者预计能在 2011 年中期看到 Harmony 的一些特性在 Chrome 上的支持。顾及所有浏览器的开发者得要等好些年才能获得 Harmony 的直接支持,所以标准化进程是相对缓慢的。要让 Harmony 开发者更多地关注于这些早一些行动的浏览器,我们需要加强 source-to-source 转换器(比如 Caja 的 ES5-to-ES3 转换器)来转换大量的 Harmony 到早期版本的 JavaScript 上面。

Harmony 会继续以 JavaScript 改良的身份去推广,它的支持者是希望在 web 平台上写标准 JavaScript 的开发者。GWT、JSCompiler,以及 Caja 将继续提供工具来支持 Harmony。Dash:推翻重建的工作会尽可能保留如今在互联网非常成功的部分,但是要弥补那些公认的不足。

Dash 设计的指导思想:

  1. 性能:性能是必须的特性,所以有必要创造一个虚拟机来避免 EcmaScript 的性能问题。
  2. 开发者易用性:保持动态、容易上手、不需要编译等等被业余开发者所喜爱的 JavaScript 特性。
  3. 工具能力:语言本身要容易被工具支持(比如可选类型支持),大型项目需要代码的易读性,以便进行重构和快速寻找调用点。Dash 的工具其实不需要非常高效,对小项目的开发者来说,文本文档搞定都可以。

Dash 也需要具备一定的安全性,但是这一点不能和上面三点矛盾。

Dash 设计主要包含以下几个部分:

  1. 浏览器的虚拟机:我们希望 Dash 可以以一种本地客户端语言的方式,像 JavaScript 一样在所有浏览器中跑起来。
  2. 前端服务器:可以用在服务端直到 Google 的全部前端页面。这要求一个大型应用对前后端大统一。
  3. 交叉编译器:要能够跑在 JavaScript 平台上,这样才能广泛应用。具有 Dash 虚拟机的平台则不需要转换,直接可以解析 Dash,这样就获得了性能优势。其中一个好办法是让 Dash 代码编译后编程 Harmony。

Dash 的终极目标是要替换 JavaScript,成为开放 web 平台上的通用语言。我们会主动向程序员和其他所有的浏览器厂商宣传和推送标准化信息,希望能够获得全面采用。这个工作的决策是困难的,但是我们愿意竭尽所能帮助它成功。

当其它浏览器都支持的时候,我们就要把它晋升为 web 平台上开发的正式语言;在这以前,编译器允许开发者聚焦到别的浏览器上。

Dash 语言是由 Lars Bak 和他的 Aarhus 工作室的团队设计的,Bruce Johnson 在亚特兰大的团队会负责工具,而 STP 的 Pavel Feldman 则为 Dash 和 Harmony 提供 web 检测级别的支持。

Dash 文档会在 2011 年第一季度完成。开发者可以只关注 Chrome,这样可以看到很多特性在一年内加进 Chrome 的 Dash 去。如果关注所有浏览器的话,就得等 Dash 的交叉编译器了,这个时间情况不好说,也许好多年,直到其他浏览器厂商都支持。

尽管 Dash 还是处在比较早的阶段,发展还是很迅速的。你可以从这个演讲中找到提议的更多细节:https://docs.google.com/a/google.com/present/view?id=c6b9wv4_27fzwwsddk&revision=_latest&start=0&theme=google&cwj=true。

(FAQ 部分略,后续会继续写介绍 Dart 的文章。)

Cheers, MarkM

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》

×Scan to share with WeChat

你可能也喜欢看:

  1. Dart,你凭什么挑战 JavaScript?
  2. Javascript Memoizer
  3. JavaScript 3D 图表
  4. Chrome 插件开发
  5. 一个前端项目,到底要集成多少库和工具

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

订阅·联系

四火,啰嗦的程序员一枚,现居西雅图

Amazon Google Groovy Hadoop Haskell Java JavaScript LeetCode Oracle Spark 互联网 亚马逊 前端 华为 历史 同步 团队 图解笔记 基础设施 工作 工作流 工具 工程师 应用系统 异步 微博 思考 技术 数据库 曼联 测试 生活 眼界 程序员 管理 系统设计 缓存 编程范型 美股 英语 西雅图 设计 问题 面向对象 面试

分类

  • Algorithm and Data Structure (30)
  • Concurrency and Asynchronization (6)
  • System Architecture and Design (43)
  • Distributed System (18)
  • Tools Frameworks and Libs (13)
  • Storage and Data Access (8)
  • Front-end Development (33)
  • Programming Languages and Paradigms (55)
  • Testing and Quality Assurance (4)
  • Network and Communication (6)
  • Authentication and Authorization (6)
  • Automation and Operation Excellence (13)
  • Machine Learning and Artificial Intelligence (6)
  • Product Design (7)
  • Hiring and Interviews (14)
  • Project and Team Management (14)
  • Engineering Culture (17)
  • Critical Thinking (25)
  • Career Growth (57)
  • Life Experience and Thoughts (45)

推荐文章

  • 聊一聊分布式系统中的时间
  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • RSA 背后的算法
  • 谈谈 Ops(汇总 + 最终篇):工具和实践
  • 不要让业务牵着鼻子走
  • 倔强的程序员
  • 谈谈微信的信息流
  • 评审的艺术——谈谈现实中的代码评审
  • Blog 安全问题小记
  • 求第 K 个数的问题
  • 一些前端框架的比较(下)——Ember.js 和 React
  • 一些前端框架的比较(上)——GWT、AngularJS 和 Backbone.js
  • 工作流系统的设计
  • Spark 的性能调优
  • “残酷” 的事实
  • 七年工作,几个故事
  • 从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)
  • 一道随机数题目的求解
  • 层次
  • Dynamo 的实现技术和去中心化
  • 也谈谈全栈工程师
  • 多重继承的演变
  • 编程范型:工具的选择
  • GWT 初体验
  • java.util.concurrent 并发包诸类概览
  • 从 DCL 的对象安全发布谈起
  • 不同团队的困惑
  • 不适合 Hadoop 解决的问题
  • 留心那些潜在的系统设计问题
  • 再谈大楼扔鸡蛋的问题
  • 几种华丽无比的开发方式
  • 我眼中的工程师文化
  • 观点的碰撞
  • 谈谈盗版软件问题
  • 对几个软件开发传统观点的质疑和反驳
  • MVC 框架的映射和解耦
  • 编程的未来
  • DAO 的演进
  • 致那些自嘲码农的苦逼程序员
  • Java 多线程发展简史
  • 珍爱生命,远离微博
  • 网站性能优化的三重境界
  • OSCache 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • Ticket: TRANSACTION 1.922915 BTC. Go to withdrawal >> https://yandex.com/poll/enter/BXidu5Ewa8hnAFoFznqSi9?hs=20bd550f65c6e03103876b28cabc4da6& on 倔强的程序员
  • panshenlian.com on 初涉 ML Workflow 系统:Kubeflow Pipelines、Flyte 和 Metaflow
  • panzhixiang on 关于近期求职的近况和思考
  • Anonymous on 闲聊投资:亲自体验和护城河
  • 四火 on 关于近期求职的近况和思考
  • YC on 关于近期求职的近况和思考
  • mafulong on 常见分布式基础设施系统设计图解(四):分布式工作流系统
  • 四火 on 常见分布式基础设施系统设计图解(八):分布式键值存储系统
  • Anonymous on 我裸辞了
  • https://umlcn.com on 资源链接
© 2025 四火的唠叨 | Powered by Minimalist Blog WordPress Theme