前段韶光,B 站推出的青年节演讲视频《后浪》在朋友圈刷屏,看着“后浪”们丰富多彩的生活,同事们纷纭自嘲自己便是被拍在沙滩上的那一个,被生活猖獗蹂躏。
然而在编程措辞界,“后浪”们掀起的波澜则十分有限。与近年来陆续呈现的新兴编程措辞比较,那些出道即顶峰、一巅几十年的“前浪”们,彷佛还没有要逊位让贤的意思。
在 TIOBE 公布的最新编程措辞排行榜中,排名前十的措辞中有 8 个出身于上个世纪 90 年代,最“年轻”的是出身于 2001 年的 C#,而位于榜首的 C 措辞距今已有 48 年的历史。

如果我们再来纵不雅观自 2002 年以来的编程措辞排行榜,基本上也还是这些老牌编程措辞的身影,尤其是 C 与 Java 这两位“前浪”老大哥的江湖地位一贯难以撼动。
数十年来,陆续涌现的新兴编程措辞不在少数,个中不乏一些以取代某种老措辞为目的而设计的,那么这些编程措辞界的“后浪”们,是否能够追上“前浪”们的脚步呢?下面不妨让我们来看看这些年编程界的有名“后浪”们。
1、前浪 C++(1979)VS 后浪 Go(2009)出身于 2009 年的 Go 措辞堪称编程措辞中的“星二代”。Go 的早期作者有三人,分别是 Rob Pike,Ken Thompson 和 Robert Griesemer,每一位的来头可都不小。
Rob Pike 曾是贝尔实验室的 Unix 团队以及 Plan 9 操作系统操持的成员,与 Thompson 共事多年,并共创出广泛利用的 UTF-8 字元编码
Ken Thompson 则是 B 措辞、C 措辞的作者,Unix 之父,1983 年图灵奖和 1998 年美国国家技能奖得主
而 Robert Griesemer 在开拓 Go 之前是 Google V8、Chubby 和 HotSpot JVM 的紧张贡献者
2007 年,Rob Pike 认为 C++ 在 Google 分布式编译平台上的编译过程太过漫长,于是他和 Robert Griesemer 开始磋商 “简化编程措辞比较于在臃肿的措辞上不断增加新特性,会是更大的进步”
两人一拍即合,随即说服了身边的 Ken Thompson,三人决定要捣鼓一门新措辞。几天后,他们在 Google 内部发起了一个叫 Golang 的项目 。很快,一个在 C 措辞根本上进行了优化的新措辞出身了,这便是 Go
作为一个设计目的便是为了取代 C/C++ 的新措辞,Go 的语法在很多地方借鉴了 C/C++ 。比如用花括号作为定界符,以分号作为语句结束等等,这使得 Go 很随意马虎就能被精通 C/C++ 的开拓职员接管。
而在沿袭 C/C++ 基本语法的根本上,Go 新加入了很多针对当下流行的分布式系统的实用功能,比如超轻量级的线程 goroutine,在高并发的系统中,可以按照多线程的办法写程序,从而担保逻辑的清晰和大略,又可以得到非常高的性能
而同样的事情在 C++ 中则须要调用第三方框架,如果用多线程,会导致系统线程过多带来大量的高下文切换 overhead;如果采取基于的架构,虽然可以得到较高的效率,但程序逻辑会被打散,可读性和可掩护性较差。
此外,Go 措辞作为 Google 大力支持的“亲儿子”,拥有编译、测试、调试、性能剖析等一整套成熟的工具,编译效率极高,再加上其还内置了 http、json、xml、正则表达式等很多后端系统开拓中常用的库,可以说是一门已经非常成熟的工程化开拓措辞。
而在这方面,C++ 则须要用到大量的第三方开源工具或库,在工程上须要花费更多的精力进行技能选型,同时也不利于后期掩护。
基于上述的优点,Go 措辞被公认为非常适宜构建命令行实用程序和网络做事等,尤其是云打算场景下的高并发运用,如今广泛盛行的容器引擎 Docker、容器编排系统 Kubernetes 都是用 Go 编写的,Go 也因此被一些人称为“容器措辞”。
虽然 Go 在很多方面已经超越 C/C++,并且在云原生干系领域霸占了一席之地,但是仍旧难以撼动 C/C++ 措辞在大量工业根本举动步伐终真个地位。
C/C++ 的上风仍旧在于它的运行效率,如果是低级设备驱动程序、内核空间操作系统组件以及其他须要严格掌握内存布局和管理的任务,C 依然是不二之选。
目前,Go 在各种威信编程措辞排行榜上都名列前茅,且一贯呈上升趋势,在云原生培植风起云涌地当下,Go 至少在“云”这一领域已经完成了对前辈的超越。
2、前浪 C++(1979) VS 后浪 Rust(2010)Rust 是继 Go 之后另一个试图取代 C/C++ 的新措辞。2010 年前后,随着大规模业务的拓展和分布式打算的盛行,Graydon Hoare 也和 Rob Pike 一样看到了 C++ 等传统编程措辞在高并发场景下的毛病,试图创造更精良的措辞来替代它们。
Rust 原来是 Graydon 从 2006 年开始捣鼓的个人项目,随后该项目得到了 Mozzila 基金会的帮助,而 Graydon 本人也于 2009 年加入 Mozzila 公司,带领团队完善 Rust 措辞的开拓。
2010 年,Mozzila 正式对外透露了 Rust 的存在。2013 年,Mozzila 基金会宣告将与三星互助,利用 Rust 措辞开拓一款浏览器引擎 Servo,成为首个利用 Rust 编写的大型项目。2015 年,Rust 首个 1.0 正式版发布。
Rust 最初是 Mozilla 为理解决软件在措辞级别上无法真正利用多核打算带来的性能提升而创建的,这一点与 Go 有些类似。
比较前辈 C++,Rust 在代码安全这一特性高下足了功夫。比如内存安全方面,Rust 在安全代码里不容许空指针、悬垂指针和数据竞争,这些问题在编译阶段就无法通过。
Rust 社区核心开拓者 Nichols 表示:“之前,我们只能利用 C 或者 C++ 才能编写具有较低内存占用空间的高质量代码。但是,在生产代码中利用这些措辞须要你手动管理内存并理解可能导致未定义行为的所有方法。”
Nichols 指出,不断扩展的 CVE 代码漏洞数据库证明,纵然是最精良的程序员也疲于应对层出不穷的代码漏洞。“为了确保你安全地利用内存,Rust 编译器非常严格,这样你就可以专注于你真正想要办理的问题。”
只管 Rust 凭借其代码安全的特性得到了部分开拓者的青睐,但由于其无论是在性能还是语法上,均不敷以颠覆 C/C++,再加上其学习曲线并不平滑,因此与“家大业大”的 Go 比较,Rust 在前期的发展不温不火。
直到去年 7 月,微软溘然宣告将拥抱 Rust,探索用 Rust 作为 C/C++ 和其他措辞的安全替代方案,以此来改进运用程序的安全状况。
微软认为 Rust 是目前业界系统编程的最佳选择,缘故原由不仅是它能够以内存安全的办法编写系统级程序,还在于其精密性
微软此举让 Rust 在开拓者中的地位直线上升,越来越多的企业和个人开始关注并重视代码安全的问题,从而重新核阅这门新措辞
这紧张表示在 2020 年以来环绕 Rust 措辞发生的几件事情:
Linux 内核掩护者表示乐意接管用 Rust 开拓 Linux 驱动AWS 宣告资助 Rust微软更进一步,在今年年初开拓并开源了受 Rust 启示的新编程措辞 Verona最近,苹果也站出来拥抱它,操持将部分 C 代码移植到 Rust目前,Rust 措辞的发展总体来说仍旧比较缓慢,根据最新的一份调查报告显示,大多数不愿意接管 Rust 的开拓者认为,Rust 目前的问题紧张在于学习曲线陡峭、短缺所需的库、缺少 IDE 支持等。可以说,Rust 的发展仍旧任重道远。
3、前浪 Objective-C(1986) VS 后浪 Swift(2014)Swift 是为数不多的成功把“前浪”拍在沙滩上的“后浪”。
2010 年,或许是受到竞争对手 Google 推出 Go 的启迪,Apple 高层也决定开拓一套新的编程措辞,用以替代利用了数十年的 Objective-C,而最早接到这个任务的人正是 Chris Lattner。
Chris 在大学还没毕业的时候就成为了业内有名的编译器专家,其硕士期间揭橥的论文奠定了 LLVM 框架的发展根本。在加入 Apple 公司往后,Chris 创造的 LLVM + Clang 成为了 Apple 软件产品的编译框架。而 Swift 措辞便是 Chris 继 LLVM 与 Clang 之后的又一力作。
Swift 是一门博采众长的当代措辞,在设计的过程中,Chris 参考了 Objective-C、Rust、Haskell、Ruby、Python、C# 等措辞的优点,终极形成了 Swift 的语法特性。
与前辈 OC 比较,Swift 的语法更加简洁,例如行尾不再须要分号,if/else 语句也不须要括弧,调用方法时 [ ] 也不再嵌套,支持字符串插入,省略了 OC 中的 %s,%d,%@ 等等。
同时,Swift 把 oc 头文件 .h 和实现文件 .m 合并成了一个代码文件 .swift,使得Swift 代码更易于掩护。最主要的是,善于优化的苹果工程师让 Swift 的运行速率能够逼近 C++,是 OC 运行速率的近 1.4 倍。
在 Swift 出身往后,苹果软件的开拓者只须要掩护原来一半量的代码文件,大大提高了开拓效率,降落了掩护本钱。
目前,Swift 险些已经完备取代 Objective-C ,成为苹果旗下 MacOS 、iOS 的主流开拓措辞,很多刚刚入行的 iOS 新人开拓者乃至没有打仗过 Objective-C 。不出意外的话,Objective-C 很有可能在不久的将来被人们逐渐遗忘。
然而 Swift 团队的目标彷佛远不止于干掉老大哥这么大略,在即将发布的 5.3 版本中,Swift 将增加对 Windows 和其他 Linux 发行版 PC 操作系统的支持(目前仅支持 MacOS 和 Ubuntu),至于其后续发展如何,我们还将持续关注。
4、前浪 JavaScript(1995) VS 后浪 Dart (2011)Dart 是 Google 工程师们继 Go 之后造的又一个轮子。与 Go 类似,Dart 最初也是一群 Google 工程师以为 JavaScript 不太行,因此想要重新造一个更好的措辞取代它,于是就有了 Dart 。
Google 工程师认为,JS 当初从设计到发布的韶光极短(仅为 7 个月),在措辞规范和谨慎性方面存在先天不敷,比如语法过于疏松、缺少模块化能力、核心库不完备、编程措辞范型不明确等,且难以用改良的办法来修复。
事实上,Google 工程师多年来也为改进 JavaScript 的性能做出了诸多贡献,特殊是通过 V8 引擎强化了 JIT 对 JS 的编译能力,从而让 Chrome 浏览器的性能一骑绝尘。 这足以解释当时的 JavaScript 在 Google 工程师眼里确实存在很多问题。
Dart 最初也是作为一种在浏览器中运行的脚本措辞而生,Google 还专门在 Chrome 中内置了 一个 DartVM 引擎用来对 Dart 进行推广 。得益于 Chrome 弘大的用户体量,这一举措让 Dart 积累了规模可不雅观的早期用户群体。
原以为在 Google 的保驾护航下,Dart 能够稳步发展并终极赶超 JavaScript。然而令 Google 没想到的是,半路竟杀出了一个 Node.js 。
Node.js 是一个 JavaScript 运行环境,它让 JavaScript 可以开拓后端程序,实现险些其他后端措辞实现的所有功能,这意味着 JavaScript 可以与 PHP、Java、Python、.NET、Ruby 等后端措辞不相上下。
从那时起,“ 凡是能用 JavaScript 写的运用终将用 JavaScript 来写 ”开始在圈内广为流传。值得一提的是,Node.js 正是基于 Google 自己的开源 JavaScript 引擎 V8 开拓而来。
V8 本来是用于 Chrome 对 JavaScript 的阐明器,鬼才 Ryan Dahl 把 V8 搬到了做事器上,用来做做事器的软件并取得了成功。在今后的几年里,前端开拓的模式因 JavaScript 而改变,React、React-Native、Vue 等基于 JavaScript 的明星项目迅速崛起,Dart 逐渐被人们遗忘在角落。
然而 Google 一贯没有放弃 Dart 。2018 年,Google 对 Dart 进行了底层重构,并于 8 月推出了 Dart 2.0 版本,将其重新定义为一种同时支持 Web 和移动客户端开拓、具有丰富工具箱和组件的措辞。
同年 12 月,Google 发布了用 Dart 编写的跨平台运用开拓工具Flutter,让 Dart 能够在做事端编写命令行程序,同时在前端可以编译成 JavaScript 运行在浏览器中。
随后,Google 开始新一轮发力推广全新的 Dart ,包括为另一个有名前端框架 Angular 推出对应的 Dart 版本,指定 Dart 作为未来的操作系统 Fuchsia 的官方开拓措辞等,Dart 社区又抖擞了勃勃活气。
可以说在刚刚出身的前几年里,作为一门运行在浏览器中的脚本措辞,Dart 是完败于前辈 JavaScript 的。而如今乘着“大前端”的变革浪潮,要说超越 JavaScript 虽然也不太现实(毕竟“凡是能用 JavaScript 写的东西终将用 JavaScript 来写” ),但 Dart 在未来一段韶光里还是一个非常有潜力的“后浪”代表。
5、前浪 Java(1995) VS 后浪 Kotlin (2011)Kotlin 是 Google 公司继 Go 之后又一力捧的新编程措辞。Kotlin出身于 2010 年,出自 JetBrains,并于2012年正式开源。Kotlin 最初的设计目的是为了创建一种兼容 Java 的编程措辞,并让它比 Java 更好。
作为一门相比拟较新的 JVM 措辞,Kotlin 得到了 Google 公司的大力支持。2017年,Google 在 I/O 开拓者大会上官宣 Kotlin 正式成为 Android 官方开拓措辞 。两年后的 I/O 大会上,Google 再次加码 Kotlin,宣告其成为Andoid 开拓官方首选措辞
Kotlin 的语法领悟了 Scala、Groovy、Python、Swift 等浩瀚措辞的特性,如果利用过个中任意一门措辞,上手 Kotlin 将非常随意马虎。与 Java 比较,Kotlin 引入了函数式编程办法,同时有各种语法糖简化了代码量。
但与其他试图取代“前浪”的新措辞不同,Kotlin 走的是一条 100% 兼容 Java 的道路(打不过就加入)。众所周知,Java 这么多年耸立不倒的缘故原由是由于其发展多年积累的弘大生态,包括丰富的函数库、IDE、编译器、成熟的运用生态等等。
Kotlin 则可以调用 Java 的绝大多数库,也就可以直策应用 Java 现有的生态,因此很多开拓者选择混用 Kotlin 与 Java。
由于采取的是与前辈和谐共生的模式,目前Kotlin 已经超越 Scala 和 Clojure,成为 JVM 上第二大受欢迎的措辞,尤其是在安卓开拓领域得到了很多国内外开拓者的认可,也是一个非常有前景的精良“后浪”。
6、结语这些 21 世纪往后(2010 年前后)以取代老措辞为目的而出身的新措辞中,能够顺利取代“前浪”的措辞屈指可数。有的乘着新技能的东风在某一新兴领域成为了行业标杆。有的在与“前浪”的和谐共生中猥琐发育,静待日后的逆袭。
当然,更多的是消散在了历史的长河里,乃至没有泛起一丝荡漾……
究其缘故原由,如今仍旧盛行的措辞诸如 C/C++、Java、Python、JavaScript 等等,虽然它们大多数出身于上个世纪,但它们一贯以来也都在针对新时期的需求不断地优化,经历了数十个乃至上百个版本的更迭,很多措辞已经与出身之初完备不一样了。
再加上它们数十年来积累的函数库、IDE 、编译器、运用生态等自成一脉的丰富体系,让“后浪”们难以望其项背。
从商业的角度来说,在行业格局没有发生颠覆性变革的时候,现有的热门措辞依赖多年积累的弘大用户根本,就足以形成垄断。
就算有更好的新措辞涌现,它们也可以迅速接管这些新措辞的优秀特性,就像大企业吞并小企业,或者直接照搬它们精良的业务功能一样,让自己变得更好,也更随意马虎被大部分开拓者接管。
以是要想在编程措辞界把“前浪”们拍在沙滩上,“后浪”们要走的路还有很长很长。
末了,千言万语汇成一道填空题:
______ 是天下上最好的措辞!
!
[手动狗头]