替代C、C++的语言有哪些?

6

大家好,

有很多编程语言/操作系统/设备驱动程序,即使用CC ++构建的软件。我想知道C和C ++是否是所有公司构建其产品所必须使用的唯一两种低级编程语言?如果是这样,为什么C和C ++比其他选项更受青睐呢?


6
你需要了解什么?为什么要在这里问?http://en.wikipedia.org/wiki/Low-level_programming_language - S.Lott
2
@S.Lott:我不明白您在发布低级编程链接方面的观点,可能会投票关闭此线程。由于我在我的帖子中提到了它,所以我知道它是什么。我的问题是其他低级语言是否被广泛使用。 - name_masked
4
很抱歉,你说问题出在模糊不清的提示,这个提示对我来说太过含糊了。我以为你是在暗示维基百科文章已经回答了这个问题。 - Steve Jessop
1
@S.Lott:如果您认为我的问题含糊不清,我很抱歉,同时也感谢许多人理解了它的要点。 - name_masked
C++ 的真正替代品之一是 Rust - rustyx
显示剩余7条评论
10个回答

7
有许多适合操作系统开发的“中级”语言,但是C语言,以及在较小程度上的C++语言,远远是最受欢迎的。这其中有很多原因,包括:
- C语言作为Unix实现的早期成功导致其被广泛采用。 - 众多优秀的开发工具(编译器、lint、编辑器、内存泄漏分析、性能分析、代码生成器等等)的广泛可用性使得C语言更加引人注目。 - C语言接近于“抽象机器”层次;与Pascal相比,它具有更多的运行时开销。这在编写高性能软件时是可取的。C语言有时被称为“便携式汇编语言”,因为它接近于硬件。

2
+1 你的第一个要点是正确答案。C = Unix,C# = Microsoft,ObjC = iPhone。平台使语言流行。 - tidwall
1
@jojaba:据我所知,微软仍然使用C语言作为实际操作系统的编程语言,MacOSX内核也是如此,即使上层使用C# / ObjC进行实现。 - David Rodríguez - dribeas
@David:你说得对。我并不是想暗示每个公司或技术的操作系统都是用这种语言编写的,而是说需要一个流行的平台来帮助推动一种语言的发展。如果苹果没有发布iPhone,我怀疑在SO上,objective-c标签是否会比c标签更受欢迎。(纯属猜测) - tidwall

6

+1 我正要发布 Forth :-) - pmg
顺便说一下,这不仅仅是SPARC。我记得苹果也有这个功能,还有一些IBM pSeries盒子(AIX)也有。 - paxdiablo
@paxdiablo,你说得完全正确,一些苹果和IBM系统确实使用Open Firmware。不过我是在SPARC系统上遇到它的,所以才会想起它。 - corriganjc
@pmg 你在Forth方面做了很多工作吗?这是一门我想学习的语言,因为它非常不同。当Bruce Tate询问他的书“七周七语言”中应该包括哪些语言时,我投票支持了它,但不幸的是它没有被选中。 - corriganjc
我只是稍微玩过一下Forth语言,没有什么可以称之为工作。我想我喜欢“基于栈”的编程范式。 - pmg

3
还有其他低级语言,但C语言具有“流行雪球”效应的好处。
它是任何合理可移植语言一样高效,因此是系统编程的不错选择。一旦在其上构建操作系统,使用它构建相同系统的工具就变得很有意义,所以80年代和90年代许多程序员接触到了它。因此,它成为所有系统程序员熟悉的“通用语言”。
在不影响其效率或可移植性的情况下,你几乎无法改进C语言,因此在低级别上没有明显的竞争对手。

