布兰登·艾奇谈JavaScript的流行
2009年11月29日 原创, 翻译
原文地址:http://weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html
看来(根据一位专家的说法是这样,不过还是感觉有点言不由衷),JavaScript最后真的流行起来了。
[此处是youtub.com中一段视频,可惜被"墙"了]
对我这个从小就呆头呆脑的人来说,这段视频像是咒语又像是玩笑。(这要看你是否跟我站在了相同的立场上:绿壳鸡蛋不就流行过吗?)
我搞不清楚为什么道格(Doug)要编故事。他并不在网景公司。他亲耳听到过我回忆JavaScript诞生的经过,我在Ajax大会的发言中也讲过了。难道是想混淆视听,想在Web开发人员中掀起一股提前讨论MicroHoo C#语言的风潮?
谁知道呢,要计较这些就没完了。不过,鉴于本周是我参与创立的mozilla.org 10周年,我打算讲一点历史。
正如我多次重申过的,而且Netscape的其他人也可以证明,我是因为Netscape要在浏览器中“实现Scheme”才被招聘进公司的。当时,至少负责客户端技术的汤姆·帕坎(Tom Paguin)、迈克尔·托伊(Michael Toy)和瑞克·谢尔(Rick Schell),以及一个叫马克·安德森(Marc Andreessen)的家伙认为Netscape应该在HTML中嵌入一种语言,一种源程序式的编程语言。而我这个新人要去说服“尖脑壳”的老板几乎是不可能的——实际上更多的则是他们在向我解释问题。
到底是不是要基于Scheme并没有定论,但Scheme确实是吸引我加入Netscape的一个原因。在此之前,我在SGI公司期间,尼克·汤普森(Nick Thompson)引导我学习了SICP(Structure and Interpretation of Computer Programs,《计算机程序的构造和解释》)。
当时真正需要的是一种有说服力的概念验证,也就是一个演示程序。在我交付演示程序之后,这个程序在极短的时间内就变为了既成事实。
没错,在加入Netscape后不久,我被调出服务器团队——由于人员不足,我在这个团队干了一段时间,在那里与麦库尔·吐温斯(McCool Twins)和阿瑞·卢奥托嫩(Ari Luotonen)有了一段时间不长但很快乐的合作;1995年下半年,阿瑞和我创建了PAC(Proxy Auto Config,代理自动配置)——的时候,Oak语言已经改名为Java,而Netscape正与Sun协商将该语言包含在Navigator中。
Netscape公司内部争论的最大焦点变成了:“为什么要包含两种语言?为什么不只用Java?”得到的回答是:必须有两种语言分别面向编程圣殿中的两类最不可能走到一块的开发人员:组件开发人员——这类人使用C++或(我们希望的)Java和脚本开发人员(爱好者或专业人员)——这类人编写直接嵌入在HTML中的代码。
至于是否使用已有的语言,而不发明一门新语言,也不是我说了算的。上峰的“军令”就是这门语言必须“看起来像Java”。这样,不仅排除了Perl、Python和Tcl,也排除了Scheme。后来,1996年,约翰·奥斯特豪特(John Ousterhout)前来推广TK时,还曾因Tcl错过机会而惋惜过。
谈不上自鸣得意,但我确实为自己吸收了Scheme式的一类函数和Self式的原型(尽管不那么主流)而感到高兴。至于Java的影响,特别是Date的Y2K bug和原始类型与对象类型(如string与String)差异的影响则是非常不幸的。
时光倒转回1995年春天:我记得在此期间见到了比尔·乔伊(Bill Joy),我和他讨论了垃圾收集的细节(card marking for efficient write barriers)。比尔一上来就完全理解了我们所说的一门易用的“脚本语言”与Java的关系,他还拿微软平台的VB与C++之间的关系作类比。据我所知,比尔是我们在Sun公司的支持者。
基普·希克曼(Kipp Hickman)和我在1995年4到5月间研究了Java,基普也开始写他自己的JVM。他和我编写了NSPR的第一个版本,作为他的JVM之下的可移植层。而我在5月中上旬创建Mocha的原型时,也将该版本用作了相同的目的。
比尔说服我们放弃基普的JVM,因为它会导致与Sun的JVM中的bug无法兼容(在那个时候可谓智慧的预言)。而此时此刻,Mocha已经通过在Netscapte Navigator 2.0(的初期测试版)中的快速原型和嵌入证明它自己。
之后的历史匪夷所思,让人难以接受。除此之外,应该说都是对历史的歪曲和调侃。JS在客户端打败了Java,只有Flash能与其竞争,而Flash又支持JS的一个衍生品——ActionScript。
现在再回到流行的问题上。其实谈不谈这个问题都无所谓。然而,那些散布于互联网的流行的Ajax库,却经常以被掰碎了、压扁了,然后再以链接形式挑出来的纯文本的形式存在。难道不可以共享吗?
有一种想法——很多人都建议过,最近连道格也打起了这个主意受到了不少人的质疑,最近一次发出质疑声音的人是道格——在可能将会非常长寿的script标签属性中嵌入“神秘的散列码”(crypto-hashes)。这是个好主意吗?
恐怕不是。一方面因为“神秘的散列码”理论上的完备性问题,另一方面则因为其广为人知的药饵攻击(poisoning attacks)。
还有一个主意倒是不错,这个主意我是先从罗布·塞尔(Rob Sayre)那里听说的:通过HTML5中script标签的share属性支持一种可选的“公认的URL”:
<script src="http://my.edge.cached.startup.com/dojo-1.0.0.js"
shared="http://o.aolcdn.com/dojo/1.0.0/dojo/dojo.xd.js">
</script>
如果浏览器首先下载了共享的URL,而且根据HTTP的缓存规则它依然有效,那么就可以使用缓存(及预编译)的脚本,而不必从src属性指定的URL中下载。
这就避免了散列药饵的问题。这个方案只要求内容作者保证src属性指向的文件与share属性指定的这个库的公认(或流行)的版本相同即可。不过当然,我们必须信得过相应的DNS。(Ulp.)
这个方案可以避免在script标签属性值中嵌入不可预测神秘的散列码。
欢迎大家就此问题给我留言。
好了,这次真的回到JavaScript流行的问题上了。我们都知道有些Ajax库的确流行。那JavaScript流行吗?很难说。有些Ajax开发人员表示(也证明)了对它的喜爱。但也有很多人骂它,也包括我在内也骂我。我依然认为JavaScript是C和Self草草结合的结果(或一个私生子)。我又想起了约翰逊博士(http://en.wikipedia.org/wiki/Dr._Samuel_Johnson)的那句话:“好的不是原创的,而原创的都不好。”
不过,这没什么。Web总要发展,否则只有死路一条。JS也一样,要不就不会有ES4了。说到ES4,很快将有下文。
Firefox 3好像也会流行的, 它的空间与时间性能测试预示了这一点。相关内容呢,我以后还会陆续地谈到。
为之漫笔(李松峰),本博客专注于Web前后端技术、移动平台开发技术、交互设计和技术翻译。声明一下,因为时常需要外出审稿,而且基本不带笔记本,所以有时可能会迟一点回复大家的留言。
是篇不错的JS史谈。
这类的文章自己平时看到的很少,国外的评论文章有点不大理解,因为我缺少相应的背景知识。我不是计算机专业的,不过想学一门编程语言,原因是可以在某种程度上实现自己的某些想法,不想老是寻找别人的软件,而且用起来不一定合乎自己的愿望。不知道,楼主能不能介绍一些呢,什么样的语言最可能满足我的想法,不要太多,能学好一种语言就不错了,毕竟任何一种语言要想学得通透一些都不是那么容易的,是吧?!
老实说,翻译完这段文字,我头脑里呈现的也是“支离破碎的断壁残垣”,而非一幅完整的图像。说到学习一门计算机编程语言,我感觉比学习一门外语也容易不到哪去。好在,学习编程语言,你可以随时跟计算机交互,不像学习外语那样必须与人交流。如果你想编写系统软件,那么C、C++、Java、C#这些语言,先学哪个都行;如果你想编写Web应用程序,恐怕就要从HTML、CSS、JavaScript这些客户端技术学起,然后过渡到ASP、PHP、JSP等服务器端脚本语言。当然,不管是系统软件,还是Web应用程序,做大了就要用到数据库,因此还必须掌握SQL语言。总之,系统语言、脚本语言和数据库语言必须都学一门才行。
松峰老师真是好人。这篇文章我以前翻译了一半(太监文啊,我愧对大家),本来今天晚上突发奇想想补上的,结果发现你在一年前就帮我还债了!太感谢了!
我的前半段翻译在此:http://hax.javaeye.com/blog/190436 ,松峰老师可以参考,特别是第一段关于视频的,呵呵。
给后半部分提点意见。
“除此之外,应该说都是对历史的歪曲和调侃。”
此句原文“The rest is perverse, merciless history.”
或可译为“之后就是乖僻无情的历史”,意思是NN2.0嵌入JS之后就是JS beat Java。
“最近一次发出质疑声音的人是道格”,这里翻译有误,增加hash属性正是Doug提出的(Doug的原文在yahoo blog上,现在已经找不到了),BE正是反对他。
crypto-hashes只是指密码学中的散列,没有“神秘的”含义啊。
“不可预测的散列码”(inscrutable hashcodes)我倒是认为可译为“神秘的散列值”,这里应该是指hash是人难以直观理解的。
“但也有很多人骂它,也骂我。”我认为此句的意思是“也有很多人骂它,包括我。”
@师俊谢我,我也要谢师俊了,呵呵。你指出的这几个错误很给力,多谢不吝赐教。以后有机会,还要当面请教。
[...] 所以我这篇“续完”实际上是厚颜无耻的把松峰老师的译文链接放在这里了:http://www.cn-cuckoo.com/2009/11/29/brendan-eich-talk-the-popularity-o-javascript-1294.html [...]
[...] 所以我这篇“续完”实际上是厚颜无耻的把松峰老师的译文链接放在这里了:http://www.cn-cuckoo.com/2009/11/29/brendan-eich-talk-the-popularity-o-javascript-1294.html [...]
看不太理解
Pair of sunglasses is tight! I have in the past and we offer a lower price, published a customer more in that theme, and now reviewed. Thank upstairs information.
Chaussures Christian Louboutin | Monday,22 March 2012 14:57
Thank you for the article, I saw after the enlightened, my idea like you, just not good at expression
I always like to read. I read everything.
Thanks for sharing this useful informaiton, I come to your site farily regularly, since I like your post very much.
I find this is a interesting blog , and it is very useful and I will be back .thanks for sharing this.
good post, it looks absolutely perfect, thanks for sharing it .
It is really a useful information,I learn many things from the post, so nice article,thank you for sharing it.
You had done a good job, so nice post, I agree with you . thanks for sharing this article.
Where to get the ghd hair straighteners, nearly everybody will recommend GHD British brand.This can be a outstanding brand in hair industry. You can aquire from official store or its branch stores.
skins, the case of sheep sheep, the case of the wolf is a wolf in accordance
your post is so useful and I am attracted by your creative writing skills. thanks for sharing it. I have bookmarked your bolg site.