Вопрос

При работе в ocaml или ghci Toplevels Я часто создаю значительный «контекст» для желания лучшего слова, связанных ценностей, функций, модулей загруженных и т. Д. Есть ли способ сохранить все это и перезагрузить его позже, чтобы я мог продолжать точно, где я остановился? Или еще лучше выбросить весь лот в качестве текстового файла, который можно перезагрузить или быть тривиально изменен в код, который я мог бы компилировать в исполняемости (например, добавив основной)?

Это было полезно?

Решение

Пользователи Hol Light. были подобные потребности, и они используют программу контрольной точки для сохранения снижения Toplosevel. Видеть это сообщение в списке CAML-рассылки или страница 8 Это руководство от Hol.

В целом лучше сохранить определения в качестве исходного кода, а не двоичного снимка Toplevel. Многочисленные инструменты позволяют быстро загрузить файл .ml в Toplevel для простых экспериментов (режимы Emacs и т. Д.). См. Предупреждение в руководстве HOL:

При разработке больших доказательств в HOL вы всегда должны хранить защитный скрипт в виде файла OCAML, готов к перезагрузке, а не полагаться на CKPT. Это позволит доказательствам позже модифицировать, используемые другими и т. Д. Однако его можно очень удобно сделать промежуточные снимки, поэтому вам не нужно загружать большие файлы, чтобы работать дальше на доказательстве. Это аналогично обычной ситуации в программировании: вы всегда должны держать свой полный исходный код, но не хотите перекомпилировать все источники каждый раз, когда вы используете код.

Другие советы

По крайней мере, в Ocaml нет встроенной поддержки для этого. На растворе следует использовать rlwarap. или любая другая обертка для чтения для записи истории вашего ввода в файл. Например :

> rlwrap -H mysession.ml ocaml

Недостаток состоит в том, что это также запишит вход, который имел синтаксические ошибки, поэтому вам придется очистить это. Обратите внимание, что по умолчанию RLWRAP автоматически сохранит ваш вход в ~ / .OCAML_HISTORY, если вы вызываете его без опции -H.

В Haskell, просто используйте :e file. Отказ Это открывает стандартный редактор и позволяет редактировать некоторый файл. После этого используйте :r перезагрузить его. Он будет автоматически перекомпилирован.

Пожалуйста, обратите внимание, что все ваши «Ad-Hoc» определенные функции будут потеряны после этого. Обратитесь к DOC для получения дополнительной информации.

ghci использует Haskeline. Для истории ввода командной линии, чтобы вы могли прокрутить доходы до повторения / редактирования входов. Ваша история ввода обычно записывается в файл, который вы можете найти как ghci_history в каталоге, данном

System.Directory.getAppUserDataDirectory "ghc"

Существуют различные команды для изучения «контекста» (: «Показать привязки»: «Показать модули»: DEF, ..) Но их вывод не хватает, чтобы воспроизвести вашу сессию (хотя оно все равно стоит узнать о них).

В общем, совет комбинировать ваш ghci Сеанс с окном открытого редактора является звуком: если это больше, чем определение сброса, даже если только для целей отладки, лучше включить его в модуль, который будет загружен в ghci, Так что вы можете повторно использовать это.

Ох, и если «контекст», вы имеете в виду некоторые настройки по умолчанию или модули, которые вы хотите загрузить, на основе PER-проекта, есть также ghciС. Файл конфигурации. Отказ Также удобно для определения собственного ghci команды.

В Ocaml вы можете создать свой собственный верхний уровень. Это решает проблему с загруженными модулями по меньшей мере.

http://caml.inria.fr/pub/docs/manual-oCaml/toplevel.html#sec278.

Команда OCAMLMKTOP создает ocaml Toplevels, которые содержат код пользователя, предварительно загруженный при запуске.

Команда OCAMLMKTOP принимает аргумент набор файлов .CMO и .CMA и связывает их с объектами файлов, которые реализуют ocaml Toplosevel. Типичное использование:

    ocamlmktop -o mytoplevel foo.cmo bar.cmo gee.cmo

Это создает файл BYTECODE MYTOWLEVEL, содержащий систему Toplevel Ocaml, а также код из трех файлов .CMO. Этот Toplevel напрямую исполняется и начинается:

    ./mytoplevel

Это входит в регулярное петли для верхнего уровня, за исключением того, что код из Foo.cmo, bar.cmo и gee.cmo уже загружен в память, как если бы вы набрали:

    #load "foo.cmo";;
    #load "bar.cmo";;
    #load "gee.cmo";;

на входе в топлю. Модули Foo, Bar и Gee не открываются, хотя; Вы все еще должны сделать

    open Foo;;

Сам, если это то, что вы хотите.

Это всегда беспокоило меня тоже, поэтому я написал быстрый питон / ожидаю скрипт Чтобы воспроизвести GHCI_HISTORY в начале каждой сессии GHCI.

Это не очень отполировано. Например, это всегда повторяет всю историю, и это может быть медленной.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top