关于程序员:编程语言70年谁是世界上最好的编程语言

2次阅读

共计 7481 个字符,预计需要花费 19 分钟才能阅读完成。

导语 | 客户端开发想要在多种生态中生存,必须纯熟应用各种平台的环境和语言。许多开发者的职业生涯,波及多个平台生态以及对应的原生编程语言。本文作者李杨不拘泥于某个语言或者个性,从语言的倒退和历史的角度聊聊编程语言的倒退。各个编程语言之前有何关联?编程语言界谁能笑到最初?欢送浏览本文并进行探讨。

目录

1 编程语言发展史纵览

2 编程语言将来二十年发展趋势

3 长期瞻望:二十年后的发展趋势是什么?

01、编程语言发展史纵览

谨严起见,本文提到的编程语言指的是「第三代高级编程语言」。

首先,咱们从工夫维度动手聊聊编程语言。一图胜千言,咱们从目前支流的编程语言中,挑选出风行的、具备历史影响力的语言。把它们按工夫从上往下排序,根据类型和指导思想进行聚类,依据相互的影响应用线条指向。在补充了一些关键性的特色和评估之后,我整顿出下图:

整顿图的过程中,我发现很多乏味的点。让咱们按工夫程序从上往下讲这张图。

1950-1959这期间呈现了第三代高级语言的鼻祖:Fortran 和 Lisp。并且在 1958 年曾经提出了结构化编程、递归、异样、函数式、命令式、垃圾回收等目前罕用的概念。当初用到的大部分语言个性的实践的呈现比咱们设想的早。

1960-1969:这一阶段,IBM 的 ALGO 系列语言次要是对实践概念的摸索和实际,通过两个版本后诞生出 ALGO60 里程碑式的作品。这奠定了古代高级编程语言的根底。同时这期间也有 Basic 语言降了低编程门槛,并第一次引入了「类型后置」的语法以更合乎人类浏览习惯。

咱们持续往右看,发现一个独特的系列:CPL 和 BCPL。这两个语言首次阐释了「个性不是越多越好」的黄金准则。因为拉长工夫看,CPL 是第一个想成为大而全的语言。从 CPL 到 BCPL 到 C,都是在一直的缩小个性;从 C 到 C++ 再到 C++20,个性又在一直减少。这时你就会明确为什么 C++ 语言会对增加新个性是那么审慎和小心,然而还是阻挡不了让 C++ 变成下一个 CPL 的步调。

1967 年诞生的 Simula64 提出了面向对象思维。面向对象思维开始倒退。

1970-1979这一年诞生出两个影响力极大的语言:Smalltalk 和 C。偶合的是这两个语言都是在 1972 年公布的。Smalltalk 肯定水平上继承了 Basic 远离机器、凑近人类的摸索形式,发挥了语言动态性的思维,摸索了面向对象的思维,含糊了编译型语言和解释型语言的界线,对后续的动静语言、脚本语言、客户端语言产生了深远的影响。

C 语言的诞生是为了满足 Unix。过后 Unix 应用 BCPL 或 B 语言都无奈满足操作系统对编程语言的要求,因而 C 语言应运而生。抛开语言个性,咱们也能发现 C 语言的劣势有十分多:岂但有需要(开发操作系统的动机),还有教训的加成(尝试了 BCPL 和 B 语言,积攒了大量的利用教训),并且遇到了好我的项目(Unix 操作系统),被最聪慧的一群人应用(Unix 操作系统开发工程师)。这些注定了 C 语言具备弱小的生命力。这期间编程语言的思维曾经成熟,在面向对象思维在 Smalltalk 的推动下,C 语言成为下一阶段新语言的首捧。

