编程语言70年:谁是世界上最好的编程语言?

导语 | 客户端开发想要在多种生态中生计,有必要娴熟运用各种渠道的环境和言语。许多开发者的职业生涯,触及多个渠道生态以及对应的原生编程言语。本文作者李杨不拘泥于某个言语或许特性,从言语的开展和前史的视点聊聊编程言语的开展。各个编程言语之前有何相关?编程言语界谁能笑到最终?欢迎阅览本文并进行探讨。

目录

1 编程言语开展史纵览

2编程言语未来二十年开展趋势

3 长时刻展望:二十年后的开展趋势是什么?

01、编程言语开展史纵览

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

首要,咱们从时刻维度入手聊聊编程言语。一图胜千言,咱们从现在干流的编程言语中,挑选出盛行的、具有前史影响力的言语。把它们按时刻从上往下排序,根据类型和指导思维进行聚类,根据相互的影响运用线条指向。在补充了一些要害性的特征和点评之后,我整理出下图:

编程语言70年:谁是世界上最好的编程语言?

整理图的进程中,我发现许多风趣的点。让咱们按时刻顺序从上往下讲这张图。

编程语言70年:谁是世界上最好的编程语言?

1950-1959这期间呈现了第三代高档言语的开山祖师:Fortran 和 Lisp。而且在 1958 年现已提出了结构化编程、递归、反常、函数式、指令式、废物收回等现在常用的概念。现在用到的大部分言语特性的理论的呈现比咱们想象的早。

编程语言70年:谁是世界上最好的编程语言?

1960-1969:这一阶段,IBM 的 ALGO 系列言语主要是对理论概念的探究和实践,经过两个版别后诞生出 ALGO60 里程碑式的著作。这奠定了现代高档编程言语的根底。同时这期间也有 Basic 言语降了低编程门槛,并第一次引入了「类型后置」的语法以更契合人类阅览习气。

咱们持续往右看,发现一个共同的系列:CPL 和 BCPL。这两个言语首次阐释了「特性不是越多越好」的黄金准则。因为拉长时刻看,CPL 是第一个想成为大而全的言语。从 CPL 到 BCPL 到 C,都是在不断的削减特性;从 C 到 C++再到 C++20,特性又在不断添加。这时你就会了解为什么 C++言语会对添加新特性是那么谨慎和当心,可是仍是阻挠不了让 C++ 变成下一个 CPL 的脚步。

1967 年诞生的 Simula64 提出了面向对象思维。面向对象思维开端开展。

编程语言70年:谁是世界上最好的编程语言?

1970-1979这一年诞生出两个影响力极大的言语:Smalltalk 和 C。偶然的是这两个言语都是在 1972 年发布的。Smalltalk 一定程度上承继了 Basic 远离机器、接近人类的探究办法,发扬了言语动态性的思维,探究了面向对象的思维,模糊了编译型言语和解说型言语的鸿沟,对后续的动态言语、脚本言语、客户端言语产生了深远的影响。

C 言语的诞生是为了满意 Unix 。其时 Unix 运用 BCPL 或 B 言语都无法满意操作系统对编程言语的要求,因而 C 言语应运而生。抛开言语特性,咱们也能发现 C 言语的优势有十分多:不但有需求(开发操作系统的动机),还有阅历的加成(测验了 BCPL 和 B 言语,积累了许多的运用阅历),而且遇到了好项目(Unix 操作系统),被最聪明的一群人运用(Unix 操作系统开发工程师)。这些注定了 C 言语具有强壮的生命力。这期间编程言语的思维现已老练,在面向对象思维在 Smalltalk 的推进下,C 言语成为下一阶段新言语的首捧。

编程语言70年:谁是世界上最好的编程语言?

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 了(做了这么多项目下来,发现面向对象许多时分是过度规划的源泉)。

编程语言70年:谁是世界上最好的编程语言?

