主题:【原创】新时代新潮流WebOS 【1】 -- 邓侃
炫而且性感。
手机OS与PC OS是否应该有所区别,区别在哪里,尤其手机OS能否简化手机应用开发的负担,尤其是跨平台的porting负担。
借用Web技术,是实现这个目标的可能的实现手段之一。但是这里争议很多。
刚看的有点云。。。
呵呵。
严格来说,DOM模型也不是俺的特长,俺在此乱弹12。
1.RENDER ENGINE中的DOM纯粹是描述层次结构关系。鼠标事件到节点的对应是DOM树的搜索还是其它现在不好下结论 --- WEBKIT中是否有其他的重要的"空间"数据结构?不好意思,回来后俺有一段时间没有看源代码(chrome)了.
2.CHROME对输入事件的处理有一定的"优化".考虑到第三方插件,这个问题更加复杂.
3.俺支持开发效率 > 运行效率的观点.解放生产力毕竟更重要.
被NOKIA收购了
【16】作为浏览器方言的JavaScript
Figure 1. The Tower of Babel
Courtesy http://www.worldofanarchie.com/portfoliof/gbyef/tower-of-babel.jpg
旧约-创世纪-第11章 1-9,(Genesis [11:1-9])
“1 那时,天下人的口音,言语,都是一样。 2 他们往东边迁移的时候,在示拿地遇见一片平原,就住在那里。 3 他们彼此商量说,来吧,我们要作砖,把砖烧透了。他们就拿砖当石头,又拿石漆当灰泥。 4 他们说,来吧,我们要建造一座城和一座塔,塔顶通天,为要传扬我们的名,免得我们分散在全地上。 5 耶和华降临,要看看世人所建造的城和塔。 6 耶和华说,看哪,他们成为一样的人民,都是一样的言语,如今既作起这事来,以后他们所要作的事就没有不成就的了。 7 我们下去,在那里变乱他们的口音,使他们的言语彼此不通。 8 于是,耶和华使他们从那里分散在全地上。他们就停工,不造那城了。 9 因为耶和华在那里变乱天下人的言语,使众人分散在全地上,所以那城名叫巴别(就是变乱的意思)。”
Douglas Crockford以创世纪通天塔的故事为导言,开始了他对JavaScript的辩护。关于通天塔的读解有多种,一种读解是,神在警告人类不要狂妄,学会谦卑。另一种读解是,这段话解释了方言的起源,没有其它隐喻。Douglas把这段故事和计算机语言联系在一起,他说,“程序的核心问题在于驾驭复杂性。在应对复杂多变的需求时,如果一个程序语言不能有助于驾驭复杂系统,那么结果就是混淆不清,接踵而至的就是失败。” (http://javascript.crockford.com/popular.html)
几十年来,人们设计了形形色色的计算机语言,为什么不设计一种广为接受的,一统天下的语言,这样人们就可以把精力集中到这种语言的普及教育,并且设计开发各种工具,使这个世界通用语言变得功能更加强大,使用更加简便?Douglas说,“我们已经尝试过了,但是所有努力无一不以失败告终”。究其原因,当一个语言要处理的应用越来越多时,需要赋予这种语言的功能也就越来越多,于是语言本身就越变越复杂,于是语言就越变越晦涩。
“所以,我们就看到大量的专门的语言出现。这些特殊语种在应付特定范围的任务时,非常有效,这就足够了。当人们需要完成特定任务时,有合适的语言作为工具,这是天赐之福”。“语言设计的艺术在于知道如何取舍。一个好的语言所拥有的诸多功能,能够和谐地互为补充共同工作。一个好的语言不仅能够帮助我们更好地理解问题,并且有益于找到解决方案的最佳表述方式。”
“一个好的语言的功能并不追求包罗万象,而是由有限的功能所组成。但是,哪些功能是有用的,哪些可以舍弃,却众说纷纭,没有统一意见。吸收哪些功能,让语言变得更加强大,这是永无休止的争论议题。并不是说功能不重要,问题在于我们不知道每个功能有多重要。”
Figure 2. Douglas Crockford
Courtesy http://ericmiraglia.com/assets/crockford-performance2.jpg
这位Douglas Crockford是JavaScript最知名的捍卫者,同时设计了JSON,JSLint,JSMin等等与JavaScript相关的构件和辅助工具。JavaScript的发明人Brendan Eich盛赞他是Lambda编程和JavaScript的精神领袖。Doug不仅学问精湛,而且文采飞扬。Doug对于语言有广泛的研究,其中特别热衷于Blissymbol的推广。
二战时犹太人Charles Bliss逃难到了上海,在这期间他试图学习中文。一方面他认识到象形文字的优势,同时认为要记住数以万计的中文字,实在是一件难度很大的任务。于是,他发明了几千个象形符号,以此为基础,通过组合这些基本的象形符号来表达复杂的概念。这就是Blissymbol的由来。Blissymbol不仅可以表达任何复杂的思想,而且非常容易学,甚至“比学习自己的母语还要容易”。Doug热衷于Blissymbol,同时对中国也十分友好。
关于JavaScript,Doug写到,“大多数程序语言死于晦涩。只有少数语言,能够从一个项目组或者一个公司的试验品,扩散出去,吸引追随者。只有极少数能够成为真正重要的语言。一门语言能否变得重要,有两条途径。第一个途径是体现某些重要的编程思想,或者提供实践这些思想的平台。Smalltalk和 Scheme就是通过这个途径走向成功的范例。虽然使用这些语言的人并不多,但是众口一词的评价是,它们的设计充满睿智,即便这种设计并不迎合时尚。虽然它们本身并没有吸引很多使用者,但是对于未来的语言设计却具有深远的影响。另一个使一门语言变得重要的途径,是因为拥有众多用户而变得重要。在程序员选择编程语言时,需要考虑的因素很多。但是用什么语言来编写浏览器脚本却无需左顾右盼,因为,至少目前而言,浏览器能够接受的编程语言,别无选择,只有 JavaScript。”
这真是一段坦荡得让人吃惊的评论。JavaScript之所以重要,完全是源于它是众多浏览器唯一接受的语言。换而言之,如果没有这样的垄断地位,JavaScript也许就不会拥有如此众多的用户,没有众多的用户,而且也没有新颖的编程思想作为灵魂,JavaScript或许就不再是一门重要的语言。
Python,Ruby等等语言是否能够替代JavaScript的地位呢?从技术上讲,是完全可能的。为什么JavaScript会占据垄断地位呢? Doug的解释是这样的,与前面的论述一样,坦荡得令人佩服。
“ 为什么这样一个有着明显缺陷的语言,会成为Web唯一的编程语言呢?Brendan Eich在Netscape任职的时候,成功地让他那个婆婆妈妈的领导,认识到Navigator浏览器需要一个脚本语言,而且只有重新发明一门新语言才能胜任浏览器脚本这个工作。于是,一门新语言就开始匆匆忙忙地设计,匆匆忙忙地实现,而且压根就没有考虑是否能够延用现有的其它语言,去担当浏览器脚本这个工作。事后不久,微软的IE浏览器项目组急于争夺Netscape的市场份额,他们逆向复制了Netscape的语言,全盘照抄,泥沙俱下。其它浏览器开发商也追随微软的做法,盲目紧跟。并没有什么标准强制浏览器必须实现JavaScript,但是JavaScript无意中成为各个主流浏览器的唯一的通用的脚本语言。没有谁仔细深入地审视过这门语言本身,以及它所针对的问题范畴,也没有甄别它是否能够称职地解决这些问题,更谈不上设计是否完备。 Netscape仓促中捏合了这门语言,然后它被复制到其它浏览器中去。当我们回顾JavaScript产生的背景,以及它成为事实上的Web编程语言的标准的整个过程,我们有理由相信这门语言一定糟糕透顶。”
“尽管JavaScript存在惊人的缺陷,当我们深入分析这门语言的时候,会发现其实它的内核,具有非常优秀的品质。当我们剥去污秽的外壳,JavaScript的内里,是富于表现力的,功能强大的编程语言。这门语言被出色地应用到很多Ajax函数库里,操控XML-DOM,支持Web页面的交互,提供应用服务的平台。Ajax之所以流行,是因为JavaScript不仅能够完成任务,而且表现出色,令人惊讶。”
在Doug看来,JavaScript的精髓在哪里呢?在“JavaScript, the Good Parts” (published by O'Reilly) 这本书的第10章,Doug列举了三条,
1.Functions as first class objects
作为一类对象,JavaScript的函数可以像数值或者字符串那样,被动态地创建,存储,传输以及返回(return)。Java的method不是一类对象。一个Java method结束运算时,可以返回数值或者对象,但是无法返回另一个method。C的函数也不是一类对象,但是可以通过函数指针(function pointer)迂回达到类似功效,所以C的函数又被称为二类对象。
2.Dynamic objects with prototypal inheritance
在大多数Object-Oriented语言里,既有class,又有object,class是object的抽象蓝图,规定了属性和函数。譬如你我他都是人,但凡是人都有头脑和四肢,这就是属性,但凡是人都能做一些思考和运动,这就是函数。但是JavaScript取消了class,所以在 JavaScript的语汇里,不存在“人”这样抽象的class,JavaScript从不说“他是一个人”,而只是说“他与我很像”。
取消class的好处在于精简了语言的复杂性,但是麻烦在于套用设计定式(design pattern)时,JavaScript就显得比较笨拙。Doug的文章成功地说服了大家,并不是JavaScript语言本身在表述Design pattern时显得笨拙,而是我们大多数人更习惯于传统的OO语言,习惯于既有class也有object,而不习惯于没有class的情况。
3.Object literals and array literals
JavaScript表述object和array的方式非常简练,同时这种表述方式使object和array的数据读取,编辑以及其它操作也干净利索。这种表述方式,直接促成了JSON数据传输格式的产生。
Doug 的三条分析都对,但是斗胆冒犯一句,似乎没有搔到痒处。正如前文中Doug坦率承认的那样,JavaScript的卖点是对于浏览器的操控功能,而不是语言本身的巧妙。但是令人失望的是,Doug为JavaScript辩护的重心,在于区别JavaScript语言本身,与寄生于这个躯体之上的污秽的附属物。他说到,
“JavaScript是一个令人惊叹的语言,但不是好得让人惊叹,而是糟糕得让人惊叹。这个令人惊叹的本质,成就了它的恶名。JavaScript与 DOM,尤其是DOM那些既可怕又可恶的APIs纠缠不清。人们不清楚JavaScript与DOM的分界在哪里,人们喋喋不休地谈论如何改进 JavaScript,但是这些改进本身,对于web开发而言,与事无补。这个语言肩负着太多太多功能,其中包括很多彼此难以和谐共存的,以及设计时就存在先天缺陷的功能。这个语言太冗长,就像约瑟夫皇帝评论Mozart的音乐那样。”
所以,Doug辩论的目的,是要还JavaScript一个清白,找还清白的方式,是剥离寄生于JavaScript的内核的DOM操控,HTML事件处理等等,彼此难以和谐共存的,以及设计时就存在先天缺陷的那些功能。
问题是,即便我们有了一个脱离污秽的冰清玉洁的JavaScript,充其量,我们又多了一个比Python和Ruby更好的脚本语言。但是这不是我们所需要的,我们需要的是如何高效地操控浏览器,换句话说,我们需要的正是那些污秽的附属物,具体说来,
1. 如何捕捉发生浏览器页面的事件,譬如鼠标移动,点击和输入等等,对应DOM-tree的哪一个节点。
2. 如何修改编辑DOM-tree,尤其是多个节点或者子树的相关互动。
3. 如何调用浏览器外部函数,以及如何让外部函数调用浏览器内部指令。
Brendan Eich当年游说Netscape的领导时说得对,当时没有哪一个现成的语言具有上述功能,与其扩充现有语言的功能,不如另行发明一个新的语言,这个新的语言就是JavaScript。
我们今天反思JavaScript的目的,并不是讨论这门语言好不好,如何改进。我们要大胆地问一句,究竟有没有必要存在这门语言,对于操控浏览器而言,或许我们需要的是protocol,而不是language。如果说互联网浏览器的历史积淀很沉重,积重难返,那么对于手机浏览器而言,大可轻装上阵,不必重蹈历史的覆辙。
http://weblogs.mozillazine.org/roadmap/archives/2006/10/
邓兄估计会写到这个吧,呵呵
糟糕的是,我的想法或许过份激进。我不认为JavaScript或者其它什么语言有必要存在。
或许大家会觉得SQL对于数据库而言,它的存在是理所当然的。但是我不这么看,我觉得SQL的parsing,execution planning,以及result merge都是冗长无效率的做法,当然好处是容易实现。
最有效的办法,是把parsing,execution planning从数据库中剥离出来,在数据库外部把这些事情处理完毕,然后把具体指令交给数据库完成。
所以,即便Brendan Eich全力推动JS 2,我也不觉得这有太大意义。
我承认我的观点很激进。
我和老邓的观点类似,但是比老邓更激进:
Http+XML是一个被滥用的,不堪重负的组合
说出这句话来,估计会冒犯河里面很多弟兄。但是,我还是非常坚持我的观点。
Http最早只是机构里面大家共享文本而创造出来的,但是现在却被越来越多的应用滥用。而XML原本只是为了文档的存储,现在居然在各个大大小小的公司充当起来通信协议的角色。本来设计出来的目的就不是如此,却被大家滥用,结果就是补丁越打越多,越来越面目全非,而且丑陋。唯一的好处就是对降低整个行业从业人员的技术素养起到了正面的推动作用。这样能帮助招纳到更多的技术民工。
就是发发牢骚。我知道并非只有小公司,很多大公司河巨头们有一堆arch们在强力推广Http+XML以及他的各种变种:啥子webservice,SoA,SAAS。其实在我看来,真正是让整个行业乌烟瘴气
让人经常憋一肚子鸟气没出发
观众点播:
google.cn好像最近也开始搞音乐搜索了, 这算不算跟baidu抢生意啊? 还请邓侃及邓侃老婆大人对此发表点看法. 小的们谢了先~~ :)
丧钟为谁而鸣(For whom the bells tolls)?
这是个很好的问题 --- 海明威说,丧钟为你而鸣。这里的丧钟就是JAVASCRIPT,你就是浏览器。不是没有人企图敲响其它的丧钟,比如VBSCRIPT,可惜的是IE虽然宝刀不老,但在浏览器领域VBSCRIPT早是势微末路。奈何?东风不再!
任何一门计算机语言都无法回避这样一个问题 --- 语言的操纵对象是什么?汇编是寄存器,内存地址和IO空间,传统的高级语言(比如C/C++)是文件和控制台(其实也是文件件),JAVASCRIPT只有一个东西可以操纵 --- DOM。只要浏览器中的DOM不死,JAVASCRIPT就是“鲁难”。先人日:庆父不死,鲁难未已。于是,互联网就要接着“鲁难”,“鲁难”,再“鲁难”。
难道离了JAVASCRIPT这个张屠夫,DOM还真成了个互联网上的混毛猪不成?
闲话少说,且听下回分解。
本帖一共被 1 帖 引用 (帖内工具实现)
通常是技术推动市场,HTTP&HTML却是市场拉动技术。于是乎HTTP和HTML仓促上阵。基础不正,上面砌的楼就容易越来越歪。大家花了很大力气来纠正,但是不仅费力而且笨拙。
幸好,手机浏览器没这个包袱。本来可以重新设计,但是看来现在大家移用Web技术到手机的呼声很高。幸哉,不幸哉,真是个难说的问题。
Google音乐盒子,与新浪音乐盒子非常类似。有关技术问题,以前在云计算系列中略微提过。
第八章,赚钱才是硬道理。http://www.ccthere.com/thread/1986283/7#C2027416
纯粹发牢骚
技术出现后,程序员广泛应用,大多是循规蹈矩的,学会怎么用就怎么用。但总有一部分程序员在琢磨我还能用它做什么。可以说是滥用,也可以说是优秀程序员的创造性。正是这一个一个的创造性用法(或者说滥用),使应用愈加丰富,推动技术向前发展。
如果没有滥用,技术也很难发展了。
互联网发展到现在,手机浏览器不可能没包袱的。只有网景当初没有包袱,时代造就。
而且,IT这么多年,技术的地位越来越低。你凭什么说服投资者搞一套新东西呢?