ISA:JavaScript和HTML已存在多年。最近有什么变化使HTML5对跨平台开发如此有效? MH:首先,在过去五年里,JavaScript的速度大幅提升,快了100倍(参见图2),这在很大程度上得益于JavaScript JIT的出现。由于Web应用复杂性和成熟度的显著增加,JavaScript JIT成为一项不可或缺的技术。在JavaScript性能方面,2011年的最新Internet Explorer*版本比2001年的Internet Explorer快了100倍以上。其次,通过HTML5还突然引入了非常多的新功能。这可能是自浏览器推出以来,HTML实现创新最多的一次。现在,HTML的渲染方式已经与过去完全不同。在HTML5开始得到广泛采用之后,其性能有了显著提升,新功能也不断增多。 Sunspider runs per minute: 每分钟运行Sunspider的次数 Internet Explorer JavaScript performance improves 100x: Internet Explorer JavaScript性能提升了100倍 图2:Luke Hoban,Microsoft 在技术采用方面,我观察到了另一个值得关注的趋势,IT部门日益发现HTML5极具吸引力,这是因为人们会在工作中使用各种不同设备。在如今的业务环境下,所涉及的智能手机、平板电脑和便捷式电脑达数百种之多。HTML5是唯一的可以让IT的应用跑在所有的设备上的方案。另外,公司也无力针对每种设备类型开发相关应用并提供支持。现在,基于HTML5的响应式设计模式不断出现,这种设计模式能够使内容适应设备的显示屏尺寸。这些全都是HTML的重要组成部分,因为利用CSS和JavaScript您能动态地适应不同的设备。 ISA:由于没有静态类型化功能,JavaScript一直因其仅局限于小型应用程序而饱受批评。这种批评有道理吗? MH:JavaScript将来会提供类、模块及类型化功能。负责下一个JavaScript版本相关工作的ECMAScript*委员会正在研究类的问题,类有利于维护工作。Java有类,C++也有类。JavaScript采用基于原型的继承模式,这将允许您实现类,但它不强制要求以某种特定方式实现类。Java有自己针对类的对象模式;目前JavaScript语言没有采用特定的类模式。它使让用户能够实现自己的类版本。 出于软件工程的原因,在有大量开发人员参与项目的情况下,人们可能需要特定的类模式。对于大型项目,您可能需要做一些限制,例如需要定义特定的编码原则等等。如果每个人都以自己的方式来使用JavaScript的话,其灵活性有可能会产生负面作用。 让我们类比一下老早以前,FORTRAN等编程语言都使用GOTO语句。但在20世纪70年代,Edsgar Dijkstra和其他人士发现以非结构化方式使用GOTO语句有害无利。因此,程序员被要求使用结构化的编程原则,而不要随意使用GOTO语句,从而使编程语言和应用更易于理解和维护。而在JavaScript变为低级语言,并在其基础上能够实现大量高级语言时,同样的事情也正在发生。JavaScript已变为所谓的“Web的汇编语言”。 ISA:您能给我们举一个这种情形的例子吗? MH:最近,利用限制和结构方面最令人振奋的例子,是Mozilla正在开发的一个名为 “asm.js” 的项目,以及另一个有关联的名为“Emscripten”的项目,这基本上是一个将 LLVM位码转换为JavaScript 和HTML5 API的编译器。(LLVM是Apple*公司赞助的一个项目,旨在为C/C++及其他语言开发低级虚拟机编译器基础架构和语言前端)。Emscripten实质上是将C++转换为JavaScript。 Asm.js是Emscripten的一个可选目标,可以提供近乎原生的性能,与经优化的原生代码相比,开销通常降低2倍,而目前的全JavaScript则约为5倍。虽然JavaScript使用动态类型,但asm.js的要求(如类型推断和注释)仍然完全基于JavaScript规范。使用asm.js,用户能够编写被证明是静态类型的代码。因此,在装载时,用户能够验证代码实际上是静态类型。提前编译器能够生成极其高效的代码而无需进行额外检查,这与动态类型语言不一样;这有助于同时提高灵活性和代码效率。 如我们所说,这些语言都在不断发展演变,将能够把大段计算密集型代码(如性能库和游戏引擎)转换为JavaScript,并使其可应用于全球每一个设备成为可能。JavaScript正在成为高级语言的目标语言。 ISA:目前有哪些与JavaScript相关的语言项目? MH:现在有一种叫CoffeeScript*的语言,Microsoft也在开发TypeScript*语言,它是JavaScript的超集。Google的Dart*是一种采用类概念的新语言,也编译为JavaScript。我不认为有人能让整个Web都更换Web浏览器的主语言。然而我相信,各种语言的优异特性汇集到一起,将会对JavaScript规范产生影响,而这些特性也将会添加到规范中。这基本上实现了演变、向后兼容性以及增量改变。 ISA:英特尔直接推动了HTML5和JavaScript的发展。您能否给我们介绍一下这方面的相关工作? MH:英特尔在并行技术领域一直居于领先地位,并行性使HTML5能够满足多核的要求。您需要利用并行性提高响应速度和电源利用率。我们对Firefox*布局引擎的CSS规则匹配实现了并行化,使其具有可扩展性。从编程语言的角度看,HTML5有一个称作“Web Workers”的并行性API。它非常适用于粗粒度的后台线程,但如果您希望执行大量小型并行[任务],Web Workers则无法胜任。英特尔一直与Mozilla在并行阵列方面开展合作;我们在英特尔实验室的同事首先建立了它的原型。目前我们正在努力解决实施中的所有问题,以使其进入到ECMAScript,即JavaScript的官方语言规范中。 另外,我们还与Mozilla和Google进行合作,以确保现在已有(如Sandy Bridge和Ivy Bridge等等)的SIMD矢量功能可以真正采用JavaScript进行编程。也就是说,如果您的JavaScript代码对数据进行并行的操作,那么该代码会真正实现矢量化,同时开发人员使用这些功能时能够保证代码的执行。这些功能终将进入标准之中。 |