JS与未来

人类文化的发展,经过新人阶段的旧石器时代晚期以后,先后进入新石器时代及金属时代。愈到后来发展愈为迅猛。从新石器时代的开始到现在至多不过一万年左右,金属时代的开始到现在不过数千年,人们开始利用电能到现在不过一百多年,原子能的利用则仅是最近几十年的事;而新石器时代以前的发展阶段,则动辄以数十万年到千百万年计。由此可见,人类的发展不是等速度运动,而是类似一种加速度运动,即愈到后来前进的速度愈是成倍地增加。 ————李四光《人类的出现》

前端革命不会停止,技术的发展呈现的是一种加速发展的趋势,以javascript为主的web技术在最近几年有了非常快速的发展,新技术新名词不断出现,让人眼花缭乱。这种快速的变化也让人在技术选型时无所适从,担心今天的选择会在明天被淘汰。

jquery,mootools,grunt,gulp,webpack,angularjs,React…

纵观整个web技术的发展过程,基本遵循从静态到动态,从后端模版到前端模版,从前端模版到组件化,从组件化到工程化这样的过程。下一步的发展会是虚拟化。

所谓虚拟化,就是把浏览器当作一台虚拟机,我们需要建立一个与浏览器无关的抽象语言层。

如果我们将浏览器看作一台机器,那么这个机器只有最简单的渲染接口,和编程语言,他的可编程设计并不友好,并且存在着“操作系统”间的不兼容的现象。开发社区顽强的从这一套冗杂的js语言运行环境和DOM渲染接口上,搭建起了跨平台系统(兼容框架),包管理基础设施(npm),高级语言及其编译器(coffeescript, ES6/7,typescript, 以及babel编译器,各种css编译器),各种开发框架(react),工程管理工具(webpack)。

当这一整套设施完善之后,这一整套js生态高级工具是通用的,而不同的浏览器只是一个目标系统而已(target)。同理,我们可以将js生态编译到浏览器的目标系统,我们也可以将js生态编译到非浏览器的目标系统,原生的iOS,原生的Android (react-native),我相信也必然可以将js编译到PC桌面操作系统。虽然目前js可以基于webkit技术开发桌面应用,但如果可以将js直接应用在native的桌面窗口系统,性能必然大大改善。

React 与 Angular 的不同在于,Angular还只是在玩web前端的开发模式问题,而React在玩的是JS语言生态的问题,这完全是更高的维度。

编程语言五花八门,种类繁多,我认为有3种语言在编程语言的历史上占有至关重要的地位:

首先是汇编语言,它让人们可以用更易理解的方式与机器沟通,不需要再使用难以理解的2进制的机器语言,不同指令的CPU可以使用“相近的”汇编语言进行编写,实现了CPU指令的抽象化;

然后是C语言,它是一门高级语言,最重要的是它使用指针等形式对内存分配和访问进行了抽象,而它也理所当然的成为了操作系统内核开发的不二之选,C取得了极大的成功,提供了文件系统、网络等重要的标准接口,在某种意义上说,C在一定程度上实现了操作系统的抽象化;

第三种语言,它不是java,虽然它提出了很好的愿景————跨平台,面向对象,并且也取得了巨大的成功,但它并不具有多少特殊的意义。第三种语言,就是JavaScript,也可以说是ECMAScript,它是一种动态语言,这并不新鲜,但它是一种与生俱来使用互联网进行分发的动态语言,它实现了浏览器的抽象化,随着发展,它已经逐渐实现了对客户端而不仅仅是浏览器端的抽象化,更进一步的,它实现了对运行环境的抽象化。能完成这个任务的,并不是JS的特权,从理论上来说,任何嵌入式脚本语言,都可以完成和JS同样的功能,比如lua。但是只有JS才能完成这个历史使命,而不是lua,因为JS天生是通过网络部署的,天生是需要兼容多种运行环境的。

这3种语言有一个共同的特点:他们都有多种不同的实现,甚至一度缺少标准,或标准形同虚设。简而言之,非常混乱。无法解释究竟是因为太成功而产生了混乱,或恰恰是因为这种混乱而促使了它的成功?

今天我们已经可以看到JS被应用在了越来越多的地方,web,移动开发,服务端开发,硬件开发。

我们可以大胆的畅想,未来的桌面环境都将由JS来开发。但是那个JS也许不是今天的JS,而是一种重新定义的高级语言,也许也会有一个全新的名字(比如JSX,TypeScript),而且它一定是由社区力量建立的语言,靠社区的分布式的民主系统共同推动发展的语言系统。这种语言天生具有贯穿前后端的功能,它既有js的灵活,也有C的性能,它既能很好的描述界面,捕捉输入,开发网络交互,也能很好的操作硬件,它不仅适合做逻辑处理,也适合用于科学计算以及量子算法。它会被用于开发桌面系统,硬件,操作系统,航天器控制程序,机器人。

除了这种几乎万能的编程语言,还会产生一种更高级的机器会话语言。IDE将会彻底的革命,未来的IDE可能是一种对话式的IDE,你需要用IDE能够理解的简洁的语言来告诉IDE你的想法,IDE会比那些愚蠢的投资人更能听懂你的想法,利用丰富的基础设施(如云)快速的给出你一个简单的原型,你需要再次告诉IDE你所需要做的调整,你也可以描述你的业务需求,IDE会自动的帮你生成代码与测试代码,它不会犯人类会犯的各种低级错误。你编写的代码高效且安全。一套会话式的IDE交互语言。一个聪明的孩子可以掌握一门几乎万能的编程语言,一个人就可以作出令人惊艳的作品。

这就是未来,由分布式的黑客所共同创造的未来。