Compiler construction 从Rational Apex Ada编译器迁移到GCC Ada编译器

Compiler construction 从Rational Apex Ada编译器迁移到GCC Ada编译器,compiler-construction,ada,Compiler Construction,Ada,我将使用Ada语言进行软件开发项目。客户正在使用RationalApex Ada编译器,我将使用GNU编译器。我的代码应该可以在客户的pc机上正常工作。在Ada语言中,哪些是可能的编译器相关代码?所以我可以开发一个独立于编译器的代码。此外,我想编译和执行客户的代码在我的电脑 谢谢 在艾达中,编译器依赖的代码比许多其他语言(如C或C++)在代码中的作用小得多。然而,依赖于编译器的包并不少见,编译器特定的杂注和属性也可能存在 根据我的经验,rationalapex开发人员似乎有过度使用Rationa

我将使用Ada语言进行软件开发项目。客户正在使用RationalApex Ada编译器,我将使用GNU编译器。我的代码应该可以在客户的pc机上正常工作。在Ada语言中,哪些是可能的编译器相关代码?所以我可以开发一个独立于编译器的代码。此外,我想编译和执行客户的代码在我的电脑

谢谢
在艾达中,编译器依赖的代码比许多其他语言(如C或C++)在代码中的作用小得多。然而,依赖于编译器的包并不少见,编译器特定的杂注和属性也可能存在

根据我的经验,rationalapex开发人员似乎有过度使用Rational提供的包的倾向


人们要么移植或重新实现这些包,要么重新编码与它们交互的Ada,以使用纯Ada方法,这是非常首选的选择。

根据我的经验,在Gnat和另一个供应商的编译器之间进行转换的主要困难是处理Gnat奇怪的文件命名要求。我相信Rational和大多数编译器一样,会很乐意使用您提供的任何文件名,并且只跟踪内部文件的映射。Gnat不是那么宽容,但不需要内部映射文件

所以,如果你们都是从头开始写,我的建议是标准化Gnat首选的文件命名。这意味着每个Ada程序单元有一个源文件,文件名与程序单元名匹配,但全部小写,点替换为连字符。包规范使用.ads扩展名,程序单元体使用.adb


否则,代码不能完全可移植的原因就不多了。我曾从事过一项工作,该工作使用基于Intermetrics的前端为VxWorks操作系统目标构建了高保真飞行模拟器,我们能够在Win32桌面上用Gnat重建该目标,以进行基本桌面测试。即使是硬实时调度器也移植得很好,因为它在实现中使用了所有Ada任务原语。IIRC,我们必须处理的唯一不可移植的调用是BIOS调用以设置电池备份的TOD时钟,以及单个VxWorks操作系统调用以设置其实时时钟频率。弄清楚如何正确地进行gnatchopped所花费的时间远远超过终止这两个调用所花费的时间。

我当前的项目使用了一些特定于编译器的gnat特性分支,我们还打开了一系列警告,在编译的某个时候,这些警告会给我们错误消息:

warning: use of this unit is non-portable and version-dependent

如果您还要求编译器将警告视为错误,-gnatwe,那么当您发现警告时,编译应该失败。

GNAT Pro的下一版本将提供一个新的pragma配置文件Rational,以帮助从Apex移植到GNAT。请参阅以获取说明。

由于困难将取决于未指定的依赖项,因此您的问题过于宽泛。请毫不犹豫地编辑此问题或针对您遇到的特定问题提出新问题。默认情况下,Apex使用*.1.ada表示规格,使用*.2.ada表示实体。同意这一建议,最简单的方法是编写gnatchop脚本来处理源文件集,使它们以一种令人愉快的方式重命名。@MarcC:如果重命名文件不是一个选项,或者不方便,您只需将gnatchop合并到构建过程中即可。@Marc:Apex命名方案是中可以处理的简单方案之一。@SimonWright-True,但这不能处理Apex用户出于某种原因决定将多个程序单元放入一个文件中的情况。你要么必须非常清楚地告诉他们,当他们的编译器不这样做的时候,不要这样做,要么就在Gnat方案上正式标准化。随着程序/标准的发展,我认为后者更明确,更不容易出错。非常感谢您的回答。关于重命名文件,我可以使用GPS IDE进行重命名。GPS IDE使用GNAT编译器可以选择.adb/.ads扩展名或.1.ada/.2.ada扩展名。因此,我也可以使用.1.ada/.2.ada扩展来运行我的项目。不知道我将要面对的所有其他挑战是什么,但文件命名约束已解决。-PadmapriyaNote指出,Gnat还附带许多诱人的非标准软件包。所以他也需要注意自己-@T.E.D.是的,我完全虚伪地充分利用了它,理由是我不太可能在我的个人项目中使用不同的编译器:-嘿,这是Britt Snodgrass吗?欢迎来到StackOverflow!自由投票给你!嗨,马克。是的,是我。在过去的几个星期里,我偶尔在这里潜伏。这似乎是一个很好的参与论坛。