Javascript诞生记

1.

二周前,我谈了一点Javascript的历史。

今天把这部分补全,从历史的角度,说明Javascript到底是如何设计出来的。

只有了解这段历史,才能明白Javascript为什么是现在的样子。我依据的资料,主要是Brendan Eich的自述

2.

上一篇文章写道:

"1994年,网景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第一个比较成熟的网络浏览器,轰动一时。但是,这个版本的浏览器只能用来浏览,不具备与访问者互动的能力。......网景公司急需一种网页脚本语言,使得浏览器可以与网页互动。"


网页脚本语言到底是什么语言?网景公司当时有两个选择:一个是采用现有的语言,比如Perl、Python、Tcl、Scheme等等,允许它们直接嵌入网页;另一个是发明一种全新的语言。

这两个选择各有利弊。第一个选择,有利于充分利用现有代码和程序员资源,推广起来比较容易;第二个选择,有利于开发出完全适用的语言,实现起来比较容易。

到底采用哪一个选择,网景公司内部争执不下,管理层一时难以下定决心。

3.

就在这时,发生了另外一件大事:1995年Sun公司将Oak语言改名为Java,正式向市场推出。

Sun公司大肆宣传,许诺这种语言可以"一次编写,到处运行"(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。


网景公司动了心,决定与Sun公司结成联盟。它不仅允许Java程序以applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将Java作为脚本语言嵌入网页,只是因为这样会使HTML网页过于复杂,后来才不得不放弃。

总之,当时的形势就是,网景公司的整个管理层,都是Java语言的信徒,Sun公司完全介入网页脚本语言的决策。因此,Javascript后来就是网景和Sun两家公司一起携手推向市场的,这种语言被命名为"Java+script"并不是偶然的。

4.

此时,34岁的系统程序员Brendan Eich登场了。1995年4月,网景公司录用了他。

Brendan Eich的主要方向和兴趣是函数式编程,网景公司招聘他的目的,是研究将Scheme语言作为网页脚本语言的可能性。Brendan Eich本人也是这样想的,以为进入新公司后,会主要与Scheme语言打交道。


仅仅一个月之后,1995年5月,网景公司做出决策,未来的网页脚本语言必须"看上去与Java足够相似",但是比Java简单,使得非专业的网页作者也能很快上手。这个决策实际上将Perl、Python、Tcl、Scheme等非面向对象编程的语言都排除在外了。

Brendan Eich被指定为这种"简化版Java语言"的设计师。

5.

但是,他对Java一点兴趣也没有。为了应付公司安排的任务,他只用10天时间就把Javascript设计出来了。

由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript写出来的程序混乱不堪。如果Brendan Eich预见到,未来这种语言会成为互联网第一大语言,全世界有几百万学习者,他会不会多花一点时间呢?

总的来说,他的设计思路是这样的:

  (1)借鉴C语言的基本语法;

  (2)借鉴Java语言的数据类型和内存管理;

  (3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;

  (4)借鉴Self语言,使用基于原型(prototype)的继承机制。

所以,Javascript语言实际上是两种语言风格的混合产物----(简化的)函数式编程+(简化的)面向对象编程。这是由Brendan Eich(函数式编程)与网景公司(面向对象编程)共同决定的。

6.

多年以后,Brendan Eich还是看不起Java。

他说:

"Java(对Javascript)的影响,主要是把数据分成基本类型(primitive)和对象类型(object)两种,比如字符串和字符串对象,以及引入了Y2K问题。这真是不幸啊。"

把基本数据类型包装成对象,这样做是否可取,这里暂且不论。Y2K问题则是直接与Java有关。根据设想,Date.getYear()返回的应该是年份的最后两位:

  var date1 = new Date(1999,0,1);

  var year1 = date1.getYear();

  alert(year1); // 99

但是实际上,对于2000年,它返回的是100!

  var date2 = new Date(2000,0,1);

  var year2 = date2.getYear();

  alert(year2); // 100

如果用这个函数生成年份,某些网页可能出现"19100"这样的结果。这个问题完全来源于Java,因为Javascript的日期类直接采用了java.util.Date函数库。Brendan Eich显然很不满意这个结果,这导致后来不得不添加了一个返回四位数年份的Date.getFullYear()函数。

如果不是公司的决策,Brendan Eich绝不可能把Java作为Javascript设计的原型。作为设计者,他一点也不喜欢自己的这个作品:

"与其说我爱Javascript,不如说我恨它。它是C语言和Self语言一夜情的产物。十八世纪英国文学家约翰逊博士说得好:'它的优秀之处并非原创,它的原创之处并不优秀。'(the part that is good is not original, and the part that is original is not good.)"

(完)

时间: 2024-11-01 10:31:48

Javascript诞生记的相关文章

设计案例分析:QQ公益图标诞生记

永不熄灭的爱心图标--腾讯公益月捐计划 "QQ首席图标"诞生记 腾讯"月捐计划"倡导爱心人士,通过每月小额捐款的形式,长期关注和支持公益项目.并和亿万爱心网友一起,每人每月1份爱,点滴付出,汇成爱海,形成强大公益合力,随时帮助需要帮助的人! "QQ公益图标"正式亮相,让QQ用户轻松实现献爱心的公益愿望. "月捐计划"的icon设计是一次重大的挑战,因为赋予它的意义非凡,被点亮后,将排列在迷你资料卡上的第一位,是QQ用户的&qu

张小龙的微信帝国诞生记

2010年11月20日这一天,在广州,一个六七人的产品小组正式组建.2011年10月1日,这个产品小组的一款产品登上了中国移动互联网即时通讯工具软件第一的位置. 这款产品叫"微信",主导了这款产品的人是张小龙,时任腾讯广州研发部总经理. 短短三年时间,微信几乎已经成为中国每一款智能手机上必然会被安装的应用,微信能有此影响力,不惟有腾讯这棵"参天大树"的庇护和输送养料,亦有赖于微信产品团队对产品的打磨.把控.而一直以来,张小龙,这个主导了中国时下最火的社交应用的中年男

云上开发者全新体验——OpenAPI Explorer诞生记

摘要: 本文的整理自2017云栖大会-南京峰会上阿里巴巴资深开发工程师黄俊华的分享讲义,讲义主要对于云上的开发工具进行了详细的介绍,先后介绍了SDK.API文档.Cli调试工具以及OpenAPI的相关知识,并着重对于OpenAPI Explorer进行了介绍. 在2017云栖大会-南京峰会上,阿里巴巴资深开发工程师黄俊华做了题为<云上开发者全新体验--OpenAPI Explorer诞生记>的分享.他在分享中对于云上开发工具中的SDK.API文档.Cli调试工具以及OpenAPI的相关知识进行

为并行处理和云计算而生 Julia诞生记

导读:本文探讨了Julia语言的开发缘由以及它的新特性.笔者认为一门新语言的诞生势必会掀起一阵新的旋风,开发者在享受它带来乐趣的同时也在为它的存在价值而争论不休,究竟Julia能否给开发者带来新的福音呢?让我们来一同走进它: 为什么要创建Julia编程语言? 用一句话来说,因为我们求知若渴.不断追求. 我们拥有Matlab核心用户,有擅长Lisp方面的黑客,Pythonistas和Rubyists方面的专家也有不少:此外,还有一些是Perl方面的大牛,有一部分开发者在我们刚略懂皮毛前便使用了Ma

心情娃娃诞生记(恋爱娃娃)

六.恋爱娃娃 最后,让我们以一个浸沐在爱心中的娃娃来结束这篇文章. 1.打开最初的娃娃文件,另存为Loving.psd,将前景色设为RGB(255,134,197),用这种娇嫩的粉色填充图层Face的不透明区域. 2.将Eye L和Eye R拼合,复制,把副本向下移动,同时降低Eye L层的不透明度,在Eye L层中载入副本选区,删除,取消选择后删除副本层,恢复Eye L的图层不透明度.(图24) 图24 3.删除mouth层,复制Face层两次,将两个副本层填充不同的颜色以作区别,再分别做不同

Motion新视界:Qzone5.0大片儿诞生记

  为了让用户更加直观形象地感受产品的全新特征,我们特别定制了重量级的宣传大片儿.在设计风格的设定上,以当前最流行的 "Motion Graphic" 的形式,全方位凸显我们新版的酷炫范儿,可谓"动若脱兔,静若处子",立体化震撼你的视听感官. http://v.qq.com/page/c/p/v/c0144xtlcpv.html?start=1 那么,如此重量级的大片儿又是如何诞生的?设计师又是怎样披荆斩棘,攻克重重难关,为大家呈现饕餮盛宴的呢?接下来将为大家解读大

安全产品经理的思维模式 ——网站群治理平台诞生记

从红头文件到落地产品,一个备受青睐的安全产品是如何诞生的呢? "网站群治理平台叫好叫座,因为我们经历了一个从需求提炼到问题解决.从用户需求到用户体验的全过程."作为网站群治理平台的产品经理,来自WebRAY 的李春鹏谈起这个产品来非常自豪,因为"确实解决了问题,受到了用户的广泛好评." 一个文件引发的深度思考 "网络里到底有多少网站和业务系统?这些网站是否安全.合规?对于大量网站的管理如何才能便捷有效?"这些问题一直困扰着信息中心的运维人员.但是

JavaScript:诞生只用了十天,名称是为了更好推广

JavaScript除了提供一个非重度开发者也能使用的程式语言外,也是提供开发者由Java这类静态型别转至动态型别开发语言的一种选择,但是现在Mozilla所推得Asm.js,又将JavaScript带回到了静态型别. 第一天Modern Web大会由JavaScript之父同时也是Mozilla基金会共同创办人Brendan Eich(音:艾可,德国姓)首先拉开序幕,主讲第一场主题演讲Javascript at 20 Years,他说他在1995年仅花了10天就开发出Javascript,在会

一个完美数据迁移解决方案诞生记

随着数据正在逐渐成为企业的核心资产,数据的存储.迁移成为企业时刻关注的问题.据Gartner统计数据表明,95%的受访企业都 认为数据迁移是个"硬骨头",让人头痛却又不得不面对.根据华为对业界的用户数据迁移行为的深入分析也发现,有接近38%的数据迁移需求源自于用户对IT系统服务器或是存储阵列的设备更新升级;超过11%的数据迁移需求源自于用户不得不对 长时间超负荷运营的IT设备进行维护操作;与此相当的是,也有超过11%的用户为了应对业务激增所面临的压力,必须对IT系统进行性能调优,从而导