前言:
眼前看官们对“高质量程序设计指南c语言版”大致比较看重,大家都需要剖析一些“高质量程序设计指南c语言版”的相关内容。那么小编也在网摘上网罗了一些有关“高质量程序设计指南c语言版””的相关资讯,希望小伙伴们能喜欢,同学们一起来了解一下吧!作者: 布加迪
在过去的50年里,出现了几十种新的语言,他们表现得多么出色?有些在挑战C的统治地位,而其他则想逐渐削弱它。
几十年来,C语言一直是占主导地位的程序设计语言。Linux、Windows、Mac和许多其他操作系统的内核中都可以看到它。C语言几乎可以写任何程序,在程序设计语言中的地位,倍受推崇。它甚至可能是有史以来最有影响力的语言。它的语法启发了许多其他语言,包括Cpp、Csharp、Java、JavaScript、Go、Perl等等。
自1972年以来,C编程设计语言已经成为构建软件的主力语言之一。但在过去的50年里,出现了几十种新的语言,而它们的后代的表现又如何呢?有些在挑战C的统治地位,而其他则在想逐渐削弱它。
撼山易,撼C难。在性能、裸机兼容性和流行性方面,很少有语言能够打败C语言。不过,与一些主要语言相比,C语言的性能如何还是有必要的。本文提供了一个详细的与C+ +,Java,C#,GO,Python和最新的语言Carbo与C语言的对比分析。
C与C++
常将C与C+ +比较,C++是作为C语言的扩展而创建。之间的区别在于C++和C是大的,甚至无法相提并论。
尽管C++在语法和方法上仍与C类似,但它提供了许多C本身没有的有用特性:名称空间、模板、异常和自动存储管理。一般来说,顶级性能的项目,如数据库和机器学习系统,通常都是用C++编写的,利用这些特性来最大限度地提高系统的性能。
另外,C++比C迈出了更大的一步。即将发布的C++23带来了更多的功能,包括模块、协程和模块化标准库,以实现更快的编译和更多的代码。相比之下,C标准的下一个计划版本C2x增加的功能很少,只专注于保持向后兼容性。
问题在于,C++的所有优点也可能是缺点。使用的C++软件特性越多,引入的复杂性就越大,处理结果也就越困难。如果开发者只关注C++语言的一小部分,他们可以避免它的许多陷阱。甚至有些公司希望完全避免这种复杂性——例如,Linux内核开发团队避免使用C++,虽然团队认为Rust是未来添加内核功能的语言,但大多数Linux仍然会用C编写。
C语言与Java
Java几十年来一直是企业软件开发的支柱,也是整个开发社区的支柱。Java语法大量借用了C和C语言+ +,但是,与C不同,Java在默认情况下不会编译成本机代码。相反,Java的JIT(即时)编译器编译Java代码以在目标环境中运行。JIT引擎在运行时根据程序行为对例程进行优化,从而实现了预编译C无法实现的各种优化。在适当的情况下,JIT编译的Java代码可以接近甚至超过C的性能。
而且,尽管Java运行时环境自动执行存储管理,但可以绕过这个处理。例如,Apache Spark通过使用Java运行时环境中的“不安全”部分来直接分配和管理内存,并避免JVM垃圾收集系统的开销,从而部分地优化了内存中的处理。
Java的“只写一次,到处运行”的哲学也允许Java程序运行几乎不需要对目标体系结构进行调整。相比之下,虽然C已经被移植到许多体系结构,但任何特定的C程序可能仍然需要进行定制,才能在Windows和Linux上正常运行。
这种可移植性和强大性能的结合,加上大型软件库和框架生态系统,使得Java成为构建企业应用程序的首选语言和运行时环境。
Java与C相比的一个方面是从不以竞争为目标:它运行在接近硬件的地方,或者直接与硬件打交道。
C代码被编译成机器码,由进程直接执行。Java被编译成字节码,这是一种中间代码,JVM解释器将其转换成机器码。此外,虽然Java的自动存储管理通常是一个优势,但C更适合于必须优化有限内存资源使用的程序,因为它的初始占用很小。
C和GO
Go语法在很大程度上借鉴了C语言,用花括号作为分隔符和以分号结尾的语句只是两个例子。精通C语言的开发人员通常可以无学习成本使用Go,即使在考虑新的Go特性(如名称空间和包管理)时也是如此。
确保代码的可读性是Go的指导性设计目标之一:让开发人员在很短的时间内熟悉Go项目并熟悉代码库。C代码库可能很难分析,因为它通常会变成一堆特定于项目或团队的宏和#ifdefs。Go的语法和内置的代码格式和项目管理工具的设计就是为了防止这一根本问题。
Go还具有其他特性,如go routine和channels,用于处理组件之间的并发和消息传递的语言级工具。C语言需要手动控制这些函数或由外部库提供,但Go直接提供了这些函数,因此构建需要这些函数的软件要容易得多。
Go和C之间最大的根本区别是存储管理。默认情况下,Go对象会被自动管理和垃圾收集。这对于大多数编程工作来说是非常方便的。但这也意味着,任何需要对内存进行确定性处理的程序都将更难写。
Go确实包含了一些不安全的包来规避Go的一些类型处理安全机制,比如读取和写入使用指针类型的任意内存。但不安全的同时也要注意:用它编写的程序“可能不是可移植的,不受Go1兼容性指南的保护。”
Go非常适合构建命令行实用程序和网络服务等程序,因为它们很少需要如此细粒度的操作。但是底层设备驱动程序、内核空间操作系统组件以及其他需要严格控制内存布局和管理的任务最好用C语言创建。
Python与C语言
如今,当涉及到软件开发时,Python似乎总是无法避免。毕竟,Python是“第二好语言”,毫无疑问是最通用的语言之一,拥有数以千计的第三方库。
Python更强调开发速度而不是执行速度,这是它和C最大的区别。一个程序用另一种语言(如C)汇编可能需要一个小时,但用Python汇编只需要几分钟。另一方面,该程序在C中执行可能需要几秒钟,但在Python中运行可能需要一分钟。
一个很好的经验法则是Python程序通常比C程序慢一个数量级。但是Python对于现代硬件上的许多任务来说已经足够快了,这是它被采用的关键。
另一个主要区别是存储管理。Python程序完全通过Python运行时环境来管理内存,因此开发人员不必担心内存分配和释放的细节问题。但是开发者的易用性是以“运行时性能”为代价的。
编写C程序需要严格关注存储管理,但最终生成的程序是标准的纯机器速度。
在谈论了两者的区别之后,这两者在底层有着很深的联系:引用Python运行时环境是用C编写的。这允许Python程序包装用C和C++编写的库。Python生态系统中的第三方库(如用于机器学习的第三国库)有很大一部分是以C代码为核心的。在很多情况下,这不是C或Python的问题,而是应用程序的哪些部分应该用C编写,哪些部分该用Python编写的问题。
如果开发速度比执行速度更重要,并且如果程序的大部分高性能部分可以独立成单独的组件(而不是分散在整个代码中),那么纯Python库或Python和C库的组合是比单独使用C更好的选择。但在其他方面,C仍然占主导地位。
C与Carbon
C和C++的另一个最近的竞争者就是Carbon,是一种目前正在大量开发的新语言。Carbon的设计,是一个现代化的替代C和+ +的方式,Carbon拥有简单的语法、现代化的工具和代码组织技术,以及C&C程序员长期面临的问题的解决方案。它还被设计为提供与C++代码库的互操作性,因此可以增量地迁移现有的代码。所有这些都是受欢迎的,因为与最近开发的语言相比,C和C++的工具和过程曾经是原始的和初级的。
那么缺点是什么呢?目前,Carbon是一个试点项目,尚未准备好生产。
甚至没有一个实用的编译器,只有一个在线代码浏览器。Carbon成为C或C+ +的实际替代品还需要一段时间,如果有的话。
标签: #高质量程序设计指南c语言版