这就是我想要了解的。在Web编程语言或面向对象编程方面存在着如此多的竞争。但是在过程式语言的情况下,由于某种原因,C语言一直是企业公司关注的焦点。 - name_masked
“在不影响C语言的效率或可移植性的情况下,你可以做的改进相对较少,因此在低级别上没有明显的竞争对手。” 语法方面,我正在考虑C语言的“声明反映使用”类型。这很糟糕。我会用Scala、Go、Haskell或ML的后缀类型语法来替换它;例如,var x: int = 5;var dptr: **double;def sort(a: *int, len: int, cmp_lt: (int, int) -> bool): unit;。在我看来,这种改进将是巨大的,而且这种变化对性能或可移植性没有任何影响。 - Harrison
你不能指出那种语法比C语法更好,以至于人们应该转换。即使它显然是客观上更好的,一旦C占据了优势,这并不足以改变。考虑世界语与英语、Dvorak与QWERTY。如果那种语法可以将编译时间减半或者其他什么,那么你可能会让人们转换。 - Russell Borogove

3

我知道一些人在使用D语言进行系统编程。它比C#等语言更低级,但具有现代语言的许多优点。


D 严重依赖于垃圾回收。很难想象用它来编写低级代码。 - rustyx
维基百科上写道:“D语言是一种面向对象、命令式、多范式的系统编程语言……”它可以对GC进行更精细的控制,并允许显式释放内存,这使得它非常适合使用。 - Steve Rowe

3
比低级别的抽象更重要的是,C语言和(禁用RTTI的C++)在系统软件方面适用的关键特性是它们不需要任何运行时库。你可以用同样的语言编写编译器,但你不能用依赖于它的语言编写运行时。虽然C有一个标准库但没有运行时库,所以你可以用C实现标准库,也可以用它来编写其他语言的运行时库。禁用RTTI的C++同理。

2
不,公司用来制作软件的语言非常多。C语言在特定领域具有明显优势,即很低级别的编程,因为它在代码和硬件之间几乎没有限制。
大多数其他语言(包括C++在内,除非你只使用它的C部分)往往携带许多不必要的负担,这对于应用程序编程来说是绝对福音,但对于系统级别的编程而言却会成为阻碍。
当然,您也可以使用汇编语言,但随着C编译器的质量越来越高,这很少有必要了。

在C++中,您不需要妥协于其C子集。有许多在C中不可用且不会带来任何成本的功能:构造和析构(RAII),模板(它们可能会在内存方面产生成本,但不会影响速度),虚函数在需要时并不比函数指针更差... - David Rodríguez - dribeas

2

Ada、Pascal、汇编语言、Fortran等等。即使你将讨论限制在低级语言范畴内,你仍然有很多选择。有很多公司根本不使用C或C++(例如,美国军方在使用Ada进行大量工作)。

C和C++之所以如此流行,是因为很多人都懂这些语言(我知道这是一个递归的答案)。公司使用C或C++是因为很容易找到知道这种语言的开发人员,而开发人员学习这种语言是因为公司在招聘这种人才。此外,对于C和C++,有非常广泛的书籍、编译器、IDE、调试器、库等等选择,并且C/C++编译器可用于几乎任何可能遇到的平台。此外,这些语言已经存在了相当长的时间。传统的C代码更可能由C开发人员维护,而不是用另一种语言重新编写。C和C++都是多功能、强大的语言,未来仍将被广泛使用。但它们远非唯一的选择。


1

自Unix早期以来,C语言一直是通用语言。有如此众多的现有C代码,如此丰富的文化根源,人们只是使用这种语言。它不仅仅如此:C语言设计得非常好:在其简单性、学习速度、编译速度、编码速度、运行速度方面,在其类似于圣经般的教程书和我们今天仍然使用和破解的大量坚实的开源代码方面等等。它只是一门有用的语言,就像没有压力独立、重力独立的钻石闪闪发光的百万美元笔和拥有天使指纹的铅笔无法取代。

至于C++,它并不像C语言那么简单。相反:从语法、黑暗角落、学习曲线、适当的现代代码和其他标准方面来说,它可以说是比任何其他语言都要复杂。人们会认为这种复杂性会毁掉这门语言,事实上许多人已经这样说了几十年。Java就是基于这个前提而诞生的。但是今天我们已经过去了大约30年,这门语言仍然活跃在StackOverflow的10个最流行标签之中。有许多人对这种语言充满热情,包括我在内。

当然,这并不解释为什么C++成为了一门流行的语言。我认为这是因为C++在支持许多不同编程范式方面给予你的自由度。这就是C++如何支持像C一样低级别的编程,具有同样的效率,同时也可以支持其他高级语言,只要使用适当的辅助库。我建议你阅读Bjarne Stroustrup的这篇采访

