作者 | Aleksey Kladov

译者 | 弯月,责编 | 杨碧玉

头图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

以下为译文:

前言

这篇文章表达了我对编程语言流行度的看法。我认为,没有人知道为什么某些语言受欢迎,而另一些不受欢迎,因此,我也可以在这一片纷争中表达自己的想法。当然,这完全出自我个人的猜测,并没有任何数据支持我的研究。

我的中心论点是,实际使用何种编程语言(语法、语义、范例)并不重要。重要的是运行时的特性,简单来说,就是正在运行中的进程的内存是什么样的?

首先,我们来观察一个现象。许多软件都是用 vimscript 和 emacs lisp 编写的(比如我个人就离不开 magit )。客观地说,这些语言都不怎么样。即便没有不那么小众的语言也是如此,比如 PHP 和 JavaScript 。尽管 JavaScript 在某些方面很出色(这是第一个支持 lambda 的主流语言!),但肯定不难想象它本来可建立一个更好的版本(例如,不存在两个不同的 null 值)。

这是一条通用规则:只要你的语言是图灵完备的,并且具有构建抽象的能力,人们就愿意使用。当然,有些语言的生产力比较高,而有些语言则比较低,但是总的来说,选用函数式编程还是面向对象编程,静态类型还是动态类型,似乎并没有太大关系。我们花一些时间总是能够克服这种语言的难点。

相反,克服语言运行时的难点基本是不可能的。如果要扩展 vim ,则必须使用 vimscript 。如果你希望代码在浏览器中运行,那么 JavaScript 仍然是最好的选择。需要将代码嵌入到某个地方?那么可能没办法使用 GC 。

这两个观察结果可以推出如下假设

如果编程语言带来创新的运行时,或具有运行时排他性,则通常它们都会变得很受欢迎。语言本身的质量是次要的。

下面,我们来看几个能够通过这种理论“解释”的例子。

C语言

C 语言的运行时非常优秀,值得一提的原因有两个。首先,它是第一个运行时足够快的高级语言。我们可以使用 C 编写 OS 内核,在这之前为了提高性能只能使用汇编。其次,C 是 Unix 的语言。(我会将 C 归类为“易于改进”的语言类别。以 Null 结尾的字符串是一个糟糕的设计。)

JavaScript

浏览器中只能使用 JavaScript ,长期以来一直如此。

Java

我认为对于我的理论来说,Java 是一个非常有意思的例子。关于 Java 流行的常见解释是“ Sun 给力的营销”,以及随后大学的课程中引入了 Java 。但对我来说,这似乎没有说服力。我们来看一下90年代流行的编程语言(我不确定此处的百分比和相对排名,但是对我来说,大致是正确的):

在这个列表中, Java 是唯一的非动态跨平台内存安全语言。也就是说,Java既是内存安全的(没有易于出错的手动内存管理),又可以合理有效地实现(字段访问是一条加载指令,而不是通过字典查找进行)。不论语言本身如何,似乎这都是吸引人们选择 Java 的充分理由。

Go

关于为了简单性而牺牲其他一切是好是坏,这一点仍然有争议,但是静态链接的零依赖二进制文件无疑是 Go 在开发运维领域流行的主要原因。从某种意义上讲,当你不再需要单独安装 JVM 时, Go 是“内存安全且相当快”的 Java 运行时的升级。

我的假设自然无法解释所有情况。一种是脚本语言。一个支持 eval 且能够很容易地连接到 C 扩展的高度动态运行时确实与众不同,因此这种语言理应是一种流行的脚本语言。但是很奇怪为什么流行的是 Python 和 PHP ,而不是 Ruby 和 Perl 。

另一种是语言的发展:C++ 和 TypeScript 并没有在运行时方面进行创新,但它们仍然是主流的语言。

预测

最后,让我们使用该理论做出一些大胆的预测。

首先,我预测 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 翻译,转载请注明来源出处。

更多精彩推荐
☞阿里动物园再添新丁,小蛮驴搞定物流最后三公里!☞微软水下数据中心“浮出水面”、GitHub代码保存在北极,数据黑科技贮藏方式大曝光!
☞微软全球 AKS 女掌门人,这样击破云原生“怪圈”!
☞阿里动物园再添新丁,小蛮驴搞定物流最后三公里
☞中国移动云智融合峰会 与您相约揽胜九天
☞我投资比特币的3个原因
点分享点点赞点在看

