用Ada语言编写的Erlang?

8

另一个线程引用了以下内容:

  1. Erlang VM BEAM和HiPE主要由C编写。
  2. Linked-in驱动程序主要由C编写。(它们被插入到VM中并提供与外部世界的通信。)

我读到一些观点认为,Ada的强类型、模块化、运行时检查、并行处理等等都比C更好。

使用Ada编译的Erlang是否比使用C制作的Erlang明显更好或更差?

这只是一个假设性的问题。


3
谢谢大家的回答。我一直在研究Erlang,然后发现了一个引起我兴趣的Ada故事。我会继续学习Erlang,但Ada会是下一个目标。直到最近,我一直认为Ada已经过时并且没什么用处,但我错了。有这么多应用程序要探索,时间却那么有限。 - Paulb
3个回答

11
通常在这样的话题上我会给你一堆模棱两可的话,但事实证明这个确切问题已经 被研究过了(是一个.doc文件。抱歉)。
Rational公司有一个编译器,其中包含大量用两种语言编写的代码以及多年编译的大量数据,包括缺陷率、修复时间等等。出于好奇心,他们的一名工程师对数据进行了分析。
答案是“使用C语言开发的成本超过了使用Ada语言开发的成本”。如果你仔细阅读摘要标题后面的内容,你会发现他们发现用Ada编写同样的代码只需要C语言编写时的一半成本。
我知道每个阅读这篇文章的人都急于打破这个结论的漏洞。我也是。但他们在报告中考虑了我能想到的几乎所有角度。

2
实际上,尽管我之前的评论,我真的很喜欢使用ADA进行开发。我完全可以理解为什么报告会得出这样的结论。 - San Jacinto
Ada的开发生命周期较低廉,这与我的直觉相反。我原本以为C程序员的供需关系会导致他们比相对稀有的Ada程序员更便宜。好奇。 - Paulb
我在这两种语言中都进行了相当多的开发工作,可以报告我的薪水没有太大的差异。 - T.E.D.
4
在我的职业生涯中,我曾经把数以百万计的Ada和C代码构成的混合应用程序从一个平台移植到另一个平台,适应了硬件、操作系统或编译器的改变。然而在每种情况下,移植C代码所需的工作量都远远超过了Ada代码。虽然C只占系统行数的少数部分,但是按照经验推测,移植C代码所需的工作量占整个移植工作量的80%以上。其中的核心原因是需要重新适应所有特定于系统的怪癖。当C被限制为“可移植的汇编语言”时,它非常易于移植,但它很少局限于该领域。 - Marc C
这是非常正确的,如果需要更多的链接,请参考:https://dev59.com/unNA5IYBdhLWcg3wYMt-#988366 - none

4
“更好”是指什么?是指更快吗?是指更少的错误吗?是指更易移植吗?是指更易读吗?是指更易扩展吗?
对于任何适当定义的“更好”,都可以提出正反两种观点。然而,几乎是不言而喻的,没有哪种编译语言比C更易移植。因此,如果您的目标之一是使您的应用程序高度可移植,那么C是一个很好的选择。
比起Ada,更多的人理解C语言。如果使用Ada编写Erlang扩展,可能会更加困难,因为熟悉该语言的人较少。
C代码可以具有很高的性能,但我不知道在编译器优化方面C和Ada之间有什么比较。
Ada的类型检查可能很有用,也可能是真正的问题。可以假设VM会对其所关心的部分进行自己的类型检查。在Ada中,RTTC的开销可能会带来完全不必要的负担。

3
通常来说,编译器对程序了解得越多,它就越容易优化代码。在这方面,Ada比C更强。然而,任何编译器实际上能优化得多好,更取决于程序作者想让它优化得有多好,因此你在实践中不太可能看到很大的差别。 - T.E.D.
“更好的是什么?” 很好的观点。谢谢。..我认为就速度、可靠性和可移植性而言,C语言或Ada语言编写的Erlang可能会不相上下。T.E.D.(下面)引用了一份文件,暗示Ada可能是更好的商业决策。 - Paulb
1
这个影响不仅仅是成本。对于任何产品来说,有三个变量:成本、质量和时间。如果你保持其中两个变量不变,你就可以决定第三个变量。所以当他们说“成本减半”时,隐含的意思是“在相同的质量和时间下”。如果你宁愿花同样的钱,你可以选择获得更好的质量或者更快地完成同样的质量。 - T.E.D.

0
也许,但你的Ada编译器是用什么语言编写的呢?Ada?那你第一个Ada编译器的编译器呢?
在构建软件时,形式化语义和软件流程比编码所用的语言更重要。

1
我不确定你在这里问什么。大多数编译语言,包括我所知道的所有Ada编译器,都是自举的(用它们自己编写)。 - T.E.D.
我的观点是,最终会有一些派生语言,而不是你用来编写当前编译器的语言,并且你使用了其他人开发的工具中固有的所有不安全因素...所以我不确定你的观点是什么...如果你回溯到足够久远的时候,每个ADA编译器都有其根源于一种在任何方面都不太安全的语言...而那个更早的编译器也将包含错误... - San Jacinto

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