阅读更多

1顶
0踩

编程语言

转载新闻 Dart 之于 JavaScript 正如 C# 之于 C++

2011-10-21 10:59 by 副主编 wangguo 评论(1) 有4575人浏览



在谷歌工程师拉尔斯·巴克(Lars Bak)的V8 JavaScript解释器颠覆了Firefox所宣称的速度这一背景之下,我们有理由相信,谷歌新的网络开发语言很可能与Smalltalk类似。但是这可能会引领网络走向一个截然不同的方向。在丹麦举行的网络开发者大会上,谷歌和Chromium开源开发团队的成员揭开了谷歌寄予厚望的新的、更为结构化的网络编程方法——Dart的神秘面纱。Dart的正常运行需要一个新的虚拟机,这就使得Dart处于与Java、Adobe Flash以及Microsoft、Silverlight竞争的地位。但是从结构上说,至少是现在,Dart将会更依赖于浏览器。

谷歌计划使Dart虚拟机作为浏览器现在使用的JavaScript引擎的补充。也就是说,它可以把Dart代码转变成JavaScript代码。谷歌尽量去回避关于Dart被嵌入所有的浏览器的可能性,不过在近日发表的一篇博文里,拉尔斯·巴克提及关于将Dart虚拟机整合到谷歌浏览器的问题,并明确表示:“我们将计划去探索这个项目。”

终于有了类

与C#和Java等更加结构化、面向对象的语言相比,JavaScript往往会有很多累赘;与Python、Ruby以及D等更加智能化的动态语言相比,JavaScript又显得比较冗长,无法快速地切入主题。因此随着时间的推移,JavaScript在“开放式网络”的分布式应用程序功能上的统治地位似乎有所动摇。而Dart的存在似乎正是为了弥补JavaScript的这些不足。

随着第一部Dart教程的问世,拉尔斯·巴克和他的开发团队从JavaScript的基础做起,加入了一些关键的Java元素并提高了解释器的潜在假设能力来使其变得更为简洁。另外非常关键的补充就是使用了真正的类结构以及Java开发人员所熟悉的类关键字。

JavaScript中有一些使用关键字函数的方法来使其偏向于面向对象。例如,我们可以声明一个恰好具有属性的函数,并且它的功能是作为一种方法嵌入其中,但问题是方法本身并不会得到重载而是每次都要重新创建,所以就要把方法作为一种附加方式添加到函数原型。或者,我们可以声明一个使用通用实例的对象,它可能要用常量来定义内部结构,然后我 们可以选择一个常量来为这个函数赋值,以使其具备变量的特征。或者我们可以假定该函数是对象的唯一组成部分,然后声明一个变量,把函数值赋给它。

但是这些方法并不够完美。许多由最新一代的JavaScript引擎例如V8和Mozilla的TraceMonkey等执行的任务,事实上就是把压缩了的繁琐的“垃圾代码”转变成相对简洁精确的代码。

所以从理论上说,由浏览器运行Dart虚拟机所导致的性能下降问题可以在代码方面得到补偿,因为这些代码对于JavaScript解释器来说更容易分析。但这仅仅是理论上。

Dart以一种大多数java程序员所熟悉的方式再次引入了类。并且其中的一些调整使得定义更加简洁;例如自反指示符this会被用在声明用户方法的内部(例如用Ball.throw(this.distance);而不用Ball.throw(distance); this.distance = distance;)。同时接口也支持创建用户属性和多个类的公用方法;还有如人们所期待的那样一个类实现一个接口。

仍是未知:事件的触发

有些JavaScript开发者反对的一个显著的结构变化是关系到上下文。JavaScript函数往往是粘贴在整个页面上的,尽管其中有些地方它应该是一个main()函数,但是大多数函数是由浏览器事件触发的,包括window.onload。在Dart中,每一个<script>元素都是一个自包含的上下文。类成员和变量被默认为是公有的(在Dart中没有“public”这个关键字),尽管对于Dart来说“public” 仅仅是脚本,而并非一个涵盖整个页面的作用域。

“在JavaScript中,跨多个脚本标签的声明在同一个命名空间里被组合在一起,”Sigmund Cherem 和Vijay Menon在文中写道,“在Dart中,在一个脚本标签中的代码无法直接访问定义在另一个中的代码。如果一个脚本希望从另一个不同的URL加载代码,那么它必须通过#import来导入。每个脚本标签必须定义自己的main()入口才能运行。

main()函数是DOMContentLoaded事件的事件处理程序。否则,我们不会从早期文档编制中看到任何关于Dart代码如何以JavaScript代码的方式回应浏览器事件的迹象。如果Dart没有做出任何改变的话,那么我们可以预见,在DOM加载前什么都不会运行,main()函数也就可以写为空的,而其它函数对事件做出响应——这和JavaScript所产生的情况一样糟糕。

