最近,TIOBE在2020年5月公布了编程语言列表。c语言时隔五年重回榜首,Java和Python分别排名第二和第三。
前段时间,b站推出的青年节演讲视频《后浪》在朋友圈风靡荧屏,观看了“后浪”丰富多彩的生活。同事笑自己是在沙滩上拍的那个,被生活疯狂蹂躏。
然而,在编程语言领域,由“后浪”引起的波澜非常有限。与近年来层出不穷的新兴编程语言相比,那些出道几十年的“前浪”似乎无意让位给他人。
在TIOBE公布的最新编程语言榜单中,十大语言中有八种诞生于20世纪90年代,最年轻的是2001年诞生的C#,排名榜首的C语言已经有48年的历史。
如果我们再看看2002年以来的编程语言排名,这些老编程语言基本都还在图中,尤其是C和Java这两个“前浪”大佬,一直都难以撼动。
在过去的几十年里,出现了许多新兴的编程语言,其中一些语言旨在取代一些旧的语言。编程语言领域的这些“后浪”能赶上“前浪”吗?让我们来看看近年来编程界众所周知的“后浪”。
1.前浪C++VS后浪Go
诞生于2009年的Go语言,堪称编程语言中的“第二代明星”。《围棋》的早期作者有三位,分别是罗布·派克、肯·汤普森和罗伯特·格里森默,他们每个人都有很多贡献。
罗布·派克是贝尔实验室Unix团队和Plan 9操作系统计划的成员。他与Thompson合作多年,创建了广泛使用的UTF-8字符编码。
肯·汤普森是B语言和C语言的作者,Unix之父,1983年图灵奖和1998年美国国家技术奖获得者
在开发Go之前,Robert Griesemer是谷歌V8、Chubby和HotSpot JVM的主要贡献者
2007年,Rob Pike认为C++在谷歌分布式编译平台上的编译过程太长,于是他和Robert Griesemer开始讨论“简化的编程语言会比在臃肿的语言上增加新的特性取得更大的进步”
他们一拍即合,立即说服了身边的肯·汤普森。三人决定玩一种新的语言。几天后,他们在谷歌内部启动了一个名为Golang的项目。很快,一种在C语言基础上优化的新语言诞生了,这就是Go
作为一种旨在取代C/C++的新语言,Go的语法在很多地方都借鉴了C/C++的经验。例如,使用大括号作为分隔符,分号作为语句等。,使得Go很容易被精通C/C++的开发人员接受。
Go在遵循C/C++基本语法的基础上,为当前流行的分布式系统增加了超轻线程goroutine等许多实用功能。在高度并发的系统中,程序可以以多线程的方式编写,从而确保清晰简单的逻辑,并获得非常高的性能
同样的事情需要在C++中调用第三方框架。如果使用多线程,过多的系统线程会导致大量的上下文切换开销;;如果采用基于消息的架构,虽然可以达到很高的效率,但是程序逻辑会被打散,可读性和可维护性会比较差。
此外,Go语言作为谷歌大力支持的“亲儿子”,拥有编译、测试、调试、性能分析等一整套成熟的工具,编译效率极高。此外,它还内置了许多后端系统开发中常用的库,如http、json、xml、正则表达式等。,所以它可以说是一种非常成熟的工程开发语言。
在这方面,C++需要使用大量的第三方开源工具或库,在工程上需要花费更多的精力在技术选择上,不利于后期的维护。
基于以上优势,Go语言被公认为非常适合构建命令行实用程序和网络服务,尤其适合云计算场景下的高并发应用。广泛流行的容器引擎Docker和容器编排系统Kubernetes都是用Go编写的,所以Go被一些人称为“容器语言”。
虽然Go在很多方面已经超越C/C++并在云原生相关领域占据一席之地,但在大量工业基础设施终端中,C/C++语言的地位依然难以撼动。
C/C++的优势还在于它的运行效率。如果是底层设备驱动、内核空之间的操作系统组件等需要严格控制内存布局和管理的任务,C依然是最佳选择。
目前,Go在所有权威编程语言中名列前茅,并且一直在上升。目前,Go至少在“云”领域已经超越了前辈。
2、前浪C++ VS后浪Rust
Rust是继Go之后又一个试图取代C/C++的新语言。2010年前后,随着大规模业务的扩张和分布式计算的普及,Graydon Hoare和Rob Pike一样,看到了C++等传统编程语言在高并发场景下的缺陷,试图创造更好的语言来替代。
Rust最初是Graydon在2006年启动的个人项目,得到了Mozzila基金会的支持,Graydon本人在2009年加入Mozzila公司,带领团队完善Rust语言的开发。
2010年,墨子拉正式揭露铁锈的存在。2013年,Mozzila基金会宣布与三星合作开发Rust语言的浏览器引擎Servo,成为第一个用Rust编写的大型项目。2015年,Rust 1.0的第一个正式版本发布。
Rust最初是Mozilla为了解决软件在语言层面无法真正利用多核计算带来的性能提升的问题而创建的,这与Go有些类似。
与它的前身C++相比,Rust在代码安全性方面做了很大的努力。比如内存安全方面,Rust在安全代码中不允许空指针、尾指针和数据竞争,这些问题在编译阶段无法通过。
Rust社区的核心开发者Nichols说:“以前,我们只能用C或C++来编写高质量的低内存占用的代码空。但是,在生产代码中使用这些语言需要您手动管理内存,并了解所有可能导致未定义行为的方法。”
尼科尔斯指出,不断扩大的CVE代码漏洞数据库证明,即使是最好的程序员也厌倦了处理无穷无尽的代码漏洞。“为了保证你安全使用内存,Rust编译器非常严格,让你可以专注于你真正想解决的问题。”
虽然Rust因其代码安全特性赢得了部分开发者的青睐,但在性能和语法上颠覆C/C++还不够,学习曲线也不平滑。所以和围棋这个大家庭相比,它的早期发展是不温不火的。
直到去年7月,微软突然宣布将拥抱Rust,并探索使用Rust作为C/C++和其他语言的安全替代方案,以提高应用程序的安全性。
微软认为Rust是目前业界系统编程的最佳选择,不仅因为它可以以内存安全的方式编写系统级程序,还因为它的精度
微软此举让Rust在开发者中的地位飙升,越来越多的企业和个人开始关注代码安全问题,从而重新审视这种新语言
这主要体现在2020年以来围绕Rust语言发生的几件事上:
1.Linux内核维护者表示愿意接受使用Rust开发Linux驱动程序
2.AWS宣布赞助Rust
3.微软更进一步,在今年年初开发并开放了一种受Rust启发的新编程语言Verona
4.最近,苹果也站出来拥抱它,并计划将一些C代码移植到Rust
目前Rust语言的发展总体上还是比较缓慢的。根据最新的调查报告,大部分不愿意接受Rust的开发者认为,Rust目前存在的问题主要在于学习曲线陡峭,缺少所需库,缺乏IDE支持。可以说,Rust的发展还有很长的路要走。
3.前波目标-C VS后波快速
Swift是为数不多的成功拍打海滩“前浪”的“后浪”之一。
2010年,或许是受到谷歌推出Go的启发,苹果高管也决定开发一种新的编程语言来取代已经使用了几十年的Objective-C。克里斯·拉特纳是第一个接受这项任务的人。
Chris大学毕业前就成为了知名的编译器专家,硕士期间发表的论文为LLVM框架的开发奠定了基础。加入苹果后,克里斯创建的LLVM+Clang成为苹果软件产品的编译框架。Swift语言是克里斯继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++,比o C快近1.4倍。
Swift诞生后,苹果软件的开发者只需要维护一半的原始代码文件,大大提高了开发效率,降低了维护成本。
目前,Swift几乎完全取代了Objective-C,成为苹果旗下MacOS和iOS的主流开发语言,很多刚入行的iOS新开发者甚至连Objective-C都没有接触过..不出意外,在不久的将来,Objective-C很可能会被逐渐遗忘。
然而,Swift团队的目标似乎远不止杀死老大哥。在即将到来的5.3版本中,Swift将会加大对Windows等Linux发行版PC操作系统的支持,后续的开发我们也会持续关注。
4、前浪JavaScript VS后浪Dart
Dart是继Go之后,谷歌工程师制造的又一款车轮。像Go一样,Dart最初是一群谷歌工程师,他们认为JavaScript不太好,所以他们想重新创建一种更好的语言来代替它,所以他们有了Dart。
谷歌工程师认为JS从设计到发布的时间非常短,在语言规范和谨慎性上存在固有的不足,如语法松散、缺乏模块化、核心库不完整、编程语言范式不清晰等。,并且很难以改进的方式修复它们。
其实谷歌工程师多年来为提升JavaScript的性能做出了很多贡献,尤其是通过V8引擎加强了JIT对JS的编译能力,让Chrome浏览器的性能永远不可忽视。这足以说明,在当时的谷歌工程师眼中,JavaScript确实存在很多问题。
起初,Dart是作为运行在浏览器中的脚本语言而诞生的。谷歌还在Chrome中构建了一个dartmv引擎来推广Dart。得益于Chrome庞大的用户群,这一举措让Dart积累了相当多的早期用户群。
我以为Dart可以在谷歌的护航下稳步发展,赶超JavaScript。然而,谷歌没有想到的是,一个Node.js在半路上被杀了。
Node.js是一个JavaScript运行环境,使JavaScript能够开发后端程序,实现几乎所有其他后端语言实现的功能,这意味着JavaScript可以与PHP、Java、Python、。NET、Ruby等后端语言。
自此,“任何能用JavaScript编写的应用程序,最终都会用JavaScript编写”在圈内广为流传。值得一提的是,Node.js是基于谷歌自己的开源JavaScript引擎V8开发的。
V8最初被用作Chrome到JavaScript的解释器。天才Ryan Dahl把V8搬到服务器上,用它做服务器软件,成功了。在接下来的几年里,前端开发的模式因JavaScript而发生了变化,基于JavaScript的明星项目如React、React-Native、Vue等迅速崛起,Dart逐渐被遗忘在角落里。
然而,谷歌从未放弃Dart。2018年,谷歌重构Dart,并于8月发布Dart 2.0版本,将其重新定义为支持Web和移动客户端两种开发方式的语言,拥有丰富的工具箱和组件。
同年12月,谷歌发布了Dart编写的跨平台应用开发工具Flutter,使Dart能够在服务器端编写命令行程序,并在前端编译JavaScript在浏览器中运行。
随后,谷歌开始了新一轮的推广全新Dart的努力,包括为另一个知名前端框架Angular推出相应的Dart版本,并将Dart指定为未来操作系统Fuchsia的官方开发语言等。,Dart社区再次充满活力。
可以说,Dart作为一种运行在浏览器中的脚本语言,在诞生的最初几年就被它的前身JavaScript彻底打败了。如今,乘着“大前端”的变革浪潮,超越JavaScript已经不现实,但Dart依然是未来极具潜力的“后浪”代表。
5、前浪爪哇VS后浪科特林
Kotlin是谷歌继Go之后赢得的一种新的编程语言。Kotlin出生于2010年,来自JetBrains,2012年正式开业。Kotlin最初旨在创建一种兼容Java的编程语言,并使其优于Java。
作为一种相对较新的JVM语言,Kotlin得到了谷歌的大力支持。2017年,谷歌在I/O开发者大会上正式宣布Kotlin为官方安卓开发语言。两年后,在I/O大会上,谷歌再次添加了Kotlin,并宣布其成为Andoid开发的官方首选语言
Kotlin的语法结合了Scala、Groovy、Python、Swift和许多其他语言的特性。如果你使用过其中的任何一个,那么开始使用Kotlin将非常容易。与Java相比,Kotlin引入了函数式编程,并且有各种语法糖来简化代码量。
然而,与其他试图取代“However”的新语言不同,Kotlin正在走一条与Java 100%兼容的道路。众所周知,Java之所以屹立不倒这么多年,是因为其多年积累的庞大生态,包括丰富的函数库、IDE、编译器、成熟的应用生态等等。
Kotlin可以调用绝大多数的Java库,可以直接使用Java现有的生态,所以很多开发人员选择将Kotlin和Java混合使用。
由于采用了与前辈和谐共存的模式,Kotlin已经超越Scala和Clojure成为JVM上第二热门的语言,尤其是在Android开发领域,得到了国内外众多开发者的认可,也是一股大有可为的优秀“后浪”。
6.结论
在这些21世纪后诞生的以取代旧语言为目的的新语言中,只有极少数语言能够成功取代“前浪”。有些人利用新技术,成为新领域的行业标杆。他们中的一些人与“前浪”和谐发展,等待未来的反击。
当然,更多的消失在历史的长河中,甚至没有一丝涟漪...
原因是流行的语言如C/C++、Java、Python、JavaScript等。,虽然大部分都诞生于上个世纪,但它们一直在不断针对新时代的需求进行优化,并且经历了几十个甚至上百个版本,而且很多语言与诞生之初完全不同。
此外,丰富的系统函数库、IDE、编译器、应用生态等。,这是他们几十年积累下来的,让“后浪”难以匹敌。
从商业角度来看,在行业格局没有颠覆性变化的情况下,现有的流行语言依靠多年积累的庞大用户群,足以形成垄断。
即使出现更好的新语言,他们也能快速吸收这些新语言的优秀特性,就像大企业合并小企业或者直接复制他们优秀的业务功能一样,让自己变得更好,更容易被大多数开发者接受。
所以,要想在编程语言世界里拍出沙滩上的“前浪”,那“后浪”还有很长的路要走。
最后,用一千个单词来填充空问题:
_ _ _ _是世界上最好的语言!!