网站首页 > 技术文章 正文
毫无疑问,提起 JavaScript,其仍是当下最受欢迎的编程语言,全球有将近 1400 万开发者在使用。然而 JSON ( JavaScript 对象表示法) 的创建者 Douglas Crockford 却在近日提出一个不同的看法:JavaScript 已经成为了发展的障碍。
Crockford 是世界著名前端大师、JSON 的创立者,被 JavaScript 之父 Brendan Eich 称为 JavaScript 的大宗师(Yoda)。除了 JSON,他还是 JSLint、JSMin 和 ADSafe 的创造者,也是名著《JavaScript: The Good Parts》的作者。
让 JavaScript 退役?
在上个月的一次采访中,Crockford 表达了自己的观点:
“我们现在能做的最好的事情就是让 JavaScript 退役。20 年前,我是少数几个 JavaScript 的倡导者之一。它将内嵌函数和动态对象拼凑在一起非常巧妙。我花了十年的时间试图修正它的缺陷。我在 ES5 上取得了小小的成功。但从那以后,人们越来越执着于进一步膨胀该语言,而不是改进它。因此,JavaScript 就像其他恐龙级语言一样,成为了发展的障碍。我们应该专注于下一种语言,它应该更像是 E,而不是 JavaScript。”
根据大多数调查统计,JavaScript 是世界上最受欢迎的编程语言
根据 StackOverflow 今年的调查,目前有超过 65% 的开发者在使用 JavaScript,已经远远超过了排名第二的 Python 的 48% (忽略了 HTML、CSS 和 SQL 这些非常规语言)。考虑到它的起源,这已经是一份非常难以置信的成就。
Brendan Eich 在 1995 年为网景公司发明了这门语言,据说只用了 10 天。2018 年,Eich 在 dot.JS 大会上说:“5 月,我苦干了 10 天,睡得很少。”2012 年,Eich 告诉 Computer 的 Charles Severance:“我开始做…一种 HTML 的编程语言,网页设计师和程序员可以使用,直接嵌入到网页中…不像 Java 那样是一种专业语言,你可以运行带有类型声明的实际代码,你必须以编译的方式编写。”他补充说,“这个名字完全是随便取的。在语法上,它与 Java 的关系并不大,而与共同的祖先 C 语言关系更大些。”
Eich 还称这项工作是“一项紧急工作”,但他也说,“我知道会有错误,会有些缺失,所以我把它做成了一种具有可塑性的语言。这使得网页开发人员能够把它变成他们想要的样子。”
为什么 JavaScript 会如此成功?
那么由 Eich 10 天匆忙赶出来的一门语言为何能流行至今呢?
其中的原因有很多,第一个原因就是 Eich 的远见、易于学习和容忍在许多语言中可能出错的代码,比如将字符串与数字进行比较并得到一个常识性的结果——尽管 Eich 后来称这是“一个很大的遗憾,因为它破坏了一个重要的数学特征”。
另一个重要原因是谷歌决心让基于浏览器的应用程序与桌面竞争,这给世界带来了 V8 引擎 (2008),再加上 Mozilla 的 SpiderMonkey 和苹果的 JavaScript Core,使语言具有惊人的 JIT 编译性能。2009 年,Ryan Dahl 提出了 Node.js,使 V8 能够在浏览器之外运行。Dahl 考虑的是服务器应用程序,但今天在大多数 Web 应用程序的开发过程中 Node.js 和 NPM(节点包管理器) 也已经必不可少。
得益于上述原因,JavaScript 一路发展至今。不过 Crockford 指出,随着性能的提高,JavaScript 已经变得非常复杂,今天一个典型的应用程序包括使用 webpack、Rollup 或其他绑定器的构建过程,已经与 Eich 最初的概念相去甚远。
此外,许多 Web 开发人员不编写 JavaScript,而是编写 TypeScript,然后编译成 JavaScript。TypeScript 由微软的 Anders Hejlsberg 发明,它的出现是由于 JavaScript 的可延展性和缺乏类型安全。在上面提到的调查中,TypeScript 排名第三,这证明 JavaScript 也并不是受到了所有人的欢迎;WebAssembly 则是一种二进制格式,可以针对于包括 C、C++、C# 和 Rust 在内的多种语言,它的出现是可能削弱 JavaScript 主导地位的另一项创新。
“JavaScript 在短短几年内迅速流行起来,是的,这个生态系统非常复杂。这一直以来都是个大笑话,即便在全职 JS 开发者中也显得如此疯狂,我们中没人能跟上。”一名开发者在 Hacker News 的讨论中谈到。
JavaScript 还在不断发展着许多新特性,尽管兼容性的要求意味着一些缺陷无法被纠正,但从另一方面讲,特性膨胀是一个持续存在的风险。
Crockford 选择的替代 JavaScript 的 E 是一个例外。由 Mark Miller、Crockford 和其他人创建的 E 是一种面向对象的语言,用于安全计算。用 Crockford 的话说,它“消除了 Java 中许多不好的部分”。
Crockford 还指出,JavaScript 很难改变,特别是因为它是所有浏览器都支持的 DOM(文档对象模型) 操作语言。当被问及有什么可以取代它时,Crockford 谈道:“有两个困难。第一,我们还没有下一种语言。它需要是一种专门为安全分布式编程而设计、基于最低限度能力的参与者语言。其次,我们需要所有的浏览器制造商都采用它,同时用一个设计良好的界面取代 DOM。”
JavaScript 演变历史
行至现在,尽管 JavaScript 面临诸多争议,但回顾历史,这门语言其实也是在曲折中不断前进。
1996 年,Netscape 将 JavaScript 提交至 ECMA International(European Computer Manufacturers Association, 一个欧洲标准化组织)。
1997 年,ECMAScript 标准第一版发布。ECMA 组织控制的标准控制着 JavaScript 语言的各个方面,帮助确保不同 JavaScript 版本的相互兼容性,因此 JavaScript 有时也称为 ECMAScript。
1999 年, ECMAScript 第三版的形式进行了更新,从那之后这个标准没有发生过大的改动。由于委员会在语言特性的讨论上发生分歧,ECMAScript 第四版遭遇“难产”并被废除,但随后于 2009 年 12 月发布的ECMAScript 第五版引入了第四版草案加入的许多特性。
2015 年,第六版标准(ES6)发布,又称为 ES2015。ES6 语法引入了大量的语法特性,很大程度上改善了最初 JavaScript 设计上的很多缺陷,让 JavaScript 这个语言获得了一次现代化的重生。自此 JavaScript 慢慢从一个被普遍鄙视、嘲笑的粗糙语言变成了一个颇有竞争力的语言。
之后,ES 的标准更新开始加快了脚步,每年都有一个版本发布,只不过每次发布,加入的新特性比较少。今年 6 月份,第 123 届 Ecma 大会批准了 ECMAScript 2022 语言规范,这也是 ECMAScript 的第十三版。
- 上一篇: 正点原子I.MX6U嵌入式Linux C应用编程:第二章《文件I/O基础》
- 下一篇:已经是最后一篇了
猜你喜欢
- 2024-11-22 JSON之父:JavaScript已非常复杂,能做的最好事情就是让它退役
- 2024-11-22 正点原子I.MX6U嵌入式Linux C应用编程:第二章《文件I/O基础》
- 2024-11-22 如何将Python函数输出内容同时打印到屏幕和文件
- 2024-11-22 3个重点,20个函数分析,浅析FFmpeg转码过程
- 2024-11-22 Linux驱动基础篇:hello驱动
- 2024-11-22 Python自带的库(open函数)读写txt、csv、json、XML、Excel文件
- 2024-11-22 UG NX OPEN二次开发实例:UF,C语言编程,创建圆柱体,API文档翻译
- 2024-11-22 openGauss SEQUENCE函数
- 2024-11-22 Python文件操作的步骤
- 2024-11-22 Python读取与写入Excel模块:openpyxl
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)