Javascript:10天设计一门语言
演进和使用的JavaScript是早在1995年开发的一种语言,真的是刚刚起步。
网景公司在1995年四月聘请Brendan Eich ,他被告知,他有10天时间创造并制作了一种将在Netscape的浏览器中运行,以原型为工作方式的编程语言。那时候,Web创新的步伐是激烈的,由于微软突然使互联网的焦点集中在它即将发布的Windows 95操作系统作为对新兴Netscape的浏览器和服务器产品的系统发布的回应。
当时网景得到如此多的来自微软的关注,因为网景考虑将Web浏览器和服务器作为一个分布式操作系统一种新形式,而不仅仅是一个单一的应用程序的。自从Mosaic在1993年首次亮相,网络便成为可移植的,跨越Windows,Macintosh和Unix,并给了软件开发者他们可以为所有这些环境中开发应用程序的希望。
但是,仅凭HTML本身去定义一个新的应用程序开发环境或操作系统,是远远不够。为了巩固便携式操作系统的概念,网络和网景公司需要便携式的编程语言。
Sun公司的Java语言似乎是便携式重量级应用的解决方案。一种产生的字节代码并运行在Java虚拟机中的编译语言,Java支持丰富的来自C++的面向对象的模式并且似乎能够能够实现和Ç++和C相似的性能.Java 是Web对Microsoft的Visual C + +的答案。
走进javascript
众所周知Java是一个丰富的,复杂的,编译的,专门针对专业程序员的语言。Netscape和其他人一样都想要一个轻量级的解释语言作为对java的补充。这种语言需要呼应和微软的Visual Basic和解释和相像,方便嵌入在网页中适合非科班出身的程序员。根据艾希的回忆:
回到1995年的5月,如果我在JavaScript中加入了类,我会被告知这是太像Java或者是JavaScript是在与Java竞争...
我根据市场营销原因,使它看起来很像Java,但不能使它太像java,javascript需要是一个愚蠢的小弟弟语言。
鉴于上面所有这些要求,约束,和局限性,布兰登 艾希所有的时间非常紧迫,他必须制作了一个基于原型工作的,既能够满足太阳公司的需求又能够赶上Netscape的2.0 B测试版的发布时间表。
技术的启示
虽然对大多数程序员来说日程和约束可能已经不可能反生的问题,布兰登 艾希建设新的编程语言已经有很长的历史了。从他作为一个学生开始在伊利诺伊大学里的经验,在那里他建立语言只是进行语法实验。在硅谷图形(美国计算机公司),布兰登 艾希创造出来的语言,可以用来构建网络监控工具的扩展。
很显然,对于布兰登 艾希来说建造一个 “再一次” 语言 并不是这困难的部分,对布兰登 艾希来说这最困难的部分是建造一个复杂的,强大的语言,但却被禁止使用保留用于Java的面向对象的语法。他想在JavaScript中嵌入先进的功能,并且不涉及java语言的语法。所以导致这门语言最初看起来似乎很简单,重量轻,尚未成熟的程序员将能够很轻易的利用其潜在的能力。
像许多其他语言一样,JavaScript的基本语法来自C语言,包括大括号,分号和保留字。JavaScript是轻便的,和具备简单的语义和更好的动态内存特性的友好的C语言版本。因为一个典型的网页的生命周期的持续时间从几秒钟到几分钟不等,JavaScript可以采取一种非常简单的方法,去实现并发性和内存管理。
布兰登 艾希建立了一个简化的对象模型,组合结构来自C语言,模式来自Smalltalk和LISP提供的数据和代码之间的对称性。超卡事件模型启发在HTML文档中添加事件的模式。面向对象的模式是可行的,但通过用原型在运行时的语义(作为Self的代替),而不是编译器支持的类语法(如在Java和C++中)。
一鸣惊人?
几乎所有成功的编程语言需要一个2.0版本,在他们正真大步向前发展之前,但但现在为止,我们还没有看到,也可能永远不会看到一个JavaScript2.0。没有什么能建造在10天时间就是完美的,可是,一旦某些东西被释放到野外,错误或不完善的地方迅速成为必不可少的特色,并且是几乎不可能改变。根据布兰登 艾希回忆:
在开始时为了生存,JavaScript拥有的足够的好东西。如果你回想在20世纪90年代,JavaScript是被人们所诅咒的,因为它主要用于在您的浏览器的底部状态栏的滚动消息或闪烁图像。随着JavaScript获得一些进化方面的改进[在20世纪90年代后期]通过[ECMA]标准的过程。在2004年和2005年,它变得速度足够够快,足够够好去催生Web 2.0革命。
尽管JavaScript的最初版本可能并不完美,但它首次采用了比较简单的应用程序,所以使它有时间在幕后来慢慢演变,并解决其早期的弱点。此外,由于JavaScript的丰富对其其运行时的支持,而不是在它的语言的语法,提高JavaScript实现,而无需改变现有的JavaScript程序的语法是比较简单的。
当今时代
当Ajax革命开始时,JAVASCRIPT已经在浏览器存在将近10年,移动的JavaScript成为主流应用的重要组成部分的发展。微软触发Ajax在Web接口的统治地位,通过加入XMLHttpRequest的功能在它的Internet Explorer浏览器。其他浏览器迅速加入了类似的功能,允许JavaScript从服务器检索数据和更新HTML文档,而不需要一整页的请求 - 响应周期。有了这个创新,高度互动的用户界面功能被搬进创建类似桌面的经验日益丰富的应用程序,如浏览器谷歌邮件和谷歌地图。
由于每一页所需的代码和数据量的增加,它暴露了JavaScript基于浏览器实现运行时的弱点。不在是运行每分钟左右就重新启动JavaScript,同一个页面会在浏览器中停留数分钟伴随着巨大的,动态的在内存中的数据元素和几乎连续的后台与服务器通信。谷歌建立了自己的Chrome浏览器的V8 JavaScript解释器,把浏览器市场上的通知,绝不会容忍低性能的JavaScript实现。市场也迅速跟进和改进的JavaScript解释器全线表现。
例如Node.js这样的项目,使人们有可能使用JavaScript的语言构建Web应用程序的服务器元素。因为JavaScript已经从一开始急就是基于事件的,建设管理的复杂性,多线程不使用JavaScript的高度可扩展的Web应用程序变得很自然的。
随着HTML5的出现,这是完全有可能,JavaScript将很快成为主导移动和桌面应用程序的编程语言。演进和使用的JavaScript是真的才刚刚开始,这是令人印象深刻的10天,早在1995年开发的一种语言。
要查看我对艾希的采访,访问这里http://youtu.be/IPxQ9kEaF8c。
相关阅读
- 了解JavaScript的执行上下文
- 在JavaScript中什么时候使用==是正确的?
- 我希望我知道的七个JavaScript技巧
- 每一个JavaScript开发者应该了解的浮点知识
- 揭秘javascript中谜一样的this
Q群推荐
CSS家园 188275051,Web开发者(前后端)的天堂,欢迎有兴趣的同学加入
GitHub家园 225932282,Git/GitHub爱好者的天堂,欢迎有兴趣的同学加入

