tiobe编程语言排行榜2021.2,tiobe编程语言排行榜2020.11
TIOBE在2020年9月发布了编程语言排名。C仍然是第一语言,其次是Java、Python、C和C#。你找到亮点了吗?是的,它成为了第一个主人。c反而超越了Java。五年后,C语言重回第一。根据Tiobe首席执行官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用不到的非常实用的功能。名称空间(Namespace)、模板(exception)、自动内存管理等。对于需要顶级性能的项目(如数据库),机器学习系统项目通常用C语言编写,这样项目可以尽可能集中和利用所有的性能。
此外,与C相比,C继续积极扩张。即将推出的C 20将为开发者提供更多功能,包括模块、协作程序、同步库和概念,并提高模板的可用性。最新版本的Standard有少量更新,重点是保持向后兼容性。
其实C的所有附加功能也可能成为负担。它是一件大行李。C使用的专用函数越多,部署就越复杂,修改结果就越困难。把自己限定为只有一个C子集的开发者,可以避免很多严重的漏洞和开发中的额外负担。然而,一些团队从根本上想要防止C的过度复杂性。通过继续使用C,开发人员可以将自己限制在一个子集内。比如Linux内核开发团队直接避开了C。
对于维护你代码的开发人员——或者——来说,选择C而不是C是可行的,采用强制简化可以避免用C带来的复杂,当然C的高级功能丰富。这是有原因的。但如果极简主义适合现在和未来的项目3354和负责项目3354的团队,那么选择c是比较明智的。
C vs. Java
几十年来,Java仍然是企业软件开发的主力之一,——也是粗放式开发的主力之一。很多最重要的企业软件项目都是用Java写的3354,包括大部分的Apache软件基金会项目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 runtime会自动执行内存管理,但是一些新的APP应用程序可以解决这个问题。例如,Apache Spark使用定制的内存管理代码部分绕过JVM来优化内存处理。
如果你看到这里,你还是什么都不记得。只要记住没有人能预测未来。
如果有人跟你说C语言过时了,你自己想想。求真是最好的。否则,至少要怀疑。
TrongC vs. C# #和。网
在推出近20年后,C #和。Net框架仍然是企业软件世界的主要组成部分。有人说C #和。Net是微软对Java的回应。3354托管代码编译器系统与通用运行时——C和Java之间的多种比较也适用于C和C #或。网。
像Java(某种程度上还有Python),Net提供了跨各种平台的可移植性和一个巨大的集成软件生态系统。考虑到中有多少面向企业的开发。Net世界,这些都是不小的优势。当你用C #或其他语言开发程序时。Net语言,可以使用大量为。Net运行时。
的另一个类似Java的优点。NET是JIT优化。# C和。Net程序可以按照C语言提前编译,但主要是通过。Net运行库并使用运行库信息进行优化。JIT允许对运行进行各种就地优化。不能用c执行的. Net程序。
比如C,C #和。Net提供了各种直接访问内存的机制。堆、堆栈和非托管系统内存都可以通过。Net API和对象。开发人员可以在中使用不安全模式。Net来实现更高的性能。
但这些都不是没有代价的。托管对象和不安全对象不能任意交换,在它们之间分组会降低性能。因此,要最大限度地发挥。Net应用程序中,有必要将托管和非托管对象之间的差异保持在最低限度。
如果您无法承受托管和非托管内存之间的变化所导致的性能损失,或者。Net运行时对于目标环境(例如,内核空间)来说是一个糟糕的选择,或者根本不可用,那么C就是你所需要的。不像C #和。默认情况下,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会附带一个警告,用它编写的程序“可能不可移植,不受Go 1兼容性指南的保护。”
Go非常适合构建命令行实用程序和网络服务,因为这些很少使用太细致的操作。但如果是底层设备驱动、内核空间操作系统组件等需要严格控制内存布局和管理的任务,那么最好用c创建。
C vs. Rust
从某些方面来说,Rust是对C和C创造的内存管理问题的一种回应,也是对这两种语言的许多其他缺点的回应。Rust编译成原生机器码,所以在性能上被认为相当于C。但默认情况下,内存安全是Rust的主要卖点。
Rust的语法和编译规则可以帮助开发人员避免常见的内存管理错误。如果程序存在不符合Rust语法的内存管理问题,它将不会被编译。刚接触这种语言的新人,尤其是习惯使用C语言的开发者,学习如何安抚编译器是他们接触Rust的第一步,因为C语言为此类bug提供了足够的容错空间。但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编写的库,C代码是第三方库Python生态系统很多重要模块的核心,比如机器学习库。
如果开发速度比执行速度更重要,如果程序的大部分高性能部分可以隔离成独立的组件(而不是分散在代码各处),那么纯Python或者Python和C库的混合将是比单独使用C更好的选择。不然C还是老大。
无论编程语言如何变化,只要你想学习C语言或者C语言,想在程序员的职业生涯中取得更高的成就,最重要的就是尽可能的提高自己的编程能力。况且,与其想着怎么改进,不如从现在开始动动脑筋。如果你对C/C感兴趣,想学习,可以一起关注边肖成长。学习不怕从零开始,就怕永远不开始。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。