Ответ 1
Оба MosML и MLton также имеют возможность создавать автономные двоичные файлы. MosML через команду mosmlc и MLton через команду mlton.
Обратите внимание, что MLton не имеет интерактивного цикла, но является компилятором оптимизации всей программы. Что в основном означает, что для компиляции требуется довольно много времени, но в свою очередь генерирует невероятно быстро SML-программы.
Для SML/NJ вы можете использовать функцию CM.mk_standalone
, но это не рекомендуется в Руководстве пользователя CM на стр. 45. Вместо этого они рекомендуют использовать команду ml-build. Это создаст кучу изображения SML/NJ. Изображение кучи должно запускаться с параметром @SMLload или вы можете использовать программу heap2exec, если у вас есть поддерживаемая система. Если вы этого не сделаете, я бы предположил, что вы используете MLton вместо этого.
Для генерации допустимого изображения кучи SML/NJ можно использовать следующее:
test.cm:
Group is
test.sml
$/basis.cm
test.sml:
structure Test =
struct
fun main (prog_name, args) =
let
val _ = print ("Program name: " ^ prog_name ^ "\n")
val _ = print "Arguments:\n"
val _ = map (fn s => print ("\t" ^ s ^ "\n")) args
in
1
end
end
И для генерации кучного изображения вы можете использовать: ml-build test.cm Test.main test-image
, а затем запустить его sml @SMLload test-image.XXXXX arg1 arg2 "this is one argument"
, где XXXXX - ваша архитектура.
Если вы в какой-то момент решили MLton, вам не нужно иметь какую-либо основную функцию. Он оценивает все на уровне верхнего уровня, поэтому вы можете создать основную функцию и вызвать ее следующим образом:
fun main () = print "this is the main function\n"
val foo = 4
val _ = print ((Int.toString 4) ^ "\n")
val _ = main ()
Затем вы можете скомпилировать его с помощью mlton foo.sml
, который выдает исполняемый файл с именем "foo". Когда вы запустите его, он произведет это как результат:
./foo
4
this is the main function
Обратите внимание, что это только один файл, когда у вас есть несколько файлов, вам нужно будет использовать файлы MLB (файлы базы данных ML), которые являются файлами проекта MLtons, или вы можете использовать cm файлы, а затем скомпилировать его с помощью mlton projectr.mlb