为什么用C?

时间:2009-06-12 03:46:03

标签: c

为什么C用于编写驱动程序和操作系统代码?

有尺寸问题吗?

是否有其他语言的驱动程序?

用XP,Vista和Solaris编写哪种语言?

12 个答案:

答案 0 :(得分:24)

C编译为机器代码,不需要语言本身的任何运行时支持。这意味着可以编写可以在文件系统,虚拟内存,进程以及除寄存器和RAM之外的任何其他内容之前运行的代码。

答案 1 :(得分:22)

在安全关键环境中(想想航空电子设备,航天器,医疗设备,运输,过程控制的控制软件),系统(以及驱动程序)通常使用Ada甚至SPARK/Ada编写。

澄清一下:C通常被认为是相当低的水平,并且非常像装配本身的“宏语言”,这也是它的力量来源(速度,大小,便携性)。

Ada,另一方面,专门为具有可验证性的安全关键应用而设计,引用Ada 2005 for Mission-Critical Systems

  

Ada [9]是许多关键系统的首选语言,因为它经过精心设计,并且存在建立高完整性系统的明确指南[10]

这也是Ada对强类型的支持,以及其他一些重要功能(引用design for safety):

  

编程语言差别很大   它们适合用于   安全相关系统。 Carré等人。   确定了影响的六个因素   语言的适用性   高完整性应用程序[Carré   1990]。这些是:

     
      
  • 逻辑健全
  •   
  • 定义的复杂性
  •   
  • 富有表现力
  •   
  • 安全
  •   
  • 可验证
  •   
  • 有限的时间和空间限制
  •   
     

没有标准的编程语言   在所有这些领域,尽管有些   (如Pascal和Ada)表现很好   比C或C等语言更好   C ++。在高度关键的应用程序   '可验证性'非常好   重要性。某些语言允许   强大的软件验证工具   用于执行各种各样的   对代码进行静态测试以检测a   编程错误范围。   [...] An   选择a的重要问题   编程语言的质量   可用的编译器和其他   工具。对于某些经过验证的语言   编译器可用。虽然没有   保证完美,验证   大大增加了我们的信心   工具。不幸的是,经过验证   编译器仅适用于   有限的语言,例如   阿达和帕斯卡尔。此外   编译器,关键开发人员   系统将利用一系列的   其他工具,如静态代码   分析包。静态测试   可以在一块上执行   代码根据不同而有很大差异   使用的语言。为了帮助这个过程   通常会限制功能   在某些语言中使用的   到该语言的“安全子集”。   结构良好且定义良好的语言   比如Ada,Pascal和   Modula-2允许进行大量测试   执行如数据流   分析,数据使用分析,   信息流分析和范围   检查。不幸的是很多这些   测试无法在语言上执行   例如C和C ++。

更详细地讨论这个问题真的超出了这个问题的范围,但您可能需要查看以下一些指示:

如果有人想再看一下Ada,请查看:Ada Programming (wikibooks)

甚至还有为高度关键的应用程序专门开发的编程语言,例如JOVIALHAL/S,后者由航天飞机程序使用。

  

是否有任何其他语言的驱动程序?

我已经看到一些用于Ada编写的特殊硬件的Linux驱动程序,但不了解其他操作系统。但是,这样的驱动程序通常最终会包装C API。

答案 2 :(得分:14)

因为C具有速度,内存使用率低,硬件低级访问和流行度的最佳组合。

大多数操作系统都有一个用C编写的内核,以及用C,C ++,C#或Obj-C编写的应用程序

答案 3 :(得分:13)

“为什么我们使用C语言编写驱动程序和操作系统代码。?”

因此,程序员不必为每种新机器学习每种新汇编语言的新语法。

“是否有任何其他语言的驱动程序?”

历史上,汇编语言。我不记得PL / S或BLISS是否可以用于司机。也许B.在现代,一些勇敢的人使用C ++,但他们必须非常小心。在某些情况下,可以在用户模式驱动程序中更轻松地使用C ++。

答案 4 :(得分:13)