1980-1989:面向对象在 GUI 畛域具备独特的劣势。借着这十年图形界面交互高速倒退的东风,面向对象思维倒退进入快车道。近十年是「面向对象思维」横行的十年。还记得上个十年的 Smalltalk 和 C 吗?Smalltalk+ 面向对象诞生了 Self,C 语言 + 面向对象诞生了 C++,而 Smalltalk+C 语言 + 面向对象诞生了 Objective-C。苹果公司抉择 Objective-C 作为其生态原生语言,使得咱们在 2022 年还在写 Objective-C 的代码;C++ 和 Objective-C 对 C 语言的 100% 兼容,使得这两个语言能够充沛继承 C 语言的生态和使用它的人才。然而 Objective-C 的语法切实太顺当了,Objective-C 的关键字数量泛滥,并且语法没有一致性可言,在没有 IDE 补全环境下能够被称得上是最难写的语言。

C++ 保留了 C 语言的语法习惯和设计准则。从 C 切换到 C++ 简直没有学习老本,并复用了 C 的生态,这使得 C++ 迅速流行起来。面向对象的思维在过后来看是实用且先进的。然而当初咱们发现:基于面向对象思维倒退进去的各种设计模式,慢慢地把代码玩出花来了。须要学习设计模式的就那几个架构师,然而当初人手一本设计模式。「把大象放到冰箱里」如此简略事件都要先写一堆的形象。看代码把人绕晕 …… 当然,这是面向对象思潮的后话了。这也导致起初很多人投向简略间接的 C 了(做了这么多我的项目下来,发现面向对象很多时候是适度设计的源泉)。

1990-1999:这是编程语言倒退最疾速的时代。这得益于计算机平民化和图形界面的倒退,计算机进入千家万户、利用开发的需要激增。

编程语言的诉求开始发生变化:对性能要求变弱,而对平安(内存平安,线程平安)、人性化(可读性,表达力,低门槛)、动态性等提出更高要求。首先退场的是 VisualBasic。它强化了 IDE 和编程语言的联合,升高了利用开发门槛。

接下来,到目前仍十分火的 Python 诞生了。Python 诞生在关键字和语法越来越简单的年代。于是反其道而行之,谋求简洁的语法。最具备标志性的是为了省略“{}”间接用「空格缩进」来划分代码块(这种语法独创是 1966 年的 ISWIM 语言)。

乏味的是,Python 谋求的简洁语法,不是其胜利的要害(因为 IDE 的提高,这种语法的模式外围价值曾经隐没),Python 胜利的关键在于其杰出的扩展性和跨平台。这让 Python 长期稳坐解释型语言头把交椅,并且起初的同类语言都很难超过。另一方面,Python 提出的「一件事最好是只有一种办法来做」的理念,贯通语言设计,也成就了其优良的学习曲线和低门槛的长处。所以一门语言能让人疾速上手也是其外围竞争力。

工夫来到 1995 年,这一年诞生了四个咱们耳熟能详的编程语言:JavaScript;Java;PHP;Ruby。说编程语言倒退最疾速的时代是这个时代,不为过。Java 对 C++ 做减法、减少了安全性,成为历史上最胜利的语言之一。嵌入式、客户端、后盾都有 Java 的身影。然而这种胜利不会继续太久。因为 Java 波及畛域太多了,语言个性博而不精。这注定了 Java 在 20 年后的败落。然而话又说回来,能在支流编程语言间断 10 多年榜上有名,Java 曾经实现了的历史使命。

JavaScript 逐步倒退为浏览器上的原生语言。乘着 Web1.0、2.0 的东风,依仗和低门槛的学习老本,以及解释型引擎的疾速倒退,JavaScript 曾经冲破浏览器畛域的限度,简直无所不能。前端开发者们拿着 JavaScript 一次又一次的向客户端和后盾阵地发动冲锋。ReactNative、Node.js 等技术煊赫一时。

随着硬件和脚本引擎的提高,就连已经全用 C++ 编写的 QQ 客户端,当初也投入 Electron 的怀抱了。然而 咱们从当初的角度看,JavaScript 的不少中央曾经落后于时代,咱们急需一门新的语言或者反动来摈弃它

2000-2010:这是 PC 互联网的顶峰和挪动互联网的萌芽的时代,也是咱们记忆粗浅的时代。C# 在 2000 年首发,微软基于 C++ 和 VB 的教训,借鉴 Java 推出了浓墨重彩的 C#。咱们站在历史的高度能够说.Net 是失败的框架,然而这都难以覆盖 C# 的光芒。C# 和 Java 同样是对 C++ 做减法,然而在很多细节上 C# 绝对 Java 更靠近 C++。因为 C# 搭上了不争气的搭档.Net,不像 Java 那样一开始就那么胜利。塞翁失马,反而让 C# 的历史包袱十分轻。