但是可以想象,这个方案将会使多线程处理变得异常简单和直接:一个页面可以有多个脚本,而且虚拟机可以并行运行它们……再次强调,这仅仅是根据早期文档编制,从理论上来讲。目前浏览器尚未具备多线程解释器,Dart也并没有强大到包括JavaScript虚拟机,因此很难想像Dart将如何调用一个事实上并不存在的功能。

然而,从结构的角度来讲,关于Dart还有很多是值得期待的,并且我们有理由相信它将会支持甚至包括Internet Explorer在内的诸多浏览器。因此Dart将会如何冲击浏览器的HTML5应用程序(或者说是“本机应用程序”)仍有待观察。

VIA http://www.readwriteweb.com/hack/2011/10/dart-is-to-javascript-as-c-is.php

  • 大小: 49.3 KB
  • 大小: 50.6 KB
  • 大小: 22.1 KB
  • 大小: 21.4 KB
  • 大小: 19.6 KB
  • 大小: 57.8 KB
  • 大小: 60.1 KB
  • 大小: 58.2 KB
  • 大小: 5.9 KB
1
0
评论 共 1 条 请登录后发表评论
1 楼 musicbox95351 2011-10-27 17:44
就没觉得javascript多么的面向对象。就是个半成品。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • JWFD工作流系统源代码包(ECLIPSE开发版)

    最新更新 2010.12.12 JWFD v0.96.3开源工作流二次...修改了这个问题,在资源中新增加下载,本下载停止使用,非常抱歉 请下载 jwfd工作流源代码 for eclipse(BUG修正版) 地址 http://download.csdn.net/source/1299903

  • it's a test page

    it’s a test page one function add(){ echo 'hello world'; } add(); two that’s all

  • it's a test

    test~~~

  • It's a test

    it's a test 转载于:https://my.oschina.net/u/3428739/blog/879945

  • does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare

    在Android进行Junit单元测试的时候报以下错误:[2015-04-06 20:26:21 - adtest] adtest does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-library android.test.runner in its A

  • IDEA中单元测试@Test使用

    今天自己在写个简单的项目后,想和eclipse中一样进行@Test就可以应用,但实际根本用不了, 所以自己在网上学习总结如下: 在下面有自己认为更省事的方法,如果只是简单个别方法测试,感觉直接用那个就好(不需要下载各种插件) idea中需要下载的单元测试插件,单击File  ,然后找到Settings进行设置 , 如图找到插件(Junit Generator)    单击进行安装...

  • JavaEye博文JavaEye博文JavaEye博文

    JavaEye博文JavaEye博文JavaEye博文JavaEye博文JavaEye博文

  • jbpm+spring的web简单借款工作流实例项目

    因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/&lt;br&gt;说一下我的环境:...

  • jbpm+spring的web简单借款工作流实例项目4

    因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/&lt;br&gt;

  • jbpm+spring的web简单借款工作流实例项目7

    因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/&lt;br&gt;

  • jbpm+spring的web简单借款工作流实例项目5

    因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/&lt;br&gt;

  • JWFD v0.94工作流源代码 for eclipse(BUG修正版)

    由于JWFD的网站突然出现问题,无法访问,请大家原谅,我把JWFD的下载暂时上传到我的博客园的收藏里面,最新版的JWFD开发包在这里下载,包括更新的文档 最新下载地址 ...

  • jbpm+spring的web简单借款工作流实例项目33

    因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/&lt;br&gt;

  • jbpm+spring的web简单借款工作流实例项目6

    因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/&lt;br&gt;

  • jbpm+spring的web简单借款工作流实例项目8

    因为有点大所以分了8份 一个自己学习到现在的结果吧,自己做的一个完整的借款流程应用,主要是用到了SPRING,在整合的过程中遇到过不少问题。我的博客有一些说明http://yuyanshan.javaeye.com/&lt;br&gt;

  • JavaEye新闻月刊_-_2009年3月_-_总第13期

    JavaEye新闻月刊_-_2009年3月_-_总第13期.

  • 【转】国内主要工作流厂商分析

    尽管在企业应用中工作流应用的越来越多,但对国内的工作流厂商们来说,这并没有给他们带来期望中的快速增长,这并不奇怪,因为国内工作流产品基本上全部面 向开发者和系统集成商,解决的是编程问题,旨在...

  • 文字和图片,图片和图片底部对齐

    1.文字和图片,图片和图片底部对齐类似结构Html代码 div&gt;img src="" /&gt;textdiv&gt;或者div&gt;img src="" /&gt;img src="" /&gt;div&gt; 原本如果不对image定义其它样式,用img的初始样式就能达到这个效果.而我开发的页面中...

  • javaeye被黑

    javaeye被黑 大家看看

Global site tag (gtag.js) - Google Analytics