Роман М. писал(а):
В интерфейсных модулях сторонних библиотек (большей частью, написанных на C) я считаю верных подходом отделять определение базовых типов в специальные модули. Такие модули, как правило, аппаратно- и компиляторо-зависимы.
Вместо этого я бы создал отдельный модуль, в котором определил бы такие типы, как UInt8, Pointer, Integer, Cardinal, PChar и прочие. Затем я бы импортировал их в интерфейсном модуле. Так мы добиваемся универсальности при переносе на другие платформы и компиляторы, даже в пределах совместимости между различными компиляторами Оберонов.
1) Для ББ (про прочие компилеры не знаю) введением особого модуля для типов Вы не избавитесь от SYSTEM, т.к. его сразу тянет MODULE Aaa ["os-lib.file"].
2) На базе опыта и ощущений: не стал бы я гоняться за универсальностью реализации в интерфейсных модулях (поминая макросы, воркэраунды и проч.). Основная цель, по-моему, сделать интерфейс как можно ближе к [задокументированному] оригинальному. А из-за разницы в языках (напр. Си-Оберон) это не всегда делается одинаково. Например, unsigned int можно как INTEGER перевести, а можно как SET...
3) я придерживаюсь такой схемы: в документации пишу соответствие типов
Думаю, лучше говорить о единообразности процесса переноса, когда будет использоваться не особый модуль, а общие соглашения (именование, выбор правильного типа) по переводу типов, записанные (и обновляемые) в общедоступном месте.
Особые ситуации, по-моему, бывают довольно часто. Если есть общие соглашения --- в случае исключения им можно не следовать. Если есть набор модулей, претендующий на универсальность, придётся часто и сильно ломать голову над тем, как эту универсальность (отсутсвтвие особых ситуаций) обеспечить.