Иван Денисов писал(а):
В решении arisu мне не нравится нарушение соответствия названия модуля и его кода (наличие глобального состояния платформы).
эм… а вот это не глобальное состояние разве?
Код:
PROCEDURE Init;
BEGIN
IF Dialog.platform = Dialog.windows THEN
Kernel.LoadMod("DevProfiler__Win")
END
END Init;
и, кстати, как это нарушение? вот написано: `HostBackends`. открываем модуль — там `MODULE HostBackends`. печатаем в среде `HostBackends`, выделяем, нажимаем Ctrl+0 — открывается исходник HostBackends. тот самый, который скомпилен. где нарушение-то? «показать документацию» правильную документацию показывает. «показать исходник» правильный исходник показывает. поиск ищет по правильным модулям. и происходит это всё при помощи ровно тех же проверок (ну, похожих по смыслу, не по тексту) типа той, что я выше процитировал. только среда это делает сама, а не заставляет меня руками писать то, что она и так уже знает.
до тех пор, пока мы работаем со всем изнутри среды — соответствие будет автоматическое. единственный случай, когда можно немного запутаться — это кросс-разработка: правка модулей от чужой архитектуры. и это решается просто глобальным переключением текущей архитектуры. впрочем, в заголовках табов всегда указано `[<ArchName>]`, если мы открываем архитектурно-специфический файл в редакторе (будь то модуль, или ресурс, или документация).
не знаю, по-моему, проще некуда. один раз поправить стандартные инструменты, чтобы они не ходили по прибитым гвоздями путям, а спрашивали эти пути у менеджера (точнее, просили менеджер открыть им документ) — и всё. при этом если что-то ходит по прибитым гвоздями путям — в подавляющем большинстве не-системного кода будет работать как раньше, так что не нужно всё бросать и бежать править весь код.
а у вас системно-зависимый код размазан по куче мест. вот где грузим модуль динамически, например — надо учитывать возможность того, что там будут модули под разные архитектуры. не забывать руками
все эти места починить, если вдруг новая архитектура появилась. в каждом из них точно знать, какие модули можно для некоторых архитектур иметь общие, какие нет. право, каменный век какой-то. ещё и чревато лишними ошибками. в итоге мы пихаем знание о реальной Host OS туда, где оно вообще не нужно.
у меня же среда всегда загрузит правильный модуль под архитектуру, под которой запущено. в загрузчике ничего никогда не перепутается, даже если включить режим кросс-сборки. и на диске никогда ничего не перепутается. и если нам захочется иметь отдельный init-модуль под какую-то конкретную систему — не надо вхачивать это в общий, а просто делаем подкаталог с именем архитектуры, копипастим туда, и правим.
а, ладно. я опять завёлся, мы буквально этот диалог повторяли по кругу уже несколько раз. простите. я не то чтобы горю желанием конкретно своё решение пропихнуть: просто вы в итоге придёте примерно к тому же самому, только реализовывать его будет уже поздно, потому что под старые костыли будет написан код, который чинить теперь больно. вместо чтобы один раз отрубить собаке хвост, отстрадать — и всё.