Почему предопределенные имена файлов модулей в GNAT только 8 символов? - PullRequest
0 голосов
/ 04 марта 2019

Я строю среду исполнения для 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 о правилах именования файлов .Там также есть некоторая информация о gnatkr и именах файлов "krunching", которые должны содержать определенное количество символов, и даже пример предопределенной единицы, которая сокращается до 8 символов.Тем не менее, я не могу найти никакого объяснения относительно , почему предопределенные единицы сокращены.

Я полагаю, чтобы исправить этот конкретный случай, я мог бы назвать пакет System.SAM3X8E, а затем отменить его или добавитьpragma Source_File_Name, но я бы предпочел просто иметь описательные имена файлов.На самом деле, я бы хотел, чтобы я мог переименовать все предопределенные файлы, чтобы использовать их полные имена.Я знаю, что они получатся длинными, но я бы предпочел иметь длинные, описательные имена, чем шестибуквенный алфавитно-цифровой беспорядок.

1 Ответ

0 голосов
/ 11 марта 2019

Как отмечено здесь , это ограничение является приспособлением для 8,3 имен файлов , состоящих не более чем из восьми символов и необязательного расширения.Как отметил здесь @Zerte, GNAT вышел ок.1995 год с появлением Ada 95, время, когда DOS все еще был популярен, а Windows работала поверх DOS.Более того, все файловые системы имеют ограничения по имени длины , а описательные имена пакетов и глубину иерархии - нет.Реализации могут различаться в зависимости от последних, но GNAT использует файловую систему.

Обратите внимание, что gnatkr просто преобразует имя пакета в имя файла, которое соответствует правилам именования файлов процитировано в вашем вопросе.

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

Должно быть возможно иметь пакет с именем System.Sam3x8e в файле с именем s-sam3x8.ads

package System.Sam3x8e is…

Это позволит выполнить другую компиляциюединицы для ссылки на полное имя в контекстном предложении:

with System.Sam3x8e;
...