有没有与C相同的语言?

时间:2010-07-27 09:20:45

标签: c

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

10 个答案:

答案 0 :(得分:15)

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

  • BitC
  • Cyclone
  • 第四
  • 梅萨
  • CPL
  • BCPL(简化版CPL,MULTICS的实施语言)
  • B(Ken Thompsons首次尝试使用系统编程语言,基于BCPL,C的前身)
  • 阿达
  • Go
  • D
  • C ++
  • Modula-2(专为Lilith个人计算机设计,作为系统编程的Pascal的继承者,也被IBM用作原始OS / 400的实现语言)
  • Oberon(专门设计为Modula-2的简单继承者)
  • 组件Pascal(面向对象的Oberon继任者,尽管它不是Pascal的直接继承者)
  • Modula-3(尽管名称不是Modula-2的继承者,但是是一个独立的开发)
  • Sing#(Microsoft Research的Singularity Research OS的实现语言)
  • Limbo(Inferno操作系统的语言(Plan 9的继承者(Unix的继承者)))
  • Ooc
  • Erlang(可能不是用于操作系统,而是嵌入式实时系统,尤其是电信行业(电话交换机等)),最近(对Erlang的发明者来说,实际上有点令人惊讶)网络服务器,数据库系统等。)

有趣的是,还有一些语言专门设计用于填补这个利基,但在那个利基中已经非常成功地使用

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

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

  • 红宝石
  • 的Python
  • ECMAScript( 最近实际用于编写高性能Web服务器)

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

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

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

例如SqueakNOS,它是没有操作系统运行的Squeak Smalltalk系统的变体(换句话说:它操作系统)具有您期望的所有功能一个现代的操作系统(图形用户界面......)加上一些你没有的(嵌入式脚本语言,可以在运行时修改每一个操作系统),重量仅为300k SLOC,并在不到5秒的时间内启动例如Windows的重量为50 百万 SLOC。

答案 1 :(得分:6)

显而易见的是C ++。

是否描述了所有内容,但使用其他功能(面向对象等)扩展了C语言。

答案 2 :(得分:4)

Google提供的另一种有趣的系统编程语言:Go

答案 3 :(得分:4)

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

答案 4 :(得分:3)

你可以考虑D。从主页:

  

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

     

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

答案 5 :(得分:3)

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

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

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

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

  

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

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

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

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

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


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

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

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

答案 9 :(得分:0)

Scala Native 试图成为 C 领域的函数式编程和函数式对象的演变。 Scala Native 生成​​硬件机器代码而不是 JVM。 https://scala-native.readthedocs.io/en/v0.4.0/