有没有与C相同的语言?

任何提议或实现的语言是否适合与C相同(巨大)的利基,旨在作为替代方案,同时保持对操作系统,高性能,嵌入式和其他角色的所有适用性?

任何提议或实现的语言是否适合与C相同(巨大)的利基,旨在作为替代方案,同时保持对操作系统,高性能,嵌入式和其他角色的所有适用性?

操作系统历史上以汇编程序实现。 后来开发转移到C,最初是一种宏汇编程序。

现在大多数操作系统主要用C语言编写,因为它几乎只是维护某种汇编程序向后兼容性的语言(例如,可以将硬件规范中的汇编程序的一对一映射映射到C中)。 而libc是内核和用户空间之间的主要接口 – 通常是唯一的接口。 然而,界面并不涵盖所有内容:内核中的某些内容必须直接访问,因为尚未配置标准接口。 例如,必须使用C结构将参数/检索结果传递给ioctl或从ioctl传递结果。

这意味着在应用程序开发中使用C在很大程度上受到简单事实的推动,即如果使用C,您将自动访问内核(OS)的所有function,这些function也是用C语言编写的。

只有能够以某种方式与C竞争的语言才是基于/与C兼容的语言。我所知道的唯一选择是C ++。 在较旧的时代,也有比较流行的翻译,如p2c (Pascal to C):一种语言的开发者程序,但源代码自动翻译成C进行编译。 但翻译人员相当错误,不知道C经常无法调试程序。 所以如果你不得不知道一些C,为什么还要翻译呢。


我个人(以及许多其他开发人员,我确定)使用各种语言经常偶然发现操作系统有一个function的问题,但使用的语言并没有提供任何访问它的工具。 我认为这是其他语言发展的主要威慑因素。 即使你对一种新语言有一个明智的想法(这可能与C不兼容,否则想法不会那么明亮 )你最终会重新实现与几乎整个操作系统的接口(以及各种必须 -有应用程序库)。

只要(1)C仍然是系统编程的唯一语言,并且(2)OS接口仍在不断发展,那么围栏,应用程序开发的另一方面的所有非C兼容语言将处于更加不利的地位。

PS其实这是我希望LLVM / clang可能破坏的模具之一。 clang实现为可重用的库,理论上允许混合语言。 例如,主源文件可以是一种语言(并由一个前端解析),但#include可以在C中(并由clang解析)。

有很多语言被明确设计以适应所有这些利基:

  • 社区商业
  • 气旋
  • 向前
  • 台面
  • CPL
  • BCPL(CPL的简化版,MULTICS的实现语言)
  • B(Ken Thompsons首先尝试使用系统编程语言,松散地基于BCPL,C的前身)
  • 阿达
  • d
  • C ++
  • Modula-2(专为Lilith个人计算机设计,作为系统编程的Pascal的inheritance者,也被IBM用作原始OS / 400的实现语言)
  • Oberon(专门设计为Modula-2的简单inheritance者)
  • 组件Pascal(面向对象的Oberon继任者,尽管它不是Pascal的直接inheritance者)
  • Modula-3(尽管名称不是Modula-2的inheritance者,但是是一个独立的开发)
  • Sing# (微软研究院奇点研究操作系统的实现语言)
  • Limbo(Inferno操作系统的语言(Plan 9的inheritance者(Unix的后继者)))
  • OOC
  • Erlang(可能不是用于操作系统,而是嵌入式实时系统,特别是在电信行业(电话交换机等)),最近(对Erlang的发明者来说,实际上有点令人惊讶)Web服务器,数据库系统等等)

有趣的是,还有一些语言没有专门设计来填补这个利基,但是已经非常成功地用于这个利基市场:

  • Smalltalk(几个Smalltalk操作系统,嵌入式系统,微控制器,实时系统,最着名的:泰克TDS500系列数字示波器)
  • Lisp(几个Lisp操作系统,嵌入式系统,微控制器,一些NASA航天器)
  • Java(几个Java OS(JNode,NewOS),嵌入式系统,微控制器,智能卡)
  • C#(几个操作系统(Cosmos,SharpOS),Mono用于高性能计算)
  • Haskell(众议院操作系统,经过seL4validation的微内核)
  • 帕斯卡(MacOS)

还有很多语言还没有被用于那个利基市场,但肯定可以 。 (主要是因为那些语言社区本身已经被“你只能用C语言编写操作系统”所欺骗,他们实际上认为他们自己的语言无法使用。)

  • ruby
  • python
  • ECMAScript(最近实际用于编写高性能Web服务器)

[请注意,对于我列出的三个类别中的每一个,实际上有数千种语言适合那里。]

事实上,人们有时会觉得那些并非专门为操作系统编程而设计的语言实际上适合这种事情。 例如,比较创新水平,稳定性,安全漏洞数量,性能,如20世纪70年代的Smalltalk OS和2010年的Windows或OSX。

就个人而言,我认为这是基于系统编程社区中的一些根深蒂固的神话。 他们认为用一种语言进行系统编程,比如强类型,类型安全,内存安全,指针安全,自动存储管理是不可能的,获得性能或实时保证的唯一方法是放弃强大的抽象设施。 然而,事实certificate,当你尝试为人而不是机器设计编程语言时, 人们实际上可以理解他们编写的程序,找到安全漏洞,修复错误,并在1行monad理解中更好地定位和修复性能瓶颈而不是100行循环。

例如,SqueakNOS是Squeak Smalltalk系统的变种,它在没有操作系统的情况下运行(换句话说:它操作系统)具有您期望从现代操作系统(图形用户界面,…)中获得的所有function。 。)加上你没有的一些(嵌入式脚本语言,可以在运行时修改操作系统的每一部分),重量仅为300k SLOC,并在不到5秒的时间内启动,而Windows重量为5000 SLOC。

显而易见的是C ++。

是您描述的所有内容,但是使用其他function(面向对象等)扩展了C。

来自Google的另一种有趣的系统编程语言: Go

BitC是一种特定的尝试。 这是一篇关于C替代品的精彩文章,以及他们失败的原因。

你可以考虑D. 从主页:

D是一种系统编程语言。 它的重点是将C和C ++的强大function和高性能与Ruby和Python等现代语言的程序员生产力相结合。 特别关注质量保证,文档,管理,可移植性和可靠性的需求。

D语言是静态类型的,并直接编译为机器代码。 它是多范式的,支持许多编程风格:命令式,面向对象和元编程。 它是C语法系列的成员,其外观与C ++非常相似。

除了C之外,Ada可能是这个领域中使用最广泛的语言。

它首先设计用于生成可靠的无错代码,但是,大多数Ada编译器也会生成优化良好的高效机器代码。

有一段时间,这种语言是国防部项目的强制措施,它仍然广泛用于航空电子设备,雷达,导航和武器控制系统。

FreePascal的。 pascal甚至在C之前创建,当时没有足够的RAM和CPU用于虚拟机,并且仍然用于完全相同的porpuses而不是C.现代的pascal化身即Delphi和freepascal添加了OO和generics,遵循C ++所代表的进化。 它们共享许多概念和设计,如指针,直接分配内存,在程序内部直接调用ASM,它们非常相似,在pascal程序中加载dll或c / c ++代码并不常见,反之亦然。 可能正在寻找像Basic这样的古老语言,有可能找到适合c的相同利基的实现。 语言遵循平台……

Ada,在大多数情况下是Objective-C。