Компиляция проектов SML из нескольких файлов
У меня есть проект с большим количеством файлов, и я хочу, чтобы он работал с большинством популярных компиляторов.
К сожалению, PolyML и SML/NJ требуют use
операторы, в то время как MosML дополнительно требует явной загрузки структур базовой библиотеки с использованием load
, который не распознается поли или sml.
Вдобавок ко всему, MLton и MLKit требуют совершенно другого файла.mlb, просто перечисляя имена файлов, а также требуют явного импорта базовой библиотеки, что делается в MosML иначе:
$(SML_LIB)/basis/basis.mlb
Существует ли какая-либо стандартная универсальная команда "включить этот файл", и, если она не существует, существует ли какой-либо другой способ чтения всех компиляторов из одного файла точки входа?
PS Не против того, что кто-то собирается поспорить о различиях в компиляторе. Мне всегда интересно, что думают люди, и информации не так много:-)
1 ответ
Функция use - это стандартная универсальная команда include this file, включенная в среду верхнего уровня.
val use : string -> unit implementation dependent
Обычно я поддерживаю среду сборки в CM smlnj, а затем преобразую в mlb с помощью cm2mlb. Он будет определять флаг MLton при разборе файла sources.cm, чтобы вы могли использовать его для устранения различий в поведении загрузки модуля.
#if(defined(MLton))
runmain.sml
#endif
Существует также набор сценариев sml-buildscripts, которые преобразуются из mlb в polyml. Я не знаком ни с ними, ни с polyml, однако CM удобен в качестве авторитетного источника, поскольку обеспечивает программный доступ из SML через структуру CM.
Это то, что использует cm2mlb, так что, хотя я не знаю ничего, что уже существует, которое конвертирует из CM в polyml, это должно быть возможно.