演进和使用的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。

相关阅读

Q群推荐

CSS家园 188275051,Web开发者(前后端)的天堂,欢迎有兴趣的同学加入

GitHub家园 225932282,Git/GitHub爱好者的天堂,欢迎有兴趣的同学加入

码农之家 203145707,码农们的天堂,欢迎有兴趣的同学加入

Javascript:10天设计一门语言的更多相关文章

  1. 如何设计一门语言(十)——正则表达式与领域特定语言(DSL)

    几个月前就一直有博友关心DSL的问题,于是我想一想,我在gac.codeplex.com里面也创建了一些DSL,于是今天就来说一说这个事情. 创建DSL恐怕是很多人第一次设计一门语言的经历,很少有人一 ...

  2. 如何设计一门语言(八)——异步编程和CPS变换

    关于这个话题,其实在(六)里面已经讨论了一半了.学过Haskell的都知道,这个世界上很多东西都可以用monad和comonad来把一些复杂的代码给抽象成简单的.一看就懂的形式.他们的区别,就像用js ...

  3. 如何设计一门语言(七)——闭包、lambda和interface

    人们都很喜欢讨论闭包这个概念.其实这个概念对于写代码来讲一点用都没有,写代码只需要掌握好lambda表达式和class+interface的语义就行了.基本上只有在写编译器和虚拟机的时候才需要管什么是 ...

  4. 转:Javascript的10个设计缺陷

    作者: 阮一峰 日期: 2011年6月30日 前几篇文章,我经常说Javascript的设计不够严谨,有很多失误. 今天的这一篇,前半部分就谈为什么会这样,后半部分将列举Javascript的10个设 ...

  5. JavaScript 10分钟入门

    JavaScript 10分钟入门 随着公司内部技术分享(JS进阶)投票的失利,先译一篇不错的JS入门博文,方便不太了解JS的童鞋快速学习和掌握这门神奇的语言. 以下为译文,原文地址:http://w ...

  6. Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目

    Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...

  7. javascript的api设计原则

    前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块.系卤煮自己总结的一些经验和教训.本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来.很难做到 ...

  8. javascript 继承机制设计思想

    作者: 阮一峰 原文链接:http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_java ...

  9. [翻译Joel On Software]选择一门语言/Choosing a language

    Joel on Software Choosing a language 选择一门语言 by Joel Spolsky Sunday, May 05,2002 Why do developerscho ...

随机推荐

  1. linux系统root密码忘了怎么办 三种方法快速找回root密码

    linux root密码找回方法一 第1步:在系统进入单用户状态,直接用passwd root去更改. 第2步:用安装光盘引导系统,进行linux rescue状态,将原来/分区挂接上来,作法如下: ...

  2. 何凯文每日一句打卡||DAY5

  3. dedecms织梦首页判断,添加不同标题

    <title> {dede:field.title/} {dede:field name='typeid' runphp="yes"}(@me==0)? @me=&qu ...

  4. ASP.NET私有构造函数作用

    一.私有构造函数的特性 1.一般构造函数不是私有或者保护成员,但构造函数可以使私有成员函数,在一些特殊的场合,会把构造函数定义为私有或者保护成员. 2.私有构造函数是一种特殊的实例构造函数.它通常用在 ...

  5. 第12月第26天 swift 下划线

    1. The _ is used to define that the parameter is not named If you have multiple _ it states that you ...

  6. Java笔记之java.lang.String#trim

    String的trim()方法是使用频率频率很高的一个方法,直到不久前我不确定trim去除两端的空白符时对换行符是怎么处理的点进去看了下源码的实现,才发现String#trim的实现跟我想像的完全不一 ...

  7. 在vue-cli下读取模拟数据请求服务器

    写此记录时vue脚手架的webpack是3.6.0 此文章方法亦可用于vue-cli3,直接在vue.config.js里面添加 本记录使用vue-resource,先安装: cnpm install ...

  8. keepalived vrrp_script脚本不执行解决办法

    首先打开日志观察: tail -f /var/log/messages 然后新开一个客户端重启keepalived , systemctl restart keepalived.service 看日志 ...

  9. yum安装失败:ublic key for **.rpm is not installed

    yum install mysql-server --nogpgcheck package_need_to_install

  10. how-to-pass-a-class-variable-to-a-decorator-inside-class-definition

    https://stackoverflow.com/questions/17522706/how-to-pass-a-class-variable-to-a-decorator-inside-clas ...