为什么GNAT中预定义的单元文件名只有8个字符?

问题描述 投票:1回答:1

我正在为基于this work by Brent Seidel的Arduino Due构建运行时。该板使用Atmel SAM3X8E处理器,您可能会注意到这是一个七个字母的名称。布伦特在a-sam3x8.ads文件中做了这个注释:

--  This package should be called "System.Sam3x8e", but after lots of testing,
--  it seems that for some reason it just wouldn't find the package.  Calling
--  the package "System.Sam3x8" does work.

实际上,在我自己的测试之后,我无法使用“正确”的名称构建运行时。经过仔细检查,我注意到GNAT和其他BSP中的所有预定义文件似乎都是六个字母长,加上GNAT documentation on file naming rules中描述的前缀。还有一些关于gnatkr和“krunching”文件名的信息是一定数量的字符,甚至是一个预定义单位的例子,其中包含8个字符。但是,我无法找到有关缩短预定义单位的原因的任何解释。

我想修复这个特殊情况,我可以命名包System.SAM3X8E,然后krunch它或添加pragma Source_File_Name,但我真的只是有描述性的文件名。事实上,如果我可以重命名所有预定义文件以使用其全名,我会喜欢它。我知道他们会变长,但我宁愿拥有一个长长的,描述性的名字,而不是一个六字母的字母数字混乱。

compiler-construction runtime naming-conventions ada gnat
1个回答
2
投票

here所述,这个限制是8.3 filenames的容纳,包括不超过八个字符和可选的扩展名。正如@Zerte所说,here,GNAT出现了。 1995年随着Ada 95的出现,DOS仍然流行并且Windows在DOS上运行。此外,所有文件系统都具有名称length limits,而描述性包名称和层次结构深度则没有。实现方式因后者而异,但GNAT使用文件系统。

请注意,gnatkr只是将包名称转换为符合您问题中引用的file naming rules的文件名。

$ gnatkr System.Sam3x8e.adb
s-sam3x8.adb

应该可以在名为System.Sam3x8e的文件中包含名为s-sam3x8.ads的包

package System.Sam3x8e is…

这将允许其他编译单元在上下文子句中引用全名:

with System.Sam3x8e;
© www.soinside.com 2019 - 2024. All rights reserved.