1990-1999:这是编程言语开展最快速的年代。这得益于核算机平民化和图形界面的开展,核算机进入千家万户、运用开发的需求激增。

编程言语的诉求开端发生改变:对功能要求变弱,而对安全(内存安全,线程安全)、人性化(可读性,表达力,低门槛)、动态性等提出更高要求。首要登场的是 VisualBasic。它强化了 IDE 和编程言语的结合,降低了运用开发门槛。

编程语言70年:谁是世界上最好的编程语言?

接下来,到现在仍十分火的 Python 诞生了。Python 诞生在要害字和语法越来越复杂的年代。于是反其道而行之,寻求简练的语法。最具有标志性的是为了省略“{}”直接用「空格缩进」来划分代码块(这种语法首创是 1966 年的ISWIM言语)。

风趣的是,Python 寻求的简练语法,不是其成功的要害(因为 IDE 的前进,这种语法的形式中心价值现已消失),Python 成功的要害在于其出色的扩展性和跨渠道。这让 Python 长时刻稳坐解说型言语头把交椅,而且后来的同类言语都很难逾越。另一方面,Python 提出的「一件事最好是只要一种办法来做」的理念,贯穿言语规划,也成就了其优异的学习曲线和低门槛的优点。所以一门言语能让人快速上手也是其中心竞争力。

编程语言70年:谁是世界上最好的编程语言?

时刻来到 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 的不少地方现已落后于年代,咱们急需一门新的言语或许革命来扔掉它

编程语言70年:谁是世界上最好的编程语言?

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++的弊端不能完全废除,属于改良派。

编程语言70年:谁是世界上最好的编程语言?

过了 3 年,Rust 横空出世。Rust 在理念上有很大的前进,比方尽管没有废物收回器。可是强制运用者清晰对象的所有权,经过所有权编译器能够在合适的机遇开释内存。这是盛行言语第一次不运用废物收回办法处理内存管理问题,在功能上比废物收回有着极大的优势。尽管功能无损,可是比较废物收回形式更需求开发者编码时添加对象所有权的考虑进程。即便如此,这也比在 C++花几个星期处理内存拜访反常的问题好的多。Rust 属于改革派。重新审视 C++的运用场景,对言语特性重新规划,这真的是一次精彩的测验。个人以为,Rust 也比 D 言语愈加成功。

编程语言70年:谁是世界上最好的编程语言?

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

Go 的诞生是一个十分好的时刻节点。除了剔除许多 Java 的弊端,还直击运用场景的痛点,在功能(多核,网络,并发)上着重发力,前进了一大步!

另外,Go 在工程上的成功,展现其了语法特性上的新测验:Go 言语是近代第一个捡起类型后置的言语,供给了丰厚的语法糖(如:=)使得代码简短并语义清晰,这直接影响了后面的 Swift,Rust、Kotlin 等有着改革大志的言语。Go 的成功除了 Go 的优异因素外,咱们也发现:瞄准细分运用场景的言语,在工程上是十分具有生机的。

编程语言70年:谁是世界上最好的编程语言?

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。言语风格一天切换好几次,这反而十分不人性化。

编程语言70年:谁是世界上最好的编程语言?

Dart 没有很好地成为 JavaScript 的接班人,谁能想到下一年的 TypeScript 火起来了?TypeScript 挑选和 Dart 不同的办法接班——比较 Dart 激烈的办法,TypeScript 完全兼容 JavaScript。TypeScript 还添加一些语法让编译器把过错提早露出,大大增强了 JavaScript 的安全性,给 JavaScript 狠狠的续了一命,让 JavaScript 能够持续「荼毒」程序员们。话说回来,Dart 在安全性、功能方面都给 JavaScript 带来了巨大的前进,也祝福 Dart 最终能顺利接班。

编程语言70年:谁是世界上最好的编程语言?

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 友爱等多维度各有开展、取舍、学习。