Javascript:10天设计一门语言的更多相关文章
- 如何设计一门语言(十)——正则表达式与领域特定语言(DSL)
几个月前就一直有博友关心DSL的问题,于是我想一想,我在gac.codeplex.com里面也创建了一些DSL,于是今天就来说一说这个事情. 创建DSL恐怕是很多人第一次设计一门语言的经历,很少有人一 ...
- 如何设计一门语言(八)——异步编程和CPS变换
关于这个话题,其实在(六)里面已经讨论了一半了.学过Haskell的都知道,这个世界上很多东西都可以用monad和comonad来把一些复杂的代码给抽象成简单的.一看就懂的形式.他们的区别,就像用js ...
- 如何设计一门语言(七)——闭包、lambda和interface
人们都很喜欢讨论闭包这个概念.其实这个概念对于写代码来讲一点用都没有,写代码只需要掌握好lambda表达式和class+interface的语义就行了.基本上只有在写编译器和虚拟机的时候才需要管什么是 ...
- 转:Javascript的10个设计缺陷
作者: 阮一峰 日期: 2011年6月30日 前几篇文章,我经常说Javascript的设计不够严谨,有很多失误. 今天的这一篇,前半部分就谈为什么会这样,后半部分将列举Javascript的10个设 ...
- JavaScript 10分钟入门
JavaScript 10分钟入门 随着公司内部技术分享(JS进阶)投票的失利,先译一篇不错的JS入门博文,方便不太了解JS的童鞋快速学习和掌握这门神奇的语言. 以下为译文,原文地址:http://w ...
- Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目
Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...
- javascript的api设计原则
前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块.系卤煮自己总结的一些经验和教训.本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来.很难做到 ...
- javascript 继承机制设计思想
作者: 阮一峰 原文链接:http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_java ...
- [翻译Joel On Software]选择一门语言/Choosing a language
Joel on Software Choosing a language 选择一门语言 by Joel Spolsky Sunday, May 05,2002 Why do developerscho ...
随机推荐
- webGL和three.js的关系
如今浏览器的功能越来越强大,而且这些功能可能通过JavaScript直接调用.你可以用HTML5标签轻松地添加音频和视频,而且可以在HTML5画布上创建各种交互组件.现在这个功能集合里又有了一个新成员 ...
- html5 canvas用图案填充形状
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 使用data:uri上传图片
上传图片的方式有两种,一种是使用传统的html控件的方式,设置form属性为multipart/form-data.这种方式兼容ie6,ie7.另一种方式是使用data:uri,将base64编码从浏 ...
- 20155203 2016-2017-4 《Java程序设计》第6周学习总结
20155203 2016-2017-4 <Java程序设计>第6周学习总结 教材学习内容总结 重载和覆盖:重载是将函数的名称和方法不变(名称可以有一些变动),只改变参数列表,相当于和原来 ...
- 20165230 《Java程序设计》实验五《网络编程与安全》实验报告
20165230 <Java程序设计>实验五<网络编程与安全>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: ...
- mybatis一对一关联查询——(八)
1.需求 查询所有订单信息,关联查询下单用户信息. 注意: 因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询.如果从用户信息出发查询用户下的订单信息则为一对多查 ...
- 【ARTS】01_07_左耳听风-20181224~1230
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- Opencv学习笔记——release和debug两个模式的运行问题
本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者:晨凫 ...
- (转载)mysql:“Access denied for user 'root'@'localhost'”
原文地址:http://www.linuxidc.com/Linux/2007-05/4338.htm # /etc/init.d/mysql stop# mysqld_safe --user=mys ...
- jenkins+jmeter结合使用
事件背景:想实现jmeter每30分钟执行一次,但是夜里不能人工操作,结果度娘,汇总结果如下 1.配置jmeter测试环境,注意修改Jmeter的bin目录下jmeter.properties文件的配 ...