首先明确一个点,设计一门编程语言的意义是什么?
我在第一定律里提到过,编程语言都是领域特定的,也就是,为了解决特定的领域问题。
不信的话我们拿上古的几个编程语言来看看就知道了:
- IPL: Information Processing Language 信息处理语言
- Fortran: FORmula TRANslation 公式翻译
- LISP: LISt Processing 列表处理
- COBOL: COmmon Business-Oriented Language 通用业务语言
- Algol: ALGOrithm Language 算法语言
- SNOBOL: StriNg Oriented and symBOlic Language
- Simula: SIMULAtion
- Modula: a langauge for MODULAr multiprogramming
- Perl: Practical Extraction and Reporting Language
- FP: Functional Programming
现代编程语言已经都是多范式(multi-paradigm)、多平台的编程语言了,但其实现以及某些特性会带来某种程度上的限制,这就导致了这些编程语言其实也是领域特定的。
比如脚本语言诸如JavaScript,在应用扩展能力上是强项,但在服务的可靠性、性能方面是短板,于是通常会用做Web前端、或者程序扩展配置用的编程语言;而与其恰相反的如C++,构建模型复杂,缺少运行时动态性的支撑,但由于其与系统接口(通常是C语言)有着较好的兼容,同时本身积累的生态也相对稳定可靠,加上作为直接硬件映射的编程语言,其执行没有运行时overhead,效率要好得多,所以更容易作为系统级软件的选择。
这种倾向,目前没有任何一个编程语言能够做到通吃。所以提到通吃的,基本上也是在痴人说梦。