对于低级别编程来说,C和C++显然不是唯一的选择。但它们是非常难以抗拒的选择。如果我可以大胆地建议,我认为它们是最佳选择,仅因为它们的坚实、悠久的历史表明它们将会长期存在;还因为已有的大量可靠代码集展示了你可以用这些语言实现的事情。现有软件的支持需求保证了网络上有很多活跃的论坛、很多雇主——总之,这是一对活跃、充满生机的语言。


1
如果你认为C语言是一个良好设计的典范,那么你最近肯定没有尝试教授任何人函数指针语法。不要误解我,我使用C语言并且喜欢它--但它有很多缺陷。 - Porculus
@Porculus 恭喜你,你发现了 C 语言语法中的一些尴尬之处。现在你知道任何语言都有其语法上的小毛病。但是 C 语言仍然是一种简单的语言,这大大减少了它可能出现语法尴尬的领域。 - wilhelmtell
另外,是的,我仍然认为C语言是一个良好语言设计的光辉例子(你忘了强调)。Bjarne Stroustrup说过,有两种语言:一种是人们抱怨的,另一种是没人使用的。就是这样。 - wilhelmtell
+1,说得好。虽然C语言对字符串处理的最小支持是软件安全漏洞的主要原因之一。 - Charles Salvia

0

C#怎么样?许多Windows应用程序都是使用C#构建的。

Perl/Python怎么样?许多Windows和Linux上的应用程序都是使用这些语言构建的。

D语言怎么样?它总是一个很好的语言,但遗憾的是它与本地C++的交互不够顺畅。


6
OP似乎特别关注用于系统和设备驱动程序的低级语言,而不是应用程序语言。 - Russell Borogove

0

部分原因是因为C语言是第一批被广泛采用的高级语言之一(在B语言之后)。像Java这样的语言是由公司拥有的,如果公司突然倒闭,你就看不到来自Oracle的任何更新。此外,C和C++可以转换成相对较少的汇编代码,使其更小更紧凑。

C语言最重要的哲学是你不必为你不需要的东西付费。(例如,在Java中,你有垃圾回收机制,但如果你编写一个不需要垃圾回收机制的程序,那么你就浪费了资源,并且你会以速度和效率的代价来付出。)在C语言中,如果你需要某些东西,你就自己创造它,没有浪费资源,代码更加高效(取决于程序员)。


AB 语言?请引用出处。C 语言起源于 BCPL,BCPL 起源于 CPL。除非你是在幽默。 - paxdiablo
你说得对,它确实来自那里,但是在C语言之前有一些叫做A的编程语言和一个叫做B的编程语言。如果我在谷歌上花更多时间,你可能可以找到为什么他称其为C而不是“超级棒的语言”的原因。这只是语言名称的顺序。 - Jim
C语言最初的开发是在1969年至1973年间由AT&T贝尔实验室完成的;根据Ritchie的说法,最具创造性的时期发生在1972年。它被命名为“C”,因为它的特性源自一种早期的语言叫做“B”,而根据Ken Thompson的说法,“B”是BCPL编程语言的简化版本。来源于维基百科http://en.wikipedia.org/wiki/C_%28programming_language%29#Early_developments - Jim
@paxdiablo:http://cm.bell-labs.com/cm/cs/who/dmr/chist.html,“Ken Thompson于1969-70年创建了B语言,它直接派生自Martin Richards的BCPL。Dennis Ritchie在1971-73年间将B语言变成了C语言。”该来源是权威的。我不知道是否有一种叫做A的语言(如果有的话,它是否与该语言家族有关),但是Ritchie也不确定为什么“B”被称为“B”。 - Steve Jessop
我非常确定 BBCPL 的简化版,而 C 则是 B 的修改版。如果你指的是 A,那么你是指的 ADA 吗? - tidwall
我记得有一位教授称之为A,不知道那是一种实际的语言还是一种速记方式。但是,我承认我应该再次确认A,所以谢谢@Steve Jessop和jojaba。 - Jim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接