JavaScript – Web汇编语言:第二部分 疯狂还是荒唐


[原文发表地址] JavaScript is Assembly Language for the Web: Part 2 – Madness or just Insanity?

[原文发表时间] 2011-07-19 11:40

更新:你可以去看看这周Hanselminutes上我和Erik Meijer合作完成的播客,话题是:JavaScript – Web汇编语言:语义标记终结!清除机器码HTML

一些朋友们认为说“JavaScript是一种Web汇编语言”完全是失去理智的说法。因此,我特地请教了一些JavaScript专家,比如Brendan Eich(JavaScript创始人)和Douglas Crockford(JSON创始人),还有Mike Shaver(Mozilla的技术副总裁)。以下是我们一些私人email对话,当然他们允许我在此公开了。

Mike Shaver

      我以前听说过两者间的比较,我觉得基本是对的。它忽略了大量投入在JS开发者工效上的成果,尽管汇编并没有被设计成人性化的语法(尤其是现代汇编)。

Brendan Eich

      我好些年前曾说过“JS是Web的x86”【可能是在JSConf上说的】,但我不敢确定它的出处。【Nick Thompson今年在Hacker News上也说过这话。】

      这要点是说JS不仅是我们所能接触最底层的语言,而且它还有更高层的功能。

      Shaver说得没错,没有宏处理器的汇编对程序员或者安全来说都不好。JS就是这样。所以这种类似情况需要一定的条件支持,否则就会显得相当愚蠢。

      融合高层次的功能性编程和内存安全,并加以底层的功能像是类型数组,现有类型数组和二进制数据的ES.next扩展,这样就能组成一个比汇编更强大的编程语言,而且最大的改进就是内存安全。

Douglas Crockford

      我觉得把JavaScript看做Web的VM会更合适些。我们一直认为Java的JVM是Web的VM,但其实应该是JavaScript。

      JavaScript解析器比JVM的bytecode校验器更能有效保证代码安全。JavaScript承诺只写入一次就能在任何地方运行,这点上它做得很好,也许是因为它在高层次运行,避免了一些底层事件。然后Turing去处理其它部分。

      当然也有相当一部分人觉得JavaScript并非那么完美。我以前也是其中一份子,但是现在我不断地被其中的亮点所吸引。

Brendan Eich还说:

      Doug提到了个很好的观点,那就是source打败bytecode。我的朋友,UC Irvine的Michael Franz教授,他很久之前就展示了Java校验器中O(n^4)的复杂性(计算周期失控,拒绝服务)。JS作为一个缩减后的source显然能够更便携,更快速的解析

      和“bytecode”一样,Source也避免了Java bytecode可能犯的愚蠢的错误:比如冻结Java底层很差劲的设计,然后无法调用高层的source—Java编程语言怕破坏Java bytecode的兼容性。这严重地混乱了Java中内部类的设计,然后不管怎样Sun就破坏了bytecode兼容。

让我们从YCombinator的思绪中回归,Nick Thompson说:

      我承认我对这个观点存在偏见:我用了两年的时间致力于让JVM和Javascript协调,在我们Netscape群里,很多人都觉得bytecode对可移动的代码来说是一个较好的基础。但是Sun使从头开始构建整个略显臃肿的软件堆栈变的很困难。他们不希望Java和其他任何东西合作,不让它嵌入其它任何软件中。他们用解释型的语言来写字符串处理代码,而不是用玷污他们的C语言!据我所知,Sun有看过Netscape,它是Java当时唯一的重要客户,但也仅仅是出于要更换Windows窗体的目的。用Java,简直就是种折磨。

      与此同时,Brendan正与10位工程师,3位客户支持人员合作,全力关注着与web创造者相关的事项,比如将JS代码融入HTML,即时加载,与其他浏览器集成,以及与其他浏览器供应商合作来制定一个开放的JS。

      所以现在JS是web的x86汇编程序,也许现在还不能算是,但是它已经做得很好了(GWT是最关键的问题。)这将会是worse is better的经典案例,除非Java从下到上都看上去更好。与此同时,JS变得越来越棒了。如果你想取代它,那么我只能希望你好运了。

关键是,没有一个类比是完美的。当然JavaScript和ASM是不同的语言,不过作为一个类比,还是可以的。

  • JavaScript无处不在。
  • 它很快并且越来越快。
  • Javascript就像web编程语言需要的那样很底层。
  • 你可以手工加工,或者试着针对它编译其他语言。

这个话题经常在Hacker News上出现。

  • “我们现在拥有的JavaScript是客户端的汇编语言。我们不能轻易地改变它,但我们可以试着在这个基础上建立些好的工具。”- jonnycat

这就是我们的想法了,亲爱的读者们,我很享受我们有深度,有分寸而且合理的讨论。你们真是太棒了。

Comments (0)

Skip to main content