编程语言的好坏,没那么重要?
作者 | Aleksey Kladov
译者 | 弯月,责编 | 杨碧玉
出品 | CSDN(ID:CSDNnews)
以下为译文:
1
前言
首先,我们来观察一个现象。许多软件都是用 vimscript 和 emacs lisp 编写的(比如我个人就离不开 magit )。客观地说,这些语言都不怎么样。即便没有不那么小众的语言也是如此,比如 PHP 和 JavaScript 。尽管 JavaScript 在某些方面很出色(这是第一个支持 lambda 的主流语言!),但肯定不难想象它本来可建立一个更好的版本(例如,不存在两个不同的 null 值)。
这是一条通用规则:只要你的语言是图灵完备的,并且具有构建抽象的能力,人们就愿意使用。当然,有些语言的生产力比较高,而有些语言则比较低,但是总的来说,选用函数式编程还是面向对象编程,静态类型还是动态类型,似乎并没有太大关系。我们花一些时间总是能够克服这种语言的难点。
相反,克服语言运行时的难点基本是不可能的。如果要扩展 vim ,则必须使用 vimscript 。如果你希望代码在浏览器中运行,那么 JavaScript 仍然是最好的选择。需要将代码嵌入到某个地方?那么可能没办法使用 GC 。
这两个观察结果可以推出如下假设:
如果编程语言带来创新的运行时,或具有运行时排他性,则通常它们都会变得很受欢迎。语言本身的质量是次要的。
下面,我们来看几个能够通过这种理论“解释”的例子。
2
C语言
C 语言的运行时非常优秀,值得一提的原因有两个。首先,它是第一个运行时足够快的高级语言。我们可以使用 C 编写 OS 内核,在这之前为了提高性能只能使用汇编。其次,C 是 Unix 的语言。(我会将 C 归类为“易于改进”的语言类别。以 Null 结尾的字符串是一个糟糕的设计。)
3
JavaScript
浏览器中只能使用 JavaScript ,长期以来一直如此。
4
Java
我认为对于我的理论来说,Java 是一个非常有意思的例子。关于 Java 流行的常见解释是“ Sun 给力的营销”,以及随后大学的课程中引入了 Java 。但对我来说,这似乎没有说服力。我们来看一下90年代流行的编程语言(我不确定此处的百分比和相对排名,但是对我来说,大致是正确的):
在这个列表中, Java 是唯一的非动态跨平台内存安全语言。也就是说,Java既是内存安全的(没有易于出错的手动内存管理),又可以合理有效地实现(字段访问是一条加载指令,而不是通过字典查找进行)。不论语言本身如何,似乎这都是吸引人们选择 Java 的充分理由。
5
Go
关于为了简单性而牺牲其他一切是好是坏,这一点仍然有争议,但是静态链接的零依赖二进制文件无疑是 Go 在开发运维领域流行的主要原因。从某种意义上讲,当你不再需要单独安装 JVM 时, Go 是“内存安全且相当快”的 Java 运行时的升级。
我的假设自然无法解释所有情况。一种是脚本语言。一个支持 eval 且能够很容易地连接到 C 扩展的高度动态运行时确实与众不同,因此这种语言理应是一种流行的脚本语言。但是很奇怪为什么流行的是 Python 和 PHP ,而不是 Ruby 和 Perl 。
另一种是语言的发展:C++ 和 TypeScript 并没有在运行时方面进行创新,但它们仍然是主流的语言。
6
预测
最后,让我们使用该理论做出一些大胆的预测。
首先,我预测 Rust 将会成为主流语言。我来解释一下:首先,Rust 的运行时等效于 C 和 C++,因此我的理论应该会预测它不会成为主流。但是我要说的是,内存安全是运行时属性,尽管 Rust 是通过语言机制来实现的。
其次,我预测 Julia 会越来越受欢迎。它在运行时方面非常独特,它坚决地拒绝了 Ousterhout 的二分法,并坚持认使用JIT来编译高动态语言,在运行时提供快速的数值运算代码。
第三,如果 Dart 出现增长,我不会感到惊讶。一方面,它与 Go 和 Java 大致相同,并具有内存安全的运行时,固定的对象布局和普遍的动态分配。而且运行时的实现质量令人震惊:它具有一流的 JIT 、 AOT 和 JS 编译器。此外,它还具有一流的热重载支持。虽然没有什么是突破,但是这种组合令人印象深刻。
第四,我预测 Nim 、 Crystal 和 Zig (语言设计非常不错)不会流行。
第五,我预测由于平台的排他性, Swift 将在苹果硬件上非常流行,但是尽管在语言设计上非常创新( Swift 中的泛型与 Go 相反),但在苹果之外不会有太大的增长。
原文:https://matklad.github.io//2020/09/13/your-language-sucks.html
本文为 CSDN 翻译,转载请注明来源出处。
推荐阅读:
每日打卡赢积分兑换书籍入口
👇🏻👇🏻👇🏻