C# 在接下来的编程语言倒退中屡次成为第一个吃螃蟹的人。C# 给古代语言带来了十分多理念和思维,从 C#1.0 到 C#11,简直一年一个版本。这倒退速度其余编程语言只能望其项背。第一次接触可空类型(空平安)、?? 运算符、dynamic 类型都是在 C#。笔者从事 windows 开发近十年,从学术角度来看对 C# 的青睐溢于言表。然而从工程角度来看,.Net 和 C# 反对跨平台。它俩动作总是慢半拍,错过了 PC 互联网和挪动互联网的机会,只在 Windows 平台风行了。

集体认为,C++ 作为通用语言真的太胜利了。然而它曾经不是一门高安全性高人性化的一门语言,开发出更敌对的平安的「C++」变得迫切起来。这时呈现了很多新的语言蠢蠢欲试,其中包含 D 语言和 Rust:D 语言是 C++ 编译器作者设计实际的一门新语言,它排汇了很理论我的项目的 C++ 经验教训。然而认真理解 D 语言你会发现,这就是拿 C++ 编译器魔改的一个「公有 C++ 语言」编译器。这也导致很多 C++ 的弊病不能彻底破除,属于改良派。

过了 3 年,Rust 横空出世。Rust 在理念上有很大的提高,比方尽管没有垃圾回收器。然而强制使用者明确对象的所有权,通过所有权编译器能够在适合的机会开释内存。这是风行语言第一次不应用垃圾回收形式解决内存治理问题,在性能上比垃圾回收有着极大的劣势。尽管性能无损,然而相比垃圾回收模式更须要开发者编码时减少对象所有权的思考过程。即便如此,这也比在 C++ 花几个星期解决内存拜访异样的问题好的多。Rust 属于改革派。从新扫视 C++ 的利用场景,对语言个性从新设计,这真的是一次精彩的尝试。集体认为,Rust 也比 D 语言更加胜利。

到了 2007 年,对后盾影响深远的 Go 语言诞生。过后大部分后盾开发者还是用 C++ 或者 Java。咱们后面说了 Java 注定会被代替,Go 首先在后盾开发尝试吹响号角。前面还会提到 Kotlin 在客户端尝试代替 Java。

Go 的诞生是一个十分好的工夫节点。除了剔除很多 Java 的弊病,还直击利用场景的痛点,在性能(多核,网络,并发)上着重发力,后退了一大步!

另外,Go 在工程上的胜利,展现其了语法个性上的新尝试:Go 语言是近代第一个捡起类型后置的语言,提供了丰盛的语法糖(如:=)使得代码简短并语义明确,这间接影响了前面的 Swift,Rust、Kotlin 等有着改革雄心的语言。Go 的胜利除了 Go 的优良因素外,咱们也发现:瞄准细分利用场景的语言,在工程上是十分具有活力的。

2011-2020:这是挪动互联网的疾速倒退时代,最须要的是进步挪动端高生产力语言。首先退场的是 Android 平台的 Kotlin。Kotlin 是 JVM 语言,能间接复用 JVM 的生态。Kotlin 和 Java 有点像当年的 Objective-C 和 C,然而不像 Objective-C 和 C 能混编。Kotlin 从新设计了语法规定,大大提高了可读性和安全性。3 年后苹果公司也交出 Swift 的答卷。Swift 被简略的形容为「没有 C 的 Objective-C」。Objective-C 花了 30 年,终于摒弃了 C 语言的影响。

新的语言不能没有成熟生态的反对。和 Kotlin 与 Java 同是 JVM 语言不同,Swift 应用桥接(Bridging)的办法,得以复用 Objective-C 的生态。这未尝不是一次翻新的尝试,能够让 Swift 没有任何包袱而从新设计。Kotlin 和 Swift 都抉择了更适宜于浏览的类型后置——更简洁的语法,更丰盛的语法进步可读性和语义准确性。对于现有的大型项目的开发人员来说,从 Java 到 Kotlin,或者从 Objective-C 到 Swift 有点难以适应。开个玩笑,咱们被 C 格调语言「荼毒」了这么久,忽然不荼毒了会很不习惯。

