首页 > 编程知识 正文

tiobe语言排名,tiobe编程语言排行榜2021年10月

时间:2023-05-05 16:42:01 阅读:179224 作者:1082

TIOBE发布了2020年9月的编程语言排行榜。 C语言仍然排在首位,后面是Java、Python、c和C#。 找到亮点了吗? 没错,成了第一易主。 C语言反而超越了Java。 时隔5年,c语言重返首位。 根据TIOBE CEO Paul Jansen的推测,“这听起来很不可思议,但有些编程语言可以从这种情况中获益。 '同时,与去年相比,C是目前增长最快的语言(1.48% )。 我认为C 20标准可能是其主要原因之一。 此次排名中指数没有明显变化,值得注意的是java占有率持续下降,从上个月的14.43%降至13.48%。 为什么会发生这样的变化呢?嵌入式语言(C 和 C++ 等)越来越流行,是因为它们被用于医疗设备软件中。

1972年诞生以来,c语言一直保持着生动活泼的状态,至今仍是构建软件世界的基础建筑材料之一。 经过几十年的研究和开发,C语言的地位仍然巩固。 在性能、裸机兼容性、通用性等方面,很少有语言能打败它。 但是,2020年c是如何和那些明星编程语言竞争的呢? 那个细节还值得一看。

C vs. C ++

当然,c最经常与c进行比较,正如其名字本身所暗示的那样,c是作为对c语言的扩展而制作的。 C和C的区别可以归结为C更广(夸奖)或更广(贬低),这取决于这个问题是问C还是C程序员。 (笑)

虽然在c的语法等方面仍然是c类,但是提供了很多母语c无法使用的非常实用的功能。 命名空间(名称空间)、模板(异常)、自动内存管理(automatic memory management )等。 对于要求顶级性能的项目(如数据库),机器学习系统项目通常用C编写,以便项目能够尽可能地集中和利用所有性能。

另外,与c相比,c继续积极扩大。 即将推出的C 20将为开发人员提供更多功能,包括模块、协作程序、同步库和概念,并提高模板的易用性。 C standard的最新版本有少量更新,重点是保持向后兼容性。

实际上,C的所有附加功能也可能成为负担。 而且是个大行李。 C使用的专用功能越多,部署的复杂性越大,结果越难修改。 通过将自己限定为只有一个C子集的开发人员,可以避免许多开发中的严重漏洞和额外负担。 但是,一些团队从根本上希望防止C的过度复杂性。 通过继续使用C,开发人员可以将自己限定为子集。 例如,Linux内核开发团队直接避开了C。

对于维护你的代码的开发者——或——来说,选择c而不是c是可行的,采用强制简单主义可以避免与c的复杂性。 当然,c有丰富的高级功能。 这是有自己的理由的。 但是,如果极简主义适合现在和未来的项目——和负责该项目的团队——,选择C更明智。

C vs. Java

几十年来,Java仍然是企业软件开发的主力军之一——也是广泛开发的主力军之一。 许多最重要的企业软件项目是用Java编写的3354,包括大多数Apache Software Foundation项目3354。 Java仍然是开发企业级要求项目的实用语言。

Java的语法从c和c借鉴了很多东西。 但是,与c不同,Java缺省情况下不编译本机代码。 而是Javaruntimeenvironment、JVM和JIT编译Java代码并在目标环境中执行。 如果合适,JIT编译后的Java代码可以接近或超过C的性能。

Java背后的“写一次就可以在任何地方执行”理念允许Java程序在目标体系结构上以相对较少的调整运行。 相比之下,虽然c移植到了许多体系结构中,但您可能需要定制某些c程序,以便在两个不同的操作系统之间正常运行,例如Windows和Linux。

这种可移植性和强大的性能组合以及由巨大的软件库和框架组成的生态环境,使Java成为构建企业APP应用程序的理想语言。

Java输给C的地方是Java不打算竞争的领域。 接近底层结构执行,或直接与硬件交互。 C代码编译成机器代码,由进程直接执行。 Java被编译成字节码。 这是稍后由JVM解释器转换为机器代码的中间代码。 此外,Java的自动内存管理在许多情况下是一个优势,但如果您需要充分利用有限的内存资源,C更适合。

也就是说,在某些方面,Java在速度方面可以接近c。 JVM的JIT引擎在运行时根据程序行为优化例程,并允许许多类型的优化,而这些类型是未经预编译的C无法实现的。 虽然Java运行时会自动执行内存管理,但某些新的APP应用程序可以解决此问题。 例如,Apache Spark使用部分绕过JVM的自定义内存管理代码来优化内存中的处理。

如果你看到这里,你还什么都不记得。 请只记住,那是没有人能预测未来的。

如果有人告诉你c语言已经过时了,自己想想,求真是最好的。 否则,至少要有所怀疑。

trong>C vs. C#和.Net

在推出近二十年后,C#和.Net 框架仍然是企业软件世界的主要组成部分。有人说C#和.Net是微软对Java的回应——一个托管代码编译器系统和通用运行库——C和Java之间的许多种对比也适用于C和C#或.Net之间。

与Java(以及某种程度上来说Python也是如此)一样,.Net提供跨各种平台的可移植性和庞大的集成软件生态系统。考虑到.Net世界中有多少面向企业的开发,这些都是不小的优势。当您使用C#或任何其他.Net语言开发程序时,您可以使用为.Net运行时编写的大量工具和库。

.NET另一个类似Java的优势是JIT优化。C#和.Net程序可以按照C语言提前编译,但它们主要由.Net运行时进行即时编译,并使用运行时信息进行优化。JIT编译允许对无法在C中执行的运行着的.Net程序进行各种就地优化。

与C一样,C#和.Net提供各种直接访问内存的机制。堆,栈和非托管系统内存都可以通过.Net API和对象访问。开发人员可以使用.Net中的unsafe模式来实现更高的性能。

