“我们今天可以对 JavaScript 做的最好的事情就是让它退役!”
大神总是能说出让人印象深刻的话,上面这句话来自 JSON 和 JSLint 的作者 Douglas Crockford。
Douglas 还写过两本非常知名的书《How JavaScript Works》和《JavaScript 语言精粹》,前端的同学应该读过。
照理说,这么一位 JavaScript 领域的领军人物应该是 JS 的铁杆,但是他却说:
“20 年前,我是 JavaScript 的少数狂热支持者,嵌套函数和动态对象的组合非常出色,我花了 10 年时间试图纠正他的缺陷,在 ES5 上取得了小小的成功。
但是从那时起,人们对进一步扩展 JS 产生了浓厚的兴趣,而不是使其变得更好。
所以 JavaScript 和其他恐龙语言一样,已经成为进步的阻碍,我们应该关注下一门语言,它看起来应该更像E而不是 JavaScript。”
JavaScript各种各样的问题大家应该深有体会了,但是今年 Stackoverflow 的调查显示,使用 JavaScript 的程序员高达 65%,远超其他语言,雄踞第一。
可能很多人并不知道,JavaScript 是 Brendan Eich 仅仅花了 10 天突击出的语言,可以说是几门语言的混合体:
1.借鉴 C 的语法
2.借鉴 Java 的数据类型
3.借鉴 Scheme 语言,将函数提升到"第一等公民"(first class)的地位;
4.借鉴 Self 语言,使用基于原型(prototype)的继承机制。
所以 Douglas Crockford 说 JavaScript 是一个披着 C 语言外衣的 Lisp。
Brendan 自己也承认,这是一项匆忙的工作,设计有错误,有缺陷,尤其是名称,完全是谎言,和 Java 一点关系都没有。
JavaScript 为什么能成长为前端之王呢?
在 JavaScript 发展过程中其实遇到过很多挑战:
VBScript:在90年代,这是第一个同时支撑服务器端编程和浏览器端编程的语言,可以在服务器端写 ASP 网页,在浏览器端弄动态效果,微软阵营的程序员很喜欢。
但是它属于微软,只能跑在 Windows 和 IE 中,没有其他浏览器支持。
而 JavaScript 早在 1996 年就开始标准化,1997 年 ECMAScript 第一版就发布了,标准化后浏览器厂商抛弃了后顾之忧,放心使用。
JScript :在 IE 和网景大战时,微软对 Navigator 解释器进行了逆向工程以创建自己的解释器,称为 JScript。
随着 IE 击败网景,市场占有率达到 95%,JScript 也达到巅峰。
但是微软并没有把 JScript 给标准化,随后 IE 不思进取,故步自封,被 Firefox, Chrome 等超越,JScript 也变得无人问津。
Sun的Applet 和微软的 ActiveX:它们俩由于安全问题、安装部署问题、用户体验问题一直没能起飞。
Macromedia 的 Flash :早期极其火爆,技术漏洞多,不安全,无法支持移动设备,最终败给了 JS+HTML5
微软的 Silverlight:本来是要和 Flash 竞争的,后来 Flash 都不行了,所以....
除了技术缺陷,这些挑战者技术都是厂商锁定的,都需要学习一门新语言,Applet、Flash、Sliverlight 还需要在浏览器中安装个“插件”才能运行,这就太不方便了!
反观 JavaScript,一开始就标准化,被所有浏览器支持。虽然是披着 C 语言外衣的 Lisp,但是它的C语言外衣极其简单,任何程序员都可以轻松写几行 JavaScript,在浏览器中搞点儿动态效果(虽然代码质量可能不咋地)。
2008 年,Google 给 JavaScript 添的那把柴火非常关键。
GMail , GMap 等复杂 Web 应用的不断成功,让 Google 看到了 Web 应用和桌面竞争的可能性,它开发了 V8 引擎,惊人地提升了 JavaScript 的执行速度。
2009 年,Ryan Dahl 推出了 Node.js,使 V8 能够在浏览器之外运行,JavaScript 一下子把领地拓展到了后端领域。
JavaScript 自身似乎并不努力,但是各个厂商必须要寻找一个公共的、不会被某家控制的浏览器端编程语言,找来找去,也就是标准化的 JavaScript 能满足要求了。
JavaScript 真的应该退役了吗?
精通 JavaScript 的大神虽然都发出了呼吁,但是 JavaScript 无法退役,它还要在多条道路上继续狂奔。
在软件业,最厉害的就是生态系统,这玩意儿一旦建立,很难攻破。
JavaScript 经过 20 多年的发展,生态已经极其完善了。
强如微软的 TypeScript,也只能把自己最后编译成 JavaScript 来执行,而不能另起炉灶。
浏览器厂商之间也会互相竞争,阻挠某一方发明的更好的新语言。
Stackoverflow联合创始人Jeff Atwood 曾经预言:任何可以用 JavaScript 来写的应用,最终都将用 JavaScript 来写。
在某种程度上,他确实是对的,JavaScript 现在可以写网页,写 App,写小程序,写后端,写桌面程序,甚至 IoT 应用。
我们都知道 JavaScript 还很丑陋,但是没办法,只要浏览器存在,它就会存在,直到下一次重大技术变革的发生。
参考资料:
https://www.reddit.com/r/programming/comments/whipmk/the_best_thing_we_can_do_today_to_javascript_is/
https://devclass.com/2022/08/04/retire_javascript_says-json-creator-douglas-crockford/
https://evrone.com/douglas-crockford-interview