在这个期间诞生的 Dart 旨意成为 Javascript 的接班人。然而其关注度不多。随着 Flutter 的炽热,Dart 也进入了公众的视线。Dart 与 Kotlin、Swift 彻底断舍离 C 格调,Dart 依然抉择 C 语言格调。在笔者看来,当初大部分我的项目都会由多种语言编写,放弃和 C 语言格调在多语言我的项目中兴许是一件坏事。前段时间笔者常常在 iOS、Android、PC、Mac 四个平台编写代码,波及语言不限于 Java、Kotlin、Objective-C、Swift、C/C++、Dart。语言格调一天切换好几次,这反而十分不人性化。

Dart 没有很好地成为 JavaScript 的接班人,谁能想到下一年的 TypeScript 火起来了?TypeScript 抉择和 Dart 不同的办法接班——相比 Dart 强烈的形式,TypeScript 齐全兼容 JavaScript。TypeScript 还减少一些语法让编译器把谬误提前裸露,大大加强了 JavaScript 的安全性,给 JavaScript 狠狠的续了一命,让 JavaScript 能够持续「荼毒」程序员们。话说回来,Dart 在安全性、性能方面都给 JavaScript 带来了微小的提高,也祝愿 Dart 最终能顺利接班。

2021- 今:尽管新语言在诞生,但咱们也不能漠视每个编程语言都在一直的倒退和变动。在 2022 年谷歌推出的 Carbon,旨在修复 C++ 的几个显著毛病,进步 C++ 的可读性、安全性,并平滑语言的学习曲线。Carbon 和 D 语言有点类似,属于对 C++ 现代化的改良派,然而和 D 语言不同的是:Carbon 有个好父亲,并且通过「双向互操作性」融入 C++ 生态,也摈弃 了 C ++ 的历史包袱,并使得语言的语法能够从新设计。

从 Java 被逐步代替的经验教训中咱们发现,目前 C++ 在应用层正处于城池渐失的状态。咱们应该明确:应用层和底层框架的需要不同,不应该从顶到底都应用一套语言。当初 C++ 所失之城池就是新语言十分好的机会。抓住应用层的平安、人性化、和与 C++ 的双向互操作性,Carbon 的确是精确找到了定位。简而言之,谷歌的 Carbon 还是备受期待的。

除了在应用层 C++ 有待提高,在底层场景上的 C ++ 也有很大的提高空间。2022 年,Herb Sutter 的试验我的项目 CppFront 值得一提。简略来说,CppFront 通过给 C++ 减少一层预处理语法规定(cpp2) 来进步 C++ 的易用性和安全性。和 Rust、Carbon 不同,Herb Sutter 的这个试验我的项目不是寻找 C++ 的代替者,而是「寻找冲破界线的办法」,使 C++ 自身向前倒退,并加倍努力应用 C++,而不是切换到其余货色。这是个为 C++ 规范探路的试验我的项目,有丰盛的实践和试验,下一代 C++ 规范必然能焕发出新的生机。然而也别太奢望 C++ 能回到从前那样样能手的辉煌,历史的教训通知咱们大而全的语言最初都会被代替。

咱们从工夫维度简略的从上往下捋了一遍,不难看出:支流通用编程语言次要受 2 个成熟语言 (Smalltack 和 C 语言,且都诞生于 1972 年) 的影响。有的语言被某个影响深一些,有的两者都吸取;接着次要往更平安、人性化、跨平台这三个方向进行倒退,而在性能,语法,重用生态、扩展性,IDE 敌对等多维度各有倒退、取舍、借鉴。

