Динамически загружать мл файлы в OCaml?
Как все мы знаем, мы можем использовать директиву #use в OCaml toplevel для загрузки ml файлов и их последующего выполнения.
И мы также можем использовать ocaml.exe для загрузки и выполнения мл файлов.
Здесь мое требование имеет некоторые изменения в этих двух ситуациях:
У меня есть основной процесс, который создает ocaml верхнего уровня для выполнения сценариев, два процесса общаются с общей памятью и stdin/stdout. Адрес (токен) разделяемой памяти дан в Sys.argv.
Проблема в том, что я хочу динамически загружать мл-файлы после создания процесса, поэтому мл для выполнения сначала не дается.
Если я начну процесс с "ocaml.ml xx.ml [params]", сценарий будет выполнен сразу, и я не смогу просто использовать директиву #use после начала сценария.
Если я перехожу в интерактивный режим, я не могу дать общий адрес, так как, как только я даю эти детские коляски, они рассматриваются как мл имя файла.
Так у кого-нибудь есть идея, чтобы это произошло? Уровень ocaml является фоновым сервисом и вызывает скрипт, который входит в цикл обработки событий после запуска.
1 ответ
Мне кажется, что вы могли бы отправить параметры для связи на интерактивный уровень перед входом в цикл обработки событий.
Или вы можете использовать библиотеки компилятора для непосредственного управления репликой и чередования Toploop.execute_phrase
а также Toploop.use_silently
,
Другой вариант может состоять в том, чтобы порождать собственный процесс и использовать dynlinking, а не загружать файлы ml.