Компиляция проектов 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, это должно быть возможно.

Другие вопросы по тегам