新足迹

 找回密码
 注册

精华好帖回顾

· 不知道还赶的上活动不?——老鸭粉丝汤 (2007-7-3) 思思妈妈 · 悉尼两天半---4 楼更新 (2009-11-24) 南京萝卜
· 外审 内审 财务 - 我走过的职业道路 (Manage Up Skills#151) (2008-9-26) loushenghong · 色与味的终极挑战:翡翠水晶虾饺 (2012-11-15) 河水洋洋
Advertisement
Advertisement
查看: 1626|回复: 18

Dart 之于 JavaScript 正如 C# 之于 C++ [复制链接]

发表于 2011-10-21 15:59 |显示全部楼层
此文章由 yuba 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 yuba 所有!转贴必须注明作者、出处和本声明,并保持内容完整
在谷歌工程师拉尔斯·巴克(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应用程序(或者说是“本机应用程序”)仍有待观察。

http://www.readwriteweb.com/hack ... ascript-as-c-is.php
Advertisement
Advertisement

2010年度奖章获得者

发表于 2011-10-21 16:15 |显示全部楼层

google chi shi qu

此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
JQuery 之于 JavaScript 正如 C# 之于 C++

发表于 2011-10-21 20:51 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2011-10-21 15:15 发表
JQuery 之于 JavaScript 正如 C# 之于 C++


这个好象不太那个
JQuery主要是管DOM那块,DOM那块对javascript来说只是一小部分内容

发表于 2011-10-21 20:57 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
javascript里是没有类,那是优点还是缺点还很难说。
头像被屏蔽

禁止访问

发表于 2011-10-21 21:26 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2011-10-21 16:15 发表
JQuery 之于 JavaScript 正如 C# 之于 C++


严重不同意。JQuery 之于 JavaScript 正如 VC++ 之于 C++

发表于 2011-10-22 09:41 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
传说中的JavaScript++? 是有这么点味道。
Advertisement
Advertisement

发表于 2011-10-22 12:52 |显示全部楼层
此文章由 psaux 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 psaux 所有!转贴必须注明作者、出处和本声明,并保持内容完整
javascript#

发表于 2011-10-22 13:40 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
coffeescript

发表于 2011-10-25 22:38 |显示全部楼层
此文章由 xji 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xji 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Dart之于Javascript正如Dart之于屎。也就是说,Javascript就是屎。那么垃圾的语言还这么流行,还有那么多封装在其上的语言,真可谓IT史上奇迹。上世纪那么多天才,怎么没一个出来变革一下web客户端脚本?

2010年度奖章获得者

发表于 2011-10-25 22:44 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Dart 就是一坨还冒着热气的屎。

发表于 2011-10-26 08:59 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这两年javascript类型的数据库和server端开发已经很吃香了
Advertisement
Advertisement
头像被屏蔽

禁止发言

发表于 2011-10-27 18:54 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
有没有这样的js库?

我把c#的对象里的值变成js的object里的值,

然后postback的是js obj里的值,不是form里的。
而js类相对于那个dom,不管是control还是mvc都无所谓

event操作最后都修改js obj里的值。

js obj可以操作dom

发表于 2011-10-27 23:45 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
The c# function of json() 转换 c# object to jsobject
With Ajax, u pass json object to c#, c# can automatically 转换 json data to c# object.

Very easy with asp.net mvc

[ 本帖最后由 典 于 2011-10-27 22:46 编辑 ]
头像被屏蔽

禁止发言

发表于 2011-10-28 12:10 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
举个实际的例子:

HTML里面一个textbox,输入字符的时候有autocomplete功能,

autocomplete的dropdown里面是个表格。
每选择一行,实际是选择3个值。
textbox里面text是其中2个值的并在一起。
这样postback是4个参数。

c#里面,对应的model包含5个属性,4个是在partialview里面用的,
第5个是根据postback的值去查数据库的。
autocomplete的dropdown显示里面没有这第5个参数。

现在这些都是手工做的,用hidden什么的。

我期望是这样完成:

partialview里面只有一行,把c#的model object
变成字符串放html里面,不管是jason还是编码以后的字符串

然后把那个textbox用jquery绑定上一个js类。

这个js类完成以下事情
1. 把c#转过来的值给读出来。
2. jquery ui autocomplete的设置。
    并且设置callback来update那4个值
3. postback的时候那个textbox就不管了。
    要么postback 4个值,要么把更新的值编码,
    服务器端依旧只看到一个更新了以后的c# object.
头像被屏蔽

禁止发言

发表于 2011-10-28 12:14 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
在页面上对应的那个元素也许根本不是输入元素。

比如一个动态的表格,虽然每行都有input,
但是在它没有行的时候,就是个div+table.

这时候如果没有额外处理,postback是不会有任何东西的。

比较理想的情况下,希望能够postback一个信息,
表示 动态输入的表包含0个item.
头像被屏蔽

禁止发言

发表于 2011-10-28 17:45 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
knockout.js, 找到了
Advertisement
Advertisement

发表于 2011-11-9 15:05 |显示全部楼层
此文章由 yuba 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 yuba 所有!转贴必须注明作者、出处和本声明,并保持内容完整
和往年一样,今年的编程语言中同样出现了一匹黑马:Google的Dart语言,它上个月首次进入榜单,排名第107位,这个月竟然蹿升到了63位。

发表于 2011-11-9 23:18 |显示全部楼层
此文章由 o2h2o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 o2h2o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 xji 于 2011-10-25 22:38 发表
Dart之于Javascript正如Dart之于屎。也就是说,Javascript就是屎。那么垃圾的语言还这么流行,还有那么多封装在其上的语言,真可谓IT史上奇迹。上世纪那么多天才,怎么没一个出来变革一下web客户端脚本?

除去js 比较恶心的地方
js 语言还是非常dynamic的
js 大家都觉得不行最大的原因 他和 dom 太密切了
现在有很多js的 framework 纯粹从语言上面来弄, 和dom 一点都不相关
例如 underscore.js
commonjs

如果纯粹按照 js 的模式来写 还是可以写成封装不错的 代码的
例如module 模式啥的

最近发现一个框架 sencha js,非常的流畅 (据说他是用js 自己生成了一个类dom 的object,而不是直接来弄dom,我还没研究过源代码,所以只能说据说,不过ui 流畅的神奇,特别是在 mobile 上面)
js 至少能存活 10年, 那么多web page,不可能全废掉的

最新版本 beta 的firefox 的js engine 可以用 30 fps的速度decode h.264 来replay

js 函数很容易的可以作为指针进行 回调处理
所以 并行处理上面 很有优势, 不会阻塞进程

虽然很多语言都可以,但是 js 貌似最容易

[ 本帖最后由 o2h2o 于 2011-11-9 23:49 编辑 ]

发表于 2011-11-9 23:41 |显示全部楼层
此文章由 c2j 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 c2j 所有!转贴必须注明作者、出处和本声明,并保持内容完整
js玩的好的都是高人啊,思路绝对清爽,我平时写的js都乱糟糟的,太灵活了

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部