时至今日,为何C语言在软件开发领域的地位仍无法撼动


时至今日,为何C语言在软件开发领域的地位仍无法撼动“> <br/> </p> <p>部分内容与国内生态有一定出入,以下为译文:</p> <p>过去的50年,C语言已经成为重要的软件开发语言。这里介绍了2019年它是如何与c++, Java, c#,走,铁锈和Python进行竞争的。</p> <p>对于计算机编程语言来说,没有什么技术能流传使用50年,除非它比其他的都好用C语言于1972年面世,如今在软件世界仍保持着基本底层开发的主流语言的地位。</p> <p>但有时一个技术能被长久的流传使用,只是因为人们还没有找到一个更好的替代品罢了。在过去的几十年,涌现了大量的语言——有的专门为了挑战C语言的统治地位而设,计有的则因为其流行性而从侧面削弱了C,感觉原文是这个意思。</p> <p>真的很难证明C需要被替代。编程语言调查和软件开发实例都印证了可以用远比C好的方式来做事情。但C的地位仍岿然不动,它的背后是几十年的调查和开发。几乎没有语言可以在性能上,在裸机上,或者在普遍性上打败它。即便如此,还是值得看一下C是如何在2019年与其他大名鼎鼎的语言进行较量的。</p> <p> <强> C和c++ </强> </p> <p>很自然地,C会被拿去与c++做对比,从名字本身就能看的出,c++是从C发展而来的,两者之间的不同就在于易扩展性,或者易用性,这取决于你问谁。</p> <p>语法和方式上,c++与C语言比较接近,但c++提供了很多原C没生有的,却比较有用的特性:命名空间,模板,异常,内存管理等等。项目如果对于性能比较敏感的话,例如数据库和机器学习,通常使用c++编写来帮助系统提高性能。</p> <p>除此之外,c++比C更容易扩展。即将到来地c++ 20甚至带来更多的新特性,包括模块,协程,一个同步库以及相关的概念,这些都让模板更易使用。对标准C的最新修订几乎没有新增特性,而是更注重保持向后兼容性。</p> <p>事实上,所有c++的优点也是它的缺点。最重要的一个点就是,c++的特性使用得越多就越复杂,结果就越加难以控制。那些把自己限制于c++子集的开发者能避免很多严重的危害和过度使用。但有些机构想避免c++所有的复杂性。坚持使用C,开发者将自己限制于子集内。比如Linux内核的开发团队就会避开c++。</p> <p>对于你和在你之后维护代码的开发人员来说,选择C是一个避免c++过度使用纠纷的方式。当然了,c++也有一系列丰富的高级功能。但如果简洁明了更适合现在或者未来项目的整体发展的话,C会更有优势。</p> <p> <img src=

<强> C和Java

几十年之后,Java仍然是企业级软件开发的主要语言,一般开发的主要语言。大多数优秀的企业软件开发项目都是用Java写的,包括绝大多数Apache基金会项目,当开发企业级项目时,Java也仍然是一个可行性比较高的语言。

Java的语法大量地借鉴了C和c++。不过与C不同的是,Java不会默认编译成机器语言。相反地,Java运行时环境JVM会将Java代码即时编译到目标环境中运行。在良好地条件下,即时编译的Java代码可以达到甚至超过C的性能。

Java奉行的“一次编写,到处运行”的思想,可以让Java程序在相对较小的调整下,运行在不同的环境里面。相比之下,尽管C已经移植到许多体系结构中,但是任何给定的C程序可能仍然需要定制才能在Windows和Linux上正常运行。

这种可移植性和强大性能的结合,以及软件库和框架的庞大生态系统,使Java成为企业级项目语言的一员。

Java落后C的地方是Java从来没有竞争的领域:接近底层运行,或直接操作硬件C代码被转换成机器码,由进程直接执行. Java被编译成字节码,它是随后由JVM解释器转换为机器代码的中间代码。此外,尽管Java的自动内存管理在大多数情况下是一种好事,但是C更适合于对有限内存资源有优化要求的程序。

在某些地方,Java的性能可以接近C.JVM的JIT引擎可以在运行时根据程序的行为优化程序,可以进行许多种类的优化,对于预先编辑的C语言而言,这个是行不通的,例如,Apache火花使用自定义的内存管理代码绕过JVM进行了一定程度的内存内处理优化。

时至今日,为何C语言在软件开发领域的地位仍无法撼动

<强> C与c#与。净

在推出近20年之后,C和。网框架仍然是企业软件世界的主要组成部分。有人说,c#和。网络是微软对Java的一种回应(托管代码编译系统和通用的运行时),因此C和Java之间的许多比较也适用于C和c#/>弧?/p>

时至今日,为何C语言在软件开发领域的地位仍无法撼动