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 ...
随机推荐
- ASP.NET MVC学习笔记-----ControllerFactory
上面这张图是asp.net mvc的工作流程图,我们可以看到当一个http请求来临时,首先需要经过路由系统,路由系统从中获取一些路由信息,然后ControllerFactory根据所得到的路由信息生成 ...
- [转载]JavaScript 的轻框架开发
http://www.open-open.com/news/view/1d64fed 为什么我们不用 Angular, Ember 或者 Backbone! Muut 是一个特殊的论坛平台,它也有着巨 ...
- [整理]Assembly中的DLL提取
当机器上安装一些程序后,Assembly中的DLL会变得越来越丰富. 拿个常见问题来说明. 安装ReportViewer后其中会出现以下DLL. Microsoft.ReportViewer.Proc ...
- 记录下(同一个计算机)多个容器 dockr bridge(桥接) docker-compose 配置
直接上 version: '3' services: mysql: container_name: mysql image: mysql:5.7.21 environment: MYSQL_ROOT_ ...
- bellman-ford算法(判断有没有负环)
#include <iostream> #include <vector> #include<string> #include<cstring> usi ...
- (windows下)安装mysql
一.先从mysql的官网上下载对应版本的mysql zip包(适用于windows下的) 二.解压zip包放到自定义的文件夹下(我放的是e盘,路径为E:\mysql-5.6.40-winx64) 三. ...
- android view的多种移动方式(测试集合)
前言 由于最近在写一个涉及移动方面的自定义View,在做移动的时候用到了类似offsetTopAndBottom .setTranslationY.scrollTo.scrollBy等方法,对于他们的 ...
- Ubuntu下mysql使用
1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 注:建议将/etc/apt/source.list中的 ...
- css中width和padding-top实现正方形
.div{ width: 100%; height: 0; padding-top: 100% } 这个时候,padding-top的值与width相等,所以可以让div宽高一样,值为width的值
- 基于Prometheus的Pushgateway实战
一.Pushgateway 简介 Pushgateway 是 Prometheus 生态中一个重要工具,使用它的原因主要是: Prometheus 采用 pull 模式,可能由于不在一个子网或者防火墙 ...