同时咱们也发现:编译型和解说型言语鸿沟逐步模糊,语法盛行替换更迭,语法语义愈加清晰,言语的目标范畴愈加细化。别看近十几年新言语出了那么多,语法花里胡哨,其实许多言语同质化严重。类型后置也是早就玩过的,每个年代盛行不同罢了。前面咱们顺着时刻简略过了一遍图中的部分言语,这张大图能够帮助各位梳理思路。

编程语言70年:谁是世界上最好的编程语言?

02、编程言语未来二十年开展趋势

编程言语的开展离不开核算机范畴其他技能的开展。编程言语开展至今,特性的相互学习的情况越来越普遍,言语生态互通也更常见(如直接兼容,或许 Bridging 技能),编译型和解说型鸿沟也越来越模糊(比方 Dart 既能编译运转也能解说运转,还能边解说运转边编译),言语之间的功能差异也越来越小(V8 引擎,JIT,硬件功能前进),言语之间的相互转化也开端普遍(Kotlin to Java to JavaScript,Dart to Javascript)。甚至,在 AI 的加持下,精确的把具有废物收回言语(如 Kotlin)往没有废物收回言语(如 C)的转化,也变得或许。

假如运用 AI 做预处理,静态查看和类型安全的言语没有了优势。假如运用 AI 辅佐编程,咱们甚至发现咱们不是在写代码,而是在跟 AI 谈天(如最近很火的 chatGPT)!这时你还会纠结 AI 在运用什么编程言语吗?高档编程言语开展的黄金年代即将落幕。咱们很难再看到像废物收回、空安全、异步等让咱们兴奋不已的新言语特性了。当然,编程言语仍是会持续往更安全、人性化(可读性、可写性)、跨渠道这三个方向进行开展。

可是 AI 辅佐编程的呈现让编程言语的运用者发生了一些改变,编程言语将同时被人类和 AI 共同运用——根据这个方向,编程言语的可读性(精简、语义精确)和跨渠道会愈加重要。

编程语言70年:谁是世界上最好的编程语言?

运用Copilot从js转化为python

03、长时刻展望:二十年后的开展趋势是什么?

探讨这个问题,咱们要回到编程言语的初心:什么是编程言语?编程言语是被规范化的、用来向核算机发出指令、让程序员利用核算机才能的东西。

简而言之,编程言语仅仅咱们利用核算机才能的东西。小白用户能了解按钮、图片、短视频,核算机能了解汇编指令。这时需求一群聪明的人把用户需求转化为机器代码,这群人用编程言语让这项作业变得简略。

二十年后咱们还需求一群人专门规划交互、视觉、框架、代码来架起小白用户运用核算机的桥梁吗?或许到那时的人们或许分不清 AI 和核算机的区别了,到那时利用核算机的才能或许就像咱们现在跟搭档说话沟通相同简略。

或许你会觉得 AI 也需求编程言语去完成,以方便后续的保护和迭代。可是或许那时 AI 现已具有自己保护代码的才能了,或许人类现已看不懂什么是 C++、Python,只要 AI 懂了,甚至 AI 自己创造新的编程言语编写了下一代的 AI(AI 或许现已觉得可读性是个包袱了,直接写机器代码不是更爽?)。就如第一个 C 言语编译器是用汇编写的,后面 C 言语编译器是用 C 言语写的相同。咱们前面谈论的大部分的编程言语注定回到了前史的废物桶里。本来无一物,何处惹尘埃。

笔者以为,编程言语或许将在前史的开展中失去了作用和价值,成为未来博物馆中一个陈设的展品,向世人展现人类曩昔阅历的苦难。

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

-End-

原创作者|李杨

技能责编|李杨

你或许感兴趣的腾讯工程师著作

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

|小程序是怎么规划百亿级用户画像分析系统的?

| 微信全文查找耗时降94%?咱们用了这种方案

|10w单元格滚动卡顿怎么处理?腾讯文档的7个秘笈

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

阅览原文