Оба MosML и MLton также имеют возможность создавать автономные двоичные файлы.MosML с помощью команды mosmlc и MLton с помощью команды mlton.
Обратите внимание, что MLton не имеет интерактивного цикла, а является компилятором, оптимизирующим всю программу.Что в основном означает, что компиляция занимает довольно много времени, но в свою очередь генерирует невероятно быстрых SML-программ.
Для SML / NJ вы можете использовать функцию CM.mk_standalone
, но этоне рекомендуется на странице 45 Руководства пользователя CM. Вместо этого они рекомендуют использовать команду 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