当前位置:  开发笔记 > 编程语言 > 正文

为什么用C?

如何解决《为什么用C?》经验,为你挑选了7个好方法。

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

有尺寸问题吗?

有没有用其他语言写的驱动程序?

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



1> Theran..:

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


"C符合机器代码,不需要语言本身的任何运行时支持." 这是编译器的一个特性,而不是语言的特性.
虽然这在某种程度上可能是正确的,但您必须小心使用的语言功能,因为如果我没有弄错,浮点运算,至少转换,仍然需要C运行时库.尽管如此,与许多其他语言不同,C运行时代码可以嵌入到应用程序本身中.很多人忽略的是,加载器本质上必须用汇编语言编写,除非你有一个C编译器为计算机编译合适的启动映像.
@ webboy42,你需要的只是一些指令,如果它已经在内存中,就像在微控制器或BIOS中那样,将复位向量的jmp指向你的C代码的开头.这样少量的机器代码可以一次一个地手工建立,不需要汇编程序:)

2> none..:

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

澄清一下:C通常被认为是相当低的水平,并且非常像装配本身的"宏语言",它也是它的力量来源(速度,大小,可移植性).

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

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

这也是Ada对强类型的支持,以及其他一些重要功能(引用安全设计):

编程语言在安全相关系统中的适用性方面存在很大差异.Carré等人.确定了影响语言是否适用于高完整性应用的六个因素[Carré1990].这些是:

逻辑健全

定义的复杂性

表现力量

安全

可验证

有限的时间和空间限制

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

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

Ada与C和C++相比

阿达与C

量化辩论:Ada与C++

为什么选择Ada作为教学语言?(Ada vs. C in University)

比较C和Ada的开发成本(摘要)

C/C++/Java陷阱和Ada的好处

Ada是更好的C吗?

Ada,C,C++和Java vs. The Steelman

阿达:消除神话

Java和Ada中的实时编程安全性

如果有人想进一步研究Ada,请查看:Ada Programming(wikibooks)

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

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

我看到一些用于Ada编写的特殊硬件的Linux驱动程序,但不知道其他操作系统.但是,此类驱动程序通常最终会包装C API.


我已经重新设计了答案以进一步详细说明并提供进一步的观点,希望这会有所帮助

3> cloudhead..:

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

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


我认为只是引导程序

4> Windows prog..:

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

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

"有没有用其他语言写的驱动程序?"

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



5> Earlz..:

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

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



6> Jouni K. Sep..:

Lisp机器有Lisp语言编写的操作系统,这表明你不具备使用C或汇编.Lisp机器业务被廉价PC的销毁所破坏,其操作系统当然是用C语言和汇编语言编写的.



7> Eddie..:

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

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有