Linux下的Ada编译器

16

我正在为在Linux上进行Ada开发做一项交易研究。您有任何好的编译器/操作系统推荐吗?

到目前为止,我已经成功在CentOS 5.4上运行了AdaCore的GNAT,并已经申请了Rational Apex和Aonix ObjectAda的许可证。

这是一项移植工作。原始代码库是OSF1 4.0d上的Apex 3.0。

还有其他值得考虑的内容吗?理想情况下,它应该是一个受支持的环境。


5
重写不是一个选项。这是150万行代码。 - Dave
2
GNAT通常在Linux上运行,因此您不必过多担心特定的发行版。事实上,FSF版本的GNAT作为所有主要Linux发行版的一部分进行分发。由AdaCore支持的GNAT可能会受到更多的发行版限制,您需要与他们核实。 - Marc C
2
哦,还有我几年前独自将1.2 MSLOC的Ada(GNAT)和约200 KSLOC的C(gcc)从Silicon Grahics/IRIX移植到PC/Linux,用了4个月的时间。Ada花了大约2周,其余的让我掉了很多头发...(:-) - Marc C
7
@bmargulies:展示了无知的一面。即使Ada是一种完全糟糕的语言(一个曾经使用过它的人的提示:它并不糟糕),当其本地语言的编译器可用时,只有完全的白痴才会尝试将150万行代码重新编码为另一种语言以完成相同的事情。那几乎是犯罪般的愚蠢行为。 - T.E.D.
1
@bmargulies:你说的“每个人都实现了不同的2/3”是什么意思?自从有人编写Ada子集编译器以来已经过去了25年。Ada语言定义由核心定义和附录组成。每个供应商都实现了核心,否则就不是Ada。我不知道有哪个供应商不至少实现了Annex A(标准库)和B(与其他语言的接口),而供应商在其余的方面则各不相同,有些很容易(数值计算),有些则更难(分布式系统)。 - Marc C
显示剩余2条评论
4个回答

13

需要考虑的一个问题是确定被移植系统在执行其功能时利用厂商提供的软件包的程度。我看过一些老的、大型系统,特别是Apex系统,在开发期间,语言专家往往决定使用纯粹的Ada就不够好,因此会使用所有这些厂商提供的软件包。如果您的系统现在也是这样做的,那么升级到同一厂商的新版本并继续使用Apex(其他事项基本相等)是一个很有说服力的理由。

每当我进行这种系统的移植时,如果有机会,我都尽力删除所有厂商提供的东西 - 十次中有九次,用纯粹的Ada实现替换厂商特定的内容效果同样好,并且您不再需要处理编译器特定软件包的怪癖。此外,您还可以增加系统的可移植性和可维护性,使其更好地适应未来的变化。


谢谢,这是值得考虑的优秀建议。除非在接下来的几天里有任何值得推荐的新编译器,否则我会将其标记为答案。 - Dave
我看到你的个人资料显示你在阿拉巴马州,并回答了Ada相关的问题。你一定是在亨茨维尔,对吗? - Dave
搞定了,需要外包端口吗? - Marc C
外包?我们很有可能是为同一家公司工作的 :) - Dave
不太可能。公司里只有一个叫做戴夫的人,而他用的是大卫这个名字。而且,你应该已经认识我 :-) - Marc C

5

总有SPARK可用,但我认为它是Ada语言的一个专业/子集版本。您可以联系SigAda或Ada Usenet组,以了解是否有其他想法。

不过,GNAT是一个很好的工具集。您可以使用GNATBench(Eclipse接口)或GPS(轻量级GTK+ IDE)与GNAT工具进行交互。


1
是的,GNAT目前看起来不错。我会看一下SPARK,谢谢。 - Dave
你说得对,SPARK是Ada的子集或超集。无论如何,谢谢。 - Dave
1
SPARK是一个技术上统一的软件开发和验证系统,它使用Ada的子集作为其工作语言。 - Marc C
2
嗯...Spark可以被视为一种独立的编程语言,因此在我看来,考虑将其工具集用于将现有的Ada项目移植到另一个平台/编译器中是不值得的。我认为Spark很棒,但将现有的Ada应用程序转换为Spark("sparkify" Ada代码)并不容易。 - Santiago

2

是的,我找到了那些,但我没有看到任何Linux支持。这让我感到惊讶。 - Dave
除了目标模拟器之外,它们也不提供真正的Windows支持。我认为通用操作系统并不是他们的市场。 - T.E.D.

2

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