代码之家  ›  专栏  ›  技术社区  ›  Matt Joiner

有没有什么语言和C语言一样适合?

c
  •  17
  • Matt Joiner  · 技术社区  · 14 年前

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

    9 回复  |  直到 11 年前
        1
  •  0
  •   Dummy00001    14 年前

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

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

    这意味着在应用程序开发中使用C在很大程度上是由一个简单的事实推动的,即如果使用C,就可以自动访问同样用C编写的内核(OS)的所有特性。

    唯一能以某种方式与C竞争的语言是基于C的/与C兼容的语言。我唯一知道的是C++。在旧时代,也有相对流行的翻译人员,如 p2c (Pascal到C):一种语言的开发程序,但源代码会自动翻译成C进行编译。但是翻译人员有相当多的缺陷,而且不懂C语言,经常无法调试程序。所以如果你一定要懂一些C语言,为什么还要麻烦翻译呢。


    明亮的 )最终,您需要重新实现几乎整个操作系统(以及各种必备的应用程序库)的接口。

    只要(1)C仍然是系统编程的唯一语言,(2)操作系统接口仍在不断发展,所有与C不兼容的语言在应用程序开发的另一边都将处于更大的劣势。

    LLVM / clang 可能会破裂。clang实现为一个可重用的库,理论上允许混合语言。例如,主源文件可以使用一种语言(并由一个前端解析),但是 #include s可以在C中(并通过叮当声进行解析)。

        2
  •  15
  •   Jörg W Mittag    14 年前

    • BitC
    • Cyclone
    • 台地
    • CPL公司
    • B(kenthompsons首先尝试了一种系统编程语言,它松散地基于BCPL,C的前身)
    • 艾达
    • Go
    • D
    • Modula-2(专门为Lilith个人计算机设计,作为Pascal系统编程的继承者,也被IBM用作原始OS/400的实现语言)
    • Oberon(专门设计为Modula-2更简单的继承者)
    • 组件Pascal(Oberon的面向对象继承者,尽管它不是Pascal的直接继承者)
    • Modula-3(尽管名称不是Modula-2的继承者,而是独立开发)
    • Sing#
    • Limbo(Inferno操作系统的语言(Plan9的继承者(Unix的继承者)))
    • Ooc
    • Erlang(可能不是操作系统,而是嵌入式实时系统,特别是在电信行业(电话交换机等),最近也出现了web服务器、数据库系统等(实际上,Erlang的发明者对此有些惊讶)

    专门为填补这一空缺而设计,但已经非常成功

    • Lisp(几个Lisp操作系统、嵌入式系统、微控制器、一些NASA航天器)
    • Java(几种Java操作系统(JNode、NewOS)、嵌入式系统、微控制器、智能卡)
    • Haskell(家庭操作系统,seL4验证的微内核)
    • 帕斯卡(MacOS)

    还有很多语言还没有在这个领域使用,但这是肯定的 能够

    • 红宝石
    • 蟒蛇
    • 最近实际用于编写高性能Web服务器)

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

    我个人认为,这是基于系统编程社区中一些根深蒂固的神话。他们认为,用一种语言进行系统编程,比如说,具有强类型、类型安全、内存安全、指针安全、自动存储管理是不可能的,而获得性能或实时保证的唯一方法就是放弃强大的抽象设施。然而,当您试图为 人类 代替机器,那么人类实际上可以理解他们编写的程序,发现安全漏洞,修复bug,定位和修复性能瓶颈,在一行monad理解中比在100行for循环中要好得多。

    例如squeakons,它是Squeak Smalltalk系统的一个变种,运行时没有操作系统(换句话说:it) 操作系统)拥有现代操作系统(图形用户界面,…)所能提供的几乎所有功能,加上一些不具备的功能(嵌入式脚本语言,可以在运行时修改操作系统的每一部分),其SLOC的重量仅为300k,开机时间不到5秒,而Windows的重量为50% 斯洛克。

        3
  •  6
  •   Edan Maor    14 年前

    最明显的就是C++。

    做你所描述的一切,但是用其他特性(面向对象等)扩展了C。

        4
  •  4
  •   Marimuthu Madasamy    14 年前
        5
  •  4
  •   Matt Joiner    14 年前

    BitC 是一种特殊的尝试。 Here 这是一篇关于C的替代品以及它们失败的原因的伟大文章。

        6
  •  4
  •   L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳    14 年前

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

    它的设计首先是为了产生可靠的无bug代码,但是,大多数Ada编译器也会产生经过良好优化的高效机器代码。

    一段时间以来,这种语言是国防部项目的强制性语言,目前仍广泛用于电子设备、雷达、导航和武器控制系统。

        7
  •  3
  •   Community Keith    4 年前

    你可以考虑 D

    D是一种系统编程语言。它的重点是将C和C++的功率和高性能与露比和Python等现代语言的程序员生产力相结合。特别注意质量保证、文件、管理、可移植性和可靠性的需要。

        8
  •  1
  •   vitaly.v.ch    14 年前

    Ada和大多数情况下的Objective-C。

        9
  •  1
  •   devsmt    14 年前

    帕斯卡。 它们共享许多概念和设计,如指针、内存的直接分配-释放、程序内ASM的直接调用,它们非常相似,在pascal程序中加载dll或c/c++代码并不罕见,反之亦然。 也许看看像Basic这样的古老语言,就有可能找到适合c语言的实现。