[Blah] JavaScript 2.0 - 沿着 java 走过的道路?
恕我愚钝,今天才好好的看了【这个】被小小的震了一下。颇多感想,不喷不行。
下为Blah贴,慎入。:D
老实说,我的第一印象是,欧卖糕!岂非Java耶?
我一直以为 JavaScript 是一个优美,小巧,简洁,轻量的 Script 语言。注意,是“Script”语言,而不是听起来就是一本正经板着个脸让人生畏“工业编程”语言。
可是,可是,可是……,为什么到处都充斥着静态类型,面向对象,继承,Interface,编译检查,等等等等的重型“工业设施”?那个柔韧小巧轻快的 For Browser 的 Script 到哪里去了?
为了寻找这些疑惑的答案,在网上 Google 了一下午,略微搜到了一些只言片语。
我认为JavaScript语言经历了许多不同的阶段:
1 我们需要为web页面写脚本的阶段(Netscape)
2 标准化阶段(ECMAScript的出现)
3 JavaScript并不是一个摆设阶段(Ajax的出现)
4 JavaScript成为一种编程语言
……
JavaScript将会被开发人员作为一门杰出的编程语言来看待——与Web开发脱离干系。
没错, JavaScript 变成一门杰出的语言,听起来确实很 cool 。可是……。
ActionScript 是一种基于 ECMAScript 的编程语言,用来编写 Adobe Flash 电影和应用程序。ActionScript 1.0 最初随 Flash 5 一起发布,这是第一个完全可编程的版本。Flash 6 增加了几个内置函数,允许通过程序更好地控制动画元素。在 Flash 7 中引入了 ActionScript 2.0,这是一种强类型的语言,支持基于类的编程特性,比如继承、接口和严格的数据类型。Flash 8 进一步扩展了 ActionScript 2,添加了新的类库以及用于在运行时控制位图数据和文件上传的 API。Flash Player 中内置的 ActionScript Virtual Machine(AVM1)执行 ActionScript。通过使用新的虚拟机 ActionScript Virtual Machine(AVM2),Flash 9(附带 ActionScript 3)大大提高了性能。
嗯,是的 Adobe 有了 MacroMedia 的灵魂附体,他不是一个人在战斗。在 Adobe 又将 AVM2 引擎源码传给 Mozilla 并与后者一起成功攻破 Tamarin 的大门之后,JavaScript 2.0 浑身散发着 MM 的光辉,终于如愿以偿的变成了 AS3 或者说 EcmaScript 4 ,这是多么有历史性的一刻。
嗯,没错,具有工业强度之后的 JavaScript 2.0 变成了一种面向对象的,支持基于类的编程特性的强类型语言。他变得更强度了,可是……。他不是也变得更复杂了么?
Javascript本来就是一种“杂凑”起来的语言,从一开始就集各家之长,没有太多“个性”。用个表达式可以说明Javascript的“来历”:
Javascript = C的语法风格 + List的面向函数的编程思想 + Perl的正则表达式 + Pascal的变量声明 + …
现在好了,这个表达式必须变成:
Javascript 2 = 原有Javascript + Java的类、接口和名字空间 + Pascal的类型声明 + Python的赋值语句和迭代器 + C++的符号重载和模板 + C#的yield + …
不知道其他人怎么想,但我的想法比较老土,仍然是:“ javascript 用于在 browser 中实现界面”,也就是说,javascript/ajax 是 gui 在 browser 上的延伸。作为一个 web 开发者,我们希望在写 Ajax 应用的时候,javascript 能提供更多的能量。我有很长的 wishlist ,但我意识到,这个 list 中的种种特性增强和 javascript 的这些语法改变之间并不存在什么必然的逻辑联系。
这些语法改变的背后,真正发挥作用的推动力,或许是“将 javascript 当作一个工业强度的编程语言来对待”,比如,对 adobe 来说,就是 server side javascript/actionscript 。adobe 的 as3 是很好,但,它改变语言本身加入这些特性,或许主要是因为 as3/flex 要在 server side 运行,也许这些特性确实很 cool ,确实也让语言本身变得更“坚硬”。但,这并不是我所期望的应用场景。
我承认我的层次很低,仍然徘徊在应用 javascript 的第一个层次,我只是想用 javascript 来做界面而已。那么回到这个层次,作为 browser 事实标准上唯一的 script 语言,我期望它“柔韧、小巧、轻快”,这个期望不过分,实际上现在的 javascript 就做得不错。我想要的是 make my life easy(想想 perl,awk 这些作为 script 的语言吧),简单是我对它最核心的期望。但,你把我的 script 语言搞这么复杂干什么?
我有一个很不合时宜的想象——如果 javascript 的目标是“被开发人员作为一门杰出的编程语言来看待——与Web开发脱离干系”,那么,它可能是想要成为这么一门语言——它既能运行在浏览器,又能运行在服务器;要对开发人员友好,要有很好的面向对象机制,静态类型,编译检查,包,接口一个也不能少;虚拟机也很重要,运行速度要尽可能的快,JIT是一个“杰出的编程语言”所必须的,搞一个,垃圾回收机制也要有,还要很完善;搞完这些,再搞一个基础开发库,文件,socket,webserver,常用的功能都要有……
……咳,打断一下,实际上,我们都知道,这样的语言很早就有了呢。它就是号称“write once runs everywhere”的 java 。莫非 javascript 2.0 以及之后的目标,莫非就是要变成现在的 java ?
时代的车轮滚滚,方向盘反正也没握在我的手上,我大概也只能用自己的 foot 来投票了。
ok,javascript ,沿着 java 走过的道路,前进!


Comments
AS3,JS2都向Java靠拢了,Java7搞了个无比丑陋的闭包语法,残念
看来还是静态OO深入人心啊
大家不觉得Adobe的ActionScript/Apollo/Flex在重复Java吗?我跟我的朋友说过,当大家觉得JavaScript可以再做这个、做那个的时候,它就开始慢慢变成另一个Java了。就象我们现在有了Linux/BSD/OpenSolaris一样,我们还会有JVM/CLR/AVM的,这个世界就是这样。
@dcaoyuan,完全赞同你的看法——javascript为什么就不能“do one thing, do it good”的,做好“浏览器脚本”这份前途远大的职业呢?
说得好!KISS 才是王道。
但为什么有点规模的大公司就喜欢把简单的东西搞复杂呢!难道是商业目的?
P.S “C的语法风格 + List的面向函数的编程思想” ??
是 Lisp 吧。
坐井观天
IT已经doesn’t matter了,随他们去折腾吧。
[...] Adobe 的战略布局可谓深谋远虑,但百密一疏,问题最终还是出在了战术层面—— ECMAScript4 小组的自我感觉过于良好,在扩大 “ ActionScript 化” 的成果之余,又往里夹带了太多花哨却不实用的私货 (或许 google 和 opera 的前卫分子对此亦有贡献)。最终出台的标准果然变成了一个几乎包含所有计算机语言特性的庞然巨物,整个业界为之哗然[看这里],相关机构的威信也因此大大受损。 [...]
凡是有公司背景的语言, 基本上没一个好东西, 我说的是语言产品的质量
比如: Java, C#, ActionScript, JScript
有一个社区为背景的语言往往人们很喜欢用, 而且很好用
比如: Python, Ruby, Perl, C
这些大公司永远都只会用屁股思考
Write a Comment