同时咱们也发现:编译型和解释型语言边界逐步含糊,语法风行交替更迭,语法语义更加明确,语言的指标畛域更加细化。别看近十几年新语言出了那么多,语法花里胡哨,其实很多语言同质化重大。类型后置也是早就玩过的,每个时代风行不同罢了。后面咱们顺着工夫简略过了一遍图中的局部语言,这张大图能够帮忙各位梳理思路。

02、编程语言将来二十年发展趋势

编程语言的倒退离不开计算机领域其余技术的倒退。编程语言倒退至今,个性的相互借鉴的状况越来越广泛,语言生态互通也更常见(如间接兼容,或者 Bridging 技术),编译型和解释型界线也越来越含糊(比方 Dart 既能编译运行也能解释运行,还能边解释运行边编译),语言之间的性能差别也越来越小(V8 引擎,JIT,硬件性能进步),语言之间的相互转换也开始广泛(Kotlin to Java to JavaScript,Dart to Javascript)。甚至,在 AI 的加持下,精确的把具备垃圾回收语言(如 Kotlin)往没有垃圾回收语言(如 C)的转换,也变得可能。

如果应用 AI 做预处理,动态检查和类型平安的语言没有了劣势。如果应用 AI 辅助编程,咱们甚至发现咱们不是在写代码,而是在跟 AI 聊天(如最近很火的 chatGPT)!这时你还会纠结 AI 在应用什么编程语言吗?高级编程语言倒退的黄金时代行将闭幕。咱们很难再看到像垃圾回收、空平安、异步等让咱们兴奋不已的新语言个性了。当然,编程语言还是会持续往更平安、人性化(可读性、可写性)、跨平台这三个方向进行倒退。

然而 AI 辅助编程的呈现让编程语言的使用者产生了一些变动,编程语言将同时被人类和 AI 独特应用——基于这个方向,编程语言的可读性 (精简、语义精确) 和跨平台会更加重要。

应用 Copilot 从 js 转换为 python

03、长期瞻望:二十年后的发展趋势是什么?

探讨这个问题,咱们要回到编程语言的初心:什么是编程语言?编程语言是被标准化的、用来向计算机收回指令、让程序员利用计算机能力的工具。

简而言之,编程语言只是咱们利用计算机能力的工具。小白用户能了解按钮、图片、短视频,计算机能了解汇编指令。这时须要一群聪慧的人把用户需要转换为机器代码,这群人用编程语言让这项工作变得简略。

二十年后咱们还须要一群人专门设计交互、视觉、框架、代码来架起小白用户应用计算机的桥梁吗?兴许到那时的人们兴许分不清 AI 和计算机的区别了,到那时利用计算机的能力兴许就像咱们当初跟共事谈话交换一样简略。

兴许你会感觉 AI 也须要编程语言去实现,以不便后续的保护和迭代。然而兴许那时 AI 曾经具备本人保护代码的能力了,兴许人类曾经看不懂什么是 C++、Python,只有 AI 懂了,甚至 AI 本人创造新的编程语言编写了下一代的 AI(AI 可能曾经感觉可读性是个包袱了,间接写机器代码不是更爽?)。就如第一个 C 语言编译器是用汇编写的,前面 C 语言编译器是用 C 语言写的一样。咱们后面探讨的大部分的编程语言注定回到了历史的垃圾桶里。原本无一物,何处惹尘埃。

笔者认为,编程语言兴许将在历史的倒退中失去了作用和价值,成为将来博物馆中一个排列的展品,向世人展现人类过来经验的苦难。

以上便是作者从业多年的感想全部内容。当然,这只是笔者的一己之见。编程语言孰是孰非?想必见仁见智、言人人殊。那在你心目中,谁是世界上最好的编程语言呢?你最看好哪个语言?欢送各位开发者在评论区交换分享。

-End-

原创作者|李杨

技术责编|李杨

你可能感兴趣的腾讯工程师作品

| 腾讯工程师聊 ChatGPT 技术「文集」

| 小程序是如何设计百亿级用户画像剖析零碎的?

| 微信全文搜寻耗时降 94%?咱们用了这种计划

| 10w 单元格滚动卡顿如何解决?腾讯文档的 7 个秘笈

技术盲盒:前端|后端|AI 与算法|运维|工程师文化

正文完
 0