说一说编程语言

编程语言有好多种,因为历史原因,有几种形式。最早流行的,也是性能最好的,如C、C++,这种类型叫:Compiled Language(编译过的语言)。后来又发展出了运行时编译的语言————解释型语言。这些语言,根据不同的习惯,又有细化,例如一般不做编译就跑的,JavaScript、Python、Ruby。或者是先编译成字节码,Java、C#等等。(这些只是习惯。)

解释型语言一开始的设定是逐个指令逐个指令的运行,所以一般这种语言都能折腾出一个交互式Shell工具,输进去一句代码就执行一句。浏览器的调试工具可以一句句地执行JavaScript,Python Idle是一种逐行执行Python的学习工具。那些Bash工具使用的Shell语言本身也算是解释型的语言。

Java原本也是逐行解析的,可是逐行解析的语言性能真的比较差,如果要用了做密集运算,那真是要了命。前端往往需要1秒钟内做数十次渲染,而后台则可能要处理大量的数据,因此对于性能敏感的地方,用解释型工具,是万万不得的。(这里说明一下,浏览器为什么可以用JavaScript: JavaScript其实主要是用来做响应(交互),交互的频率不能太高。而做渲染的的模块————也就是Webkit这些,并不是JavaScript实现的。不过现在机器性能好了,JavaScript也能做一些复杂的动画了。)Java作为常用的后台语言,为了提升性能,于是便有了JIT编译模式。JIT的翻译为及时编译,很容易让人误解————及时编译难道不就是逐步执行嘛。其实不是,JIT指的是,程序启动后,源代码再编译成机器码的意思,JIT是相对编译型语言而言的。Java编译成字节码不是JIT,而是在字节码/或者源码被加载时编译成机器码的技术才叫JIT。JIT和解释型的区别是,JIT会先模块编译,执行的是机器码序列了。一般一个文件就编译一次,会保存下来,以后不需要编译,而解释型的,则往往在执行到改句代码(字节码)时,才编译成机器码,并且不会保存编译的结果。纯粹的解释型语言,一般适合用来做开发工具,可塑性高,随时修改,各种构建工具,一般就是用解释型的语言。

说到五花八门的编程语言,其实也是历史的无奈。如果说有这么一个权威,一直带领着大家做一门语言,那么其实一门语言就足够通杀所有的————这么说可能有点夸张,只不过的确可以做一个通用的编译器或者runtime/VM,然后有类型的代码无类型的代码都能处理,例如HHVM处理的php。

不过,我认为,所有的语言会越来越相似。学点比较新的语言,以后跨语言会轻松的多。