脚本也有一堆二进制程序读取并解析(当然中间可能还有编译转换以及各种你看不到和根本不用理解的过程)才能执行。
比如最简单的你要用的知乎,你在用各种浏览器访问的网站,严格意义上来说他们也是软件(请回想多年前的Software as a Service概念),并且他们也是各种脚本组合起来的。
至于为啥不直接内置编译器然后所有软件都用类似脚本的形式执行,我觉得应该出于几个方面的考虑吧:
- 复杂度的问题。对于大部分程序如果源码的形式再解析执行,所花费的时间远比你访问一个网页所需要的时间多得很。而且,无论是混合基本的逻辑代码还是由框架驱动各种组件这种形式都会有大量的依赖需要处理,如果都以代码的形式加载处理的话,花费的时间其实挺恐怖的。你了解一下Chrome浏览器的代码量就知道了。
- 组件复用问题。以代码的形式加载组件,如何在不同程序间共享是个问题。当然这种问题可以用微服务的形式来解决(逃……
- 效率和灵活性之间的取舍。我觉着这就是为啥脚本存在的原因:固定成了二进制的程序一般再做改动和部署,其实挺耗费人力物力的。当然了,其实有些问题通过配置文件等得以解决,但是Java的亲爹有句话说,“任何复杂到一定程度的配置文件都是一门编程语言”。于是,就有了各种脚本语言。(这个时候你真该去看看Lua的血泪史。
当然了,这些复杂的东西并不是你简单理解的什么是程序、什么是编程语言、编译和解释、二进制和源代码这些简单的概念能够描述的。毕竟大家相互撕了几十年,不产生一个复杂的环境不显得大家都很弱智吗?
推荐书籍:
程序员的自我修养 (豆瓣)
另外,几个靠脚本组合成的软件:
(逃…