Compiler construction 为什么预定义的单位文件名只有8个字符?

Compiler construction 为什么预定义的单位文件名只有8个字符?,compiler-construction,runtime,naming-conventions,ada,gnat,Compiler Construction,Runtime,Naming Conventions,Ada,Gnat,我正在为Arduino Due构建一个运行时,基于。电路板使用Atmel SAM3X8E处理器,正如您可能注意到的,它是一个七个字母的名称。Brent在文件中做了如下说明: 事实上,在我自己的测试之后,我无法使用“正确”的名称构建运行时。仔细检查后,我注意到GNAT和其他BSP中的所有预定义文件似乎正好有六个字母长,加上中描述的前缀。还有一些关于gnatkr和将文件名“krunching”为一定数量的字符的信息,甚至还有一个预定义单元被krunching为8个字符的示例。然而,我找不到任何解释来

我正在为Arduino Due构建一个运行时,基于。电路板使用Atmel SAM3X8E处理器,正如您可能注意到的,它是一个七个字母的名称。Brent在文件中做了如下说明:

事实上,在我自己的测试之后,我无法使用“正确”的名称构建运行时。仔细检查后,我注意到GNAT和其他BSP中的所有预定义文件似乎正好有六个字母长,加上中描述的前缀。还有一些关于
gnatkr
和将文件名“krunching”为一定数量的字符的信息,甚至还有一个预定义单元被krunching为8个字符的示例。然而,我找不到任何解释来解释为什么预定义单位被缩短了

我想,为了解决这个特殊情况,我可以将包命名为
System.SAM3X8E
,然后将其取消或添加
pragma Source\u File\u name
,但我真的希望只使用描述性文件名。事实上,如果我可以重命名所有预定义的文件以使用它们的全名,我会很高兴。我知道它们会很长,但我宁愿有一个长的描述性名称,而不是一个六个字母的字母数字混乱。

如前所述,这个限制是为了适应,由不超过八个字符和可选扩展名组成。正如@Zerte所指出的,GNAT在1995年随着Ada 95的出现而出现,当时DOS仍然很流行,Windows在DOS上运行。此外,所有文件系统都有名称,而描述性包名称和层次结构深度则没有。实现在如何适应后者方面有所不同,但GNAT使用文件系统

请注意,
gnatkr
只是将包名转换为满足问题中引用的文件名

$ gnatkr System.Sam3x8e.adb
s-sam3x8.adb
在名为
s-sam3x8.ads

package System.Sam3x8e is…
这将允许其他编译单元在上下文子句中引用全名:

with System.Sam3x8e;

看,很有趣。所以我想当Ada在83年首次出现时,它是必要的,或者至少是强制的,以确保可移植性。现在为了向后兼容,它一直保持这种方式。GNAT在1995年左右问世(使用Ada 95…),但游戏中仍然有DOS,或者是DOS之上的Windows版本。谢谢大家提供的信息。如果有人想用这个信息发布答案,我会接受它作为最佳答案。还感谢@Zerte为澄清所做的编辑。谢谢。对于记录,我没有使用
gnatkr
而是在
gnat.adc
中使用
pragma Source\u File\u Name
,以获得相同的结果。
with System.Sam3x8e;