单片机c语言+编程c语言_为什么C编程语言仍然占统治地位

单片机c语言+编程c语言

除非它的工作要比大多数其他任何事物(尤其是计算机技术)都要好,否则它不会存在50年。 自1972年以来,C编程语言就一直活跃起来,并且一直作为我们软件定义世界的基本组成部分之一。

但是有时候技术会流行,因为人们还没有去替代它。 在过去的几十年中,出现了数十种其他语言-有些语言是专门设计来挑战C的统治地位的,而有些语言则是其受欢迎程度的副产品,从侧面冲向了C。

[ 为每个开发人员发现10个Visual Studio Code扩展Visual Studio Code入门 ,Microsoft是Windows,MacOS和Linux的轻量级编辑器。 •了解最新版本的Visual Studio Code中的新增功能 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

不难证明C需要替换。 编程语言研究和软件开发实践都暗示着做事的方式比C更好。 但是C仍然保持不变,并拥有数十年的研发经验。 很少有其他语言能够在性能,裸机兼容性或普遍性方面击败它。 尽管如此,还是值得一看的是C在2018年如何与知名语言竞赛抗衡。

C与C ++

自然,C通常与C ++进行比较,正如其名称本身所表明的那样,该语言是C的扩展。C++和C之间的差异可以被描述为广泛或过度 ,具体取决于您要求的人。

尽管C ++的语法和方法仍与C类似,但它提供了许多真正有用的功能,这些功能在C中本身不可用:命名空间,模板,异常,自动内存管理等。 要求顶级性能的项目(数据库,机器学习系统)经常使用这些功能以C ++编写,从而将系统的每一个性能降低都消除掉。

此外,C ++继续比C更加积极地扩展。即将面世的C ++ 20为该表带来了更多东西,包括模块,协程,同步库和概念,这些使模板更易于使用。 C标准最新修订版几乎没有增加任何内容,并且着重于保持向后兼容性。

事实是,C ++中的所有优点也可以作为缺点。 大个子 使用的C ++功能越多,引入的复杂性就越强,驯服结果也就越困难。 将自己局限于C ++子集的开发人员可以避免许多其最糟糕的陷阱和过度之处。 但是有些商店希望共同防范C ++的复杂性。 坚持使用C会迫使开发人员将自己局限于该子集。 例如,Linux内核开发团队避开了C ++。

通过C ++选择C语言为您以及所有在您之后维护代码的开发人员提供了一种方法,通过拥抱强制性的极简主义来避免纠缠于C ++的不足。 当然,C ++有很好的理由提供了丰富的高级功能。 但是,如果极简主义更适合当前和将来的项目以及项目团队,则 C更具意义。

C与Java

几十年之后,Java仍然是企业软件开发的主要内容,并且通常也是开发的重要内容。 许多最重要的企业软件项目都是用Java编写的,包括绝大多数的Apache Software Foundation项目 ,而Java仍然是开发具有企业级要求的新项目的可行语言。

Java语法从C和C ++大量借鉴。 但是,与C不同,Java默认情况下不会编译为本机代码。 相反,Java运行时环境JVM,JIT(即时)编译Java代码以在目标环境中运行。 在适当的情况下,JITted Java代码可以达到甚至超过C的性能。

Java背后的“一次编写,随处运行”的理念也使Java程序可以以较少的调整来运行目标体系结构。 相比之下,尽管C已移植到许多体系结构,但是任何给定的C程序可能仍需要自定义才能在Windows与Linux上正常运行。

可移植性和强大性能的结合,再加上庞大的软件库和框架生态系统,使Java成为构建企业应用程序的首选语言和运行时。

Java缺乏C的地方是Java从未竞争过的领域:靠近金属运行或直接与硬件一起工作。 C代码被编译成机器代码,然后由进程直接执行。 Java被编译为字节码,字节码是JVM解释器随后将其转换为机器码的中间代码。 此外,尽管Java的自动内存管理在大多数情况下是一件幸事,但C更适合必须最佳利用有限内存资源的程序。

也就是说,在某些方面,Java在速度方面可以接近C。 JVM的JIT引擎根据程序行为在运行时优化例程,允许进行许多类的优化,而这些优化类是提前编译的C不可能实现的。并且Java运行时可以自动执行内存管理,但是一些新的应用程序可以解决该问题。 例如,Apache Spark使用绕过JVM的自定义内存管理代码来部分优化内存中的处理。

C与C#和.Net

在引入C#和.Net Framework后近二十年,它们仍然是企业软件界的主要部分。 据说C#和.Net是Microsoft对Java(托管代码编译器系统和通用运行时)的回应,因此C和Java之间的许多比较也支持C和C#/。Net。

像Java(在某种程度上是Python)一样,.Net提供了跨各种平台和广阔的集成软件生态系统的可移植性。 考虑到.Net世界中发生了许多面向企业的开发,这些优势不容小small。 当使用C#或任何其他.Net语言开发程序时,便可以利用为.Net运行时编写的大量工具和库。

类似于Java的.NET的另一个优点是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语法在很大程度上应归功于C —括号作为定界符,以分号结尾的语句等等。 精通C语言的开发人员通常可以毫不费力地跳入Go语言,即使考虑到名称空间和程序包管理等新的Go功能。

可读的代码是Go的指导性设计目标之一:使开发人员可以轻松地熟悉任何Go项目并在短时间内精通代码库。 C代码库可能很难理解,因为它们易于变成宏指令的嵌套和#ifdef ,它们既针对项目又针对特定的团队。 Go的语法及其内置的代码格式和项目管理工具旨在避免此类机构问题。

Go还具有其他功能,例如goroutine和通道,用于处理并发性和组件之间消息传递的语言级工具。 C需要将这些东西手动滚动或由外部库提供,但是Go可以立即提供它们,这使得构建需要它们的软件变得容易得多。

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

Go确实包含unsafe程序包,用于绕过Go的类型处理安全性,例如使用Pointer类型读取和写入任意内存。 但是, unsafe的警告是,用它编写的程序“可能是不可移植的,并且不受Go 1兼容性准则的保护。”

Go非常适合用于构建诸如命令行实用程序和网络服务之类的程序,因为它们很少需要这种细粒度的操作。 但是,最好用C创建低级设备驱动程序,内核空间操作系统组件以及其他需要对内存布局和管理进行严格控制的任务。

C与Rust

在某些方面, Rust是对C和C ++所产生的内存管理难题以及这些语言的许多其他缺点的回应。 Rust编译为本地机器代码,因此就性能而言,它可以与C媲美。 默认情况下,内存安全是Rust的主要卖点。

Rust的语法和编译规则可帮助开发人员避免常见的内存管理错误。 如果程序遇到跨Rust语法的内存管理问题,它将根本无法编译。 这种语言的新手,尤其是像C这样的语言提供了足够的空间来解决此类错误,他们在Rust教育的第一阶段学习了如何安抚编译器。 但是Rust的支持者认为,这种短期痛苦有长期的收获:更安全的代码不会牺牲速度。

Rust还通过其工具改进了C语言。 默认情况下,项目和组件管理是Rust随附的工具链的一部分,与Go相同。 有一种默认的建议方法,用于管理软件包,组织项目文件夹以及处理C中最多是临时的许多其他事情,每个项目和团队对它们的处理方式都不相同。

尽管如此,Rust中被吹捧为优势的东西对于C开发人员似乎并不像一个。 Rust的编译时安全功能无法禁用,因此,即使是最琐碎的Rust程序也必须符合Rust的内存安全要求。 默认情况下,C可能不太安全,但是在需要时它更加灵活并且可以宽容。

另一个可能的缺点是Rust语言的大小。 即使考虑标准库,C也具有相对较少的功能。 Rust功能集正在蔓延并继续增长。 与C ++一样,较大的Rust功能集意味着更多的功能,但也意味着更多的复杂性。 C是一种较小的语言,但是从思想上讲它要容易得多,因此也许更适合Rust可能会被过大杀伤的项目。

C与Python

如今,每当谈论软件开发时,Python似乎总是参与其中。 毕竟,Python是“所有事物中的第二好的语言”,并且无疑是功能最丰富的语言之一,它具有成千上万的第三方库。

Python强调的是,它与C的最大不同之处在于,开发速度胜于执行速度。 可能需要花费一个小时才能用另一种语言(如C)组合在一起的程序可以在几分钟内用Python组装。 另一方面,在C中执行该程序可能需要几秒钟,而在Python中运行则需要一分钟。 (一个好的经验法则:Python程序通常比C语言程序运行慢一个数量级。)但是对于现代硬件上的许多工作来说,Python足够快,这一直是Python普及的关键。

另一个主要区别是内存管理。 Python程序由Python运行时完全由内存管理,因此开发人员不必担心分配和释放内存的麻烦。 但是在这里,开发人员的便利又是以运行时性能为代价的。 编写C程序需要特别注意内存管理,但是生成的程序通常是纯机器速度的黄金标准。

不过,在皮肤下,Python和C有着深厚的联系:参考Python运行时是用C编写的。这使Python程序可以包装用C和C ++编写的库。 第三方库(例如用于机器学习)的Python生态系统的重要组成部分以C代码为核心。

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

翻译自: https://www.infoworld.com/article/3402023/why-the-c-programming-language-still-rules.html

单片机c语言+编程c语言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值