C是迄今为止最简单的语言(除了程序集)在裸机硬件上“开始”。使用C,(假设你有一个32位的引导加载程序,比如GRUB来进行硬模式切换)你所要做的就是制作一个小的crt0.asm文件来设置堆栈就是这样(你得到的语言,不包括libc) 。使用C ++,您必须担心动态转换,异常,全局构造函数,覆盖新的等等。使用C#,您必须移植.Net运行时(它本身基本上需要内核)并且我不确定Obj-C ,但我确定它也有一些要求......

C只是用于驱动程序的最简单的语言。它不仅易于入门,而且很容易确切地知道机器级别发生了什么。他们没有操作员超载来混淆你等等。当然它在“好”环境中很方便,但在Ring 0中,坏指针不仅会使应用程序崩溃,而且通常会导致三重故障(重启),蓝屏或内核崩溃。你真的很想知道机器上发生了什么......

答案 5 :(得分:11)

Lisp machines的操作系统是用Lisp编写的,这表明你没有拥有来使用C或程序集。 Lisp机器业务因廉价PC的可用性而被破坏,其操作系统当然是用C语言和汇编语言编写的。

答案 6 :(得分:8)

C是最适合编写操作系统的第一种语言(不是汇编语言)之一,所以它很早就开始流行起来。虽然其他语言已经出现,因为它也适合编写操作系统,但C仍然很受欢迎,这可能源于其悠久的历史以及程序员对其结构和语法的熟悉程度。

答案 7 :(得分:4)

C也是一种教授内存管理的语言,并且低级别足以显示硬件和软件之间的障碍。这在今天的许多方法中很少见,在硬件层面上已经越来越多地采用抽象方式。我发现C是学习这些东西的好方法,同时能够同时编写快速代码。

答案 8 :(得分:3)

请记住,C最初是为编写操作系统(在本例中为Unix)和类似的低级内容而开发的。它非常接近系统架构,并且不包含我们想要控制的任何额外功能,它们是如何工作的。但请注意,操作系统的其余部分(包括编程库)不必使用与内核相同的语言编写。内核函数是通过中断系统提供的,实际上这些编程库可以用支持汇编程序片段的任何语言编写。

现在最流行的操作系统是用C语言编写的:Windows,Linux和许多其他Unix克隆,但这不是规则。有一些面向对象的操作系统,其中内核和编程接口都是用客观语言编写的,例如:

  • NeXTSTEP - Objective-C
  • BeOS - C ++
  • Syllable - C ++

请参阅:Object-oriented operating system on Wikipedia

请注意,在Linux中,可以使用C以外的语言编写内核驱动程序(但不建议这样做)。无论如何,在运行它时,一切都变成了机器代码。

答案 9 :(得分:2)

“C编译为机器代码,不需要语言本身的任何运行时支持。”

这是C

的最佳功能

答案 10 :(得分:1)

我相信像Python,Java等语言很受欢迎主要是因为它们提供了广泛的标准库,允许程序员用更少的代码编写解决方案。从字面上看,红宝石程序员可以在一行中打开和读取文件,其中在C中它需要多行。然而,在这种抽象之下是多行。因此,在C中进行相同的抽象,建议使用它。奇怪的是,C哲学似乎并不是为了减少总代码行数,因此没有有组织的努力去做。 C似乎被视为所有处理器芯片的语言,这自然意味着很难创建任何“标准”抽象的一线解决方案。但是C确实允许你使用#ifdef预处理器命令,所以理论上你可以在一个头文件中为多个处理器和平台提供多种实现变体。这不是python或java的情况。因此,虽然C没有花哨的标准库,但它对于可移植性很有用。如果您的公司想要提供在计算机,嵌入式和便携式设备上运行的程序,那么C就是您的选择语言。很难取代C在世界上的用处。

答案 11 :(得分:0)

另外,对于拥有其他语言驱动程序的计算机,还有SunSpot机器人平台。连接设备的驱动程序(传感器,电机以及可通过I / O引脚通信的所有其他设备)由用户以Java编写。