但这些都不是没有代价的。托管对象和unsafe对象不能被任意交换,并且它们之间的编组会降低性能。因此,要最大化.Net应用程序的性能需要将托管和非托管对象之间的变动保持在最低限度。

如果您无法承担托管与非托管内存之间变动造成的性能损失,或者.Net运行时对于目标环境(例如,内核空间)来说是一个糟糕的选择,或者可能根本不可用,那么C就是你所需要的。与C#和.Net不同,C被默认可以解锁对内存的访问权。

C vs. Go

Go的语法很大程度上借鉴了C——花括号作为定界符,语句以分号结束,等等。精通C的开发人员通常可以毫不费力地直接使用Go,甚至算上Go的独有功能,如命名空间和包管理,对开发人员来说也并不困难。

代码可读性是Go的指导设计目标之一:让开发人员可以轻松掌握任何Go项目,并在短时间内熟练掌握代码库。C代码库可能很难理解,因为它们很容易聚集大量专属于某个项目或某个团队的宏和和#ifdef。Go的语法及其内置的代码格式以及项目管理工具旨在避免这种结构性问题。

Go还提供了诸如goroutine和channel之类的附加功能,用于处理并发性和组件之间的消息传递的语言级别的工具。C需要开发者手动完成或由外部库提供,但Go提供了开箱即用的这些功能,使得构建需要这些功能的软件变得更加容易。

Go与C最深层次的不同之处在于内存管理方面。默认情况下,Go的对象会被自动管理并自动进行回收。对于大多数编程工作来说,这非常方便。但这也意味着任何需要确定性处理内存的程序都会更难编写。

Go确实包含了用于绕过Go的某些类型处理安全性的unsafe包,例如使用Pointer类型读取和写入任意内存。但unsafe会附带一个warning说用它编写的程序“可能是不可移植的,并且不受Go 1兼容性指南的保护。”

Go非常适合构建命令行实用程序和网络服务等,因为这些很少用到太过细致的操作。但是,如果是低级设备驱动程序,内核空间操作系统组件以及其他需要严格控制内存布局和管理的任务,那么就最好用C来创建。

C vs. Rust

在某些方面,Rust是对C和C ++创建的内存管理难题的回应,也是对这两种语言的许多其他缺点的回应。Rust编译为本机机器代码,因此就性能而言,它被认为与C相当。但默认情况下,内存安全才是Rust的主要卖点。

Rust的语法和编译规则可帮助开发人员避免常见的内存管理错误。如果程序有一个不符合Rust语法的内存管理问题,它就不会被编译。刚接触这种语言的新手,特别是以前用C语言的开发者,由于C语言为这类bug提供了充足的容错空间,所以他们接触Rust的第一步是学习如何安抚编译器。但Rust的slddr认为,这种短期的痛苦有一个长期的回报:更安全的,不会减缓速度的代码。

Rust还通过其工具改进了C语言。默认情况下,项目和组件管理是Rust提供的工具链的一部分,与Go相同。有一种默认的,推荐的方法来管理包,组织项目文件夹,以及处理C需要单独处理的其他许多事情,每个项目和团队以不同的方式处理它们。

然而,在Rust中被吹捧为优势的东西对于C开发者来说可能并没有太大吸引力。Rust的编译时安全功能无法禁用,因此即使是最小的Rust程序也必须符合Rust的内存安全限制。默认情况下,C可能不太安全,但在必要时它更灵活,更宽容。

另一个可能的缺点是Rust语言的大小。即使考虑到标准库,C的功能也相对较少。Rust功能集非常庞大并且还在不断增长。与C ++一样,较大的Rust功能集意味着更强大的功能,但也意味着更高的复杂度。C是一种较小的语言,但更容易在头脑中进行建模,因此可能更适合那些对Rust来说太小,不值得大动干戈的项目。

C vs. Python

当今,每当谈论软件开发时,Python似乎总是能出现在对话中。毕竟,Python是“对所有项目的第二佳语言”,毫无疑问是最通用的语言之一,拥有数千个第三方库。

Python强调的,以及它与C最不同的地方,是有利于开发速度而不是执行速度。一个可能需要一个小时才能用另一种语言写出来的程序——比如C——可能用Python几分钟内就能写好。另一方面,该程序在C中执行可能需要几秒钟,但需要一分钟才能在Python中运行完。(一个很好的经验法则:Python程序通常比它们对应的C语言程序运行速度慢一个数量级。)但是对于现代硬件上的许多工作,Python已经足够快了,这是它如今广泛应用的一个重要原因。

另一个主要区别是内存管理。Python程序完全由Python运行时进行内存管理,因此开发人员不必担心分配和释放内存的细节。但同样,开发人员的轻松也是以运行时性能为代价的。编写C程序需要严格关注内存管理,但生成的程序通常是纯机器速度的黄金标准。

但是,在二者的血脉中,Python和C共享一个深层的关系:Python运行时参考是用C语言编写的。这允许Python程序包装用C和C ++编写的库。第三方库的Python生态系统的很多重要模块,例如机器学习方面的库,其核心是C代码。

如果开发速度比执行速度更重要,并且如果程序的大多数高性能部分可以被隔离到独立组件中(而不是遍布整个代码),那么纯Python或Python和C库的混合使得会是比单独使用C更好的选择。否则的话,C仍然是老大。

无论编程语言怎么变化,只要你想学C语言或者C++,想要在程序员生涯内有更高的成就的话,最最重要的是尽可能的提升自己的编程能力,并且,与其想着怎么去提升,不如从现在开始动手动脑,如果对于C/C++感兴趣想学习的话,可以关注小编一起成长,学习不怕从零开始,就怕从不开始。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。