为什么会有这么多编程语言?


为什么会有这么多编程语言?

在编程语言如此丰富的今天,相信许多开发者都有过上面的疑问。不过早在 1960 年代初,人们就已经提出了这个问题。

《ACM通讯》期刊近日发表了题为《Why Are There So Many Programming Languages?》的文章,作者在文中指出了一个重要原因:公司基于商业利益的诉求,希望控制编程语言,所以会发明由自己主导的语言。

1990 年代中期,Visual Basic 和 Visual C++ 是微软主力开发和维护的编程语言。这两种语言都是从已有的编程语言衍生而来,Visual Basic 的优势是为 Windows 桌面平台构建前端应用程序,但它缺乏许多高级语言功能(如数据结构、线程)。Visual C++ 虽然几乎可以处理所有问题,但它十分复杂。然后,Java 在 1996 年问世了,Java 是全功能的面向对象的编程语言,不像 C++ 那么复杂。

Java 的核心功能之一是平台可移植性,但这不是微软希望看到的,因此 Java 背后的公司 Sun Microsystems 与微软产生了冲突,并且从 1997 年开始发起诉讼。双方紧张的关系最终导致微软在 2002 年发布了一门名为 C# 的编程语言,它看起来很像 Java,但事实上并不是。当然两者最重要的不同点在于,C# 是微软可以在自家 Windows 平台上控制的编程语言。

除了公司对于控制和财富的诉求,编程语言之所以如此多与当时的技术环境和水平密切相关。现在许多看起来理所当然的事情在过去并非如此,早期计算机的存储、内存和处理能力都是有限而昂贵的。人们不得不费尽周折,只为到计算机实验室,通宵熬夜以获得计算机使用时间。

在那个时代,编程语言通常是为某些任务或工作而设计的,编程语言的命名也更简单——因为命名空间尚未被开发。在 1950 年代和 1960 年代,最初的程序可以“奢侈地”用其所作的事情精确命名:FORTRAN(公式翻译器)、COBOL(面向商业的通用语言)、BASIC(初学者通用符号指令代码)、ALGOL(算法语言)、LISP(列表处理器)。大多数人可能没有听说过 SNOBOL(面向字符串和符号语言,1962),但是通过名字稍微猜测就可以知道它的用途。如果那个时代对面向对象的编程概念有更多了解,相信会有人使用“OBJOL”之类的名字命名——明确命名为面向对象语言,至少按照那时的命名模式会是这样。

到了现在,更多的编程语言在许多方面都像是重新造轮子——它们许多都是满足下面属性的多种组合:

  • License
    • 开源;商业
  • 平台
    • 操作系统、硬件支持
  • 语言范式
    • 面向过程、函数式、面向对象等
  • 类型系统
    • 动态、静态等
  • 并发
    • 单线程、多线程
  • 内存管理
    • 垃圾回收(自动或手动)
  • 执行
    • 解释、编译到虚拟机、原生编译等
  • ……

相关文章

2022-02-22

量这两个许可证,就是另一码事了。 阮一峰老师在《为什么 GPL 是更好的开源许可证?》一文中作了逻辑阐述: 当程序员放弃代码的版权,或者选择 BSD 许可证,他可能认为自己做出了世界上最无私的行为。很大程度上,事

2022-03-02

道导致黑屏的原因。 说了这么多,那么问题来了。为什么最后大家没机会在 Windows 8 看到这只隐藏款的猫呢?原因很简单,微软的祖传艺能——“砍刀部”又出手了:由于 ASCII 绘制的猫图像占用内存和耗费时间,Windows 性

2021-11-11

联通的网站,他们都是用JSP语言开发:个人感觉安全性和编程语言关系不是很大,到是和开发人员的关系很大。借用贴吧网友的一句话"不是程序适不适合搞大网站,而是你自己合不合适做大网站"。PHP主要还是Nginx/Apache、MySQL/Redi

2021-11-25

1993年,8月16日早上5点31分03秒,与新闻大亨 Ian Murdock 同名的普渡大学学生在 Linux 新闻组里发了一条信息,阐述了他对 Linux 的想法,最古老 Linux 发行版之一 Debian 就此诞生。 Murdock 那时候应该没有想到,Debian 会在开源历史获

2022-04-02

析公司 RedMonk 发布了 2022 年 1 月(第一季度)。 RedMonk 编程语言排行榜通过追踪编程语言在 GitHub 和 Stack Overflow 上的代码使用情况与讨论数量,统计分析后进行排序,其旨在深入了解潜在的语言采用趋势。该榜单一年发布两次

2022-02-10

处理多媒体内容时能够有更佳的表现。 虽然理论上是这么说,那么 32 位和 64 位在实际测试中表现如何呢?近日外媒 Phoronix 对两者进行了详细测试,让我们一起看看从 Raspberry Pi OS 32 位转换到 64 位后的测试数据和性能表现。

2021-12-16

花费数百年的时间才能完全解决这一隐患。而这数百年将会有多少程序员入土? McAfee Enterprise 和 FireEye 的高级威胁研究主管 Steve Povolny 称,Log4Shell 的危害性堪比 Shellshock、Heartbleed 和 EternalBlue。“攻击者几乎立即开始利用该

2022-09-07

最高帧率可提高 100%。 近日,Daniel 还发表了一篇题为“为什么 Ubuntu 22.04 这么快”的讨论帖。他在里面概述了 22.04 和 22.10 的动态三级缓存补丁,以及一些优化调整。

2021-12-01

LA 纸质副本才会被视为有效承诺。  在线签署 CLA 为什么要贡献者签署 CLA? 企业或组织往往会以保护贡献者版权为由,要求签署 CLA。还提出了假设,如果他们想起诉开源违规行为,有了 CLA 授予的版权许可,这时就不必

2022-09-20

verywhere 所需的资金,计划将软件材料清单 (SBOM) 引入所有编程语言和框架,首先是 Python。 其目标是提高所有开源软件的弹性和安全性。而它向着 SBOM 成功迈出的第一步就是,资助软件包数据交换 (SPDX) Python 库的工作。该项目的

2022-07-04

做 :p David 希望邮箱收件箱的未读数量是 0,这就是为什么他将 0 issue 当做一个目标。 最后,Flask 和 Werkzeug 正在积极开发并不断改进。例如,这是一个新的路由器,可以让它更快。 点此查看更多讨论。

2022-08-16

号系统的唯一原因是让版本号更容易记住和区分。这就是为什么每次在次版本号达到 20 左右时,我更喜欢增加主版本号,并重置次版本号的数字。 在我决定把这个内核称为 6.0之后,一些中国的开发者指出“5.20”是更好的版本

2022-09-20

能只是安抚玩家情绪的一套说辞。考虑到《GTA》这款游戏会有 Online 模式,为了避免不法分子修改游戏、制作游戏外挂,保证所有玩家的体验和游戏公平性,Rockstar 很有可能会大幅修改游戏代码,甚至推倒重写所有源代码,游戏

2021-11-22

些索引字段放在了ES。 以上作为一个常用的方案,为什么会成本高昂呢。 我们来简单计算一下,京东App某个模块(是一个模块,非整个App累计),单次用户请求,用户的入参+返回值+流程中打印的日志占用的大小在40k-2M