编程语言的好坏,没那么重要?相关推荐

  1. 编程语言排名到底是哪来的?

    又是周末,这应该是 2019 年度最后一个周末了,各位同学周末快乐. PS:小编没断更~~~~ 一到年终,总归会有各种各样的排名,和编程相关度比较大的莫过于编程语言排名. 好像我们在网络上经常会见到编 ...

  2. 学习哪种编程语言最好

    首先,开始这个文章前,发自内心的问自己一嘴:我是否真的爱编程?想坚持学编程? 如果没有学下去的信心吧,不管什么语言都拯救不了,不要想挑一个简单的语言来学,因为编程不是你想象的那样. 好,开始正文.哪种 ...

  3. 帮你提升Python的27种编程语言

    27 种语言 过程型编程语言: C, Rust, Cython 面向对象数据建模语言: Java, C#, Eiffel C 的面向对象衍生语言: C++, D 面向数组的数据处理: MATLAB/O ...

  4. Python和其它27种编程语言

    27 种语言 过程型编程语言: C, Rust, Cython 面向对象数据建模语言: Java, C#, Eiffel C 的面向对象衍生语言: C++, D 面向数组的数据处理: MATLAB/O ...

  5. Python AND 其它27种编程语言

    27 种语言 过程型编程语言: C, Rust, Cython 面向对象数据建模语言: Java, C#, Eiffel C 的面向对象衍生语言: C++, D 面向数组的数据处理: MATLAB/O ...

  6. 编程语言哪家强?4种数据分析领域语言优缺点对比

    来源:大数据DT(ID:hzdashuju)本文约2600字,建议阅读5分钟"哪门语言更好"?本文介绍了4种数据分析领域语言的优缺点. 编程语言的好坏及排行之争由来已久." ...

  7. 为什么别人学python比你快?那是因为你没掌握这几点,多注意哦~

    万事开头难,一切的事情,开头的确很难,学编程也是如此,因此刚开始学编程的童鞋们,就要多借鉴过来人的经验,少走弯路,本文达妹就为大家分享几个编程小白初学时常出现的问题,供大家引以为戒. 第一:盯住一个问 ...

  8. 2016年7月编程语言排行榜

    来源:TIOBE 链接:http://www.tiobe.com/tiobe_index?page=index 头条 : 汇编语言再次进入前十 TIBOE编程语言社区公布了2016年7月最新一期的编程 ...

  9. 编程语言排行,C# 和 C++ 有望超越C?

    TIOBE 公布了 2022 年 5 月的编程语言排行榜. TIOBE CEO Paul Jansen 指出,如果将当前的 TIOBE 指数排名与 1 年前(2021 年 5 月)进行比较,会发现 C ...

最新文章

  1. tp3分布式session mysql_分布式数据库支持
  2. 人工智能德国造 “弱AI“强势登场
  3. delphi xe2学习笔记(1)
  4. 利用axios解决跨域的问题
  5. C语言初学者代码中的常见错误与瑕疵(9)
  6. 机房防雷接地的黄铜排(黄铜带)与紫铜排(紫铜带)的区别与应用
  7. 最容易被忽视的学习材料--技术标准 (z)
  8. 循环次数几次_圆柱模板循环使用次数是多少呢
  9. curl模拟http发送get或post接口测试
  10. 生成对抗网络及其应用
  11. 弘辽科技:掌握淘宝直通车的工作原理很有必要!其核心是什么?
  12. [转载]借助LVS+Keepalived实现负载均衡
  13. 红包码收款码合二为一
  14. 基于vue+js的商城、购物网站 毕业设计 毕设源代码的实现和设计(1)首页
  15. uniCloud开发公众号:一、接收、解析、组装xml消息
  16. CTFSHOW WEB入门
  17. POJ 3264 线段树
  18. 利用MapReduce计算运营商上行下行流量
  19. PHP - strtotime()的慎用
  20. chef怎么读(chef怎么读英语)

热门文章

  1. iTOP-4412开发板基于Linux-C测试程序的编译和运行
  2. 李彦宏:5年后语音和图片搜索会超文字搜索
  3. struts2之值栈
  4. Asp.net安全相关注意的几个问题
  5. 《编译原理》学习笔记 ·001【第一章:总论】
  6. 联想微型计算机怎么开盖,联想C4030一体机怎么拆后盖加内存?
  7. 【演化计算】【论文研读】Completely Automated CNN Architecture Design Based on Blocks
  8. 使用 MobaXterm 连接矩池云 GPU服务器
  9. mfc在调整界面时左边的控件会丢失_Qt项目中如何完成一个漂亮的界面
  10. 力扣--19删除链表中的倒数第n个节点