Хейзел-это живая среда функционального программирования, коренящуюся в принципах теории типа. Вы можете найти соответствующие документы и больше мотивации на веб -сайте Hazel.
Вы можете попробовать Хейзел онлайн: филиал Dev - главная филиал на данный момент. Все остальные ветви, которая была подтолкена к GitHub и успешно построению, также можно получить по адресу:
https://hazel.org/build/<branch_name>
Если у вас уже есть ocaml версия 5.2.0 и, по крайней мере, версия 2.0 opam установленная, вы можете создать Hazel, выполнив следующие команды.
git clone [email protected]:hazelgrove/hazel.gitcd hazelmake depsmake dev Чтобы просмотреть Хейзел, вы должны обслуживать его, на Localhost для разработки (вы не можете запустить его из file:/// url из -за ограничений браузера на веб -работниках, например, веб -работники.)
Если у вас есть python3 на вашем пути, вы можете использовать сервер Python через make serve , а затем перейдите на http://0.0.0.0:8000/ в вашем браузере.
В противном случае запустите make echo-html-dir , который будет повторять каталог, который необходимо обслуживать, используя какой-либо другой сервер по вашему выбору.
Если вы не знакомы с ocaml или opam , не установите их или просто застряли, мы рекомендуем вам следовать пошаговым инструкциям установки, содержащимися в install.md.
Хейзел написана в Daseml, который представляет собой синтаксический сахар на вершине OCAML. Эта ссылка позволяет вам ввести OCAML и посмотреть, каково является соответствующий синтаксис разума: https://reasonml.github.io/en/try.
Это полезно, если вы пытаетесь выяснить синтаксис причинам для чего -то, для чего вы знаете синтаксис OCAML.
Вы также можете преобразовать между синтаксисом OCAML и SANESML на терминале с использованием refmt на терминале. См. refmt --help для деталей.
Большая часть нашей команды использует код Visual Studio (VS Code) для написания кода. Если вы используете код VS, вот несколько расширений, которые могут быть полезными.
Это расширение обеспечивает полную поддержку для редактирования исходного кода Caseml и соответствующих инструментов:
Из -за плохих ошибок разбора могут быть трудно найти несбалансированные скобки. Следующие расширения помогают с этим.
В дополнение к этим расширениям, включение панели панировок может облегчить навигацию по большой кодовой базе. Есть несколько способов сделать бар на панировочных сухарях видимыми:
Ctrl+Shift+P (macOS: Cmd+Shift+P ), начните набирать ввод breadcrumbs и выберите View: Toggle Breadcrumbs из раскрывающегося меню, чтобы включить и выключить хлебные крошки.Ctrl+Shift+. Чтобы начать навигацию по панировочным сухарям.Если вам нравится ваше привязка VIM и настройка VIM, следующее может помочь вам настроить ваш разум IDE в Neovim.
Если вы используете Vim, я рекомендую вам переключиться на Neovim, поскольку он имеет лучшую поддержку для многопоточной и, следовательно, с меньшей вероятностью заблокирует вас при программировании.
Чтобы настроить LSP (протокол языкового сервера), вам необходимо настроить свой языковой клиент для Neovim и Language Server для OCAML.
После установки двух предыдущих, вы можете скопировать следующее в вашем файле конфигурации Neovim. (Предполагая, что npm установил OCAML-Language-Server под /usr/bin )
let g:LanguageClient_serverCommands = {
'ocaml': ['/usr/bin/ocaml-language-server', '--stdio'],
'reason': ['/usr/bin/ocaml-language-server', '--stdio']
}
" LanguageClient-neovim
nnoremap <F5> :call LanguageClient_contextMenu()<CR>
" Or map each action separately
nnoremap <silent> K :call LanguageClient#textDocument_hover()<CR>
nnoremap <silent> gd :call LanguageClient#textDocument_definition()<CR>
nnoremap <silent> gr :call LanguageClient#textDocument_references()<CR>
nnoremap <silent> gf :call LanguageClient#textDocument_formatting()<cr>
nnoremap <silent> <F2> :call LanguageClient#textDocument_rename()<CR>
Хейзел составлена в JavaScript для веб -браузера через компилятор js_of_ocaml .
Хотя make показатели предоставляются в качестве удобства, они в основном переводятся в команды dune .
Вызывание make само по себе эквивалентно вызове make dev . С этими командами мы передаем дополнительные флаги js_of_ocaml , которые вызывают введение комментариев, которые отображают местоположения в сгенерированных JS в местоположениях в исходных файлах. Это полезно для отладки целей.
make dev также автоформируемые исходные файлы разума, используя refmt (это то, для чего следует псевдоним @src/fmt ). Это гарантирует, что код от всех участников следует тому же стилю.
Команды make dev и make release делают три вещи:
menhir ._build/default/src/hazelweb/www/hazel.js ), используя js_of_ocaml . Для более плавного опыта разработчика используйте, make watch , чтобы автоматически следить за изменениями файлов. Это может потребовать установки fswatch (см. Stall.md). Вы также можете запустить make watch-release , чтобы постоянно построить сборку релиза (занимает дольше на сборку).
Чтобы получить чистую сборку, вам может потребоваться:
Клонировать репозиторий (если у вас нет) и введите корень проекта к клонированному проекту Хейзел.
git clone [email protected]:hazelgrove/hazel.git
cd hazel Установите локальную среду OCAML, специфичную для проекта, и компиляция. Если у вас есть локальная среда OCAML (есть каталог под названием _opam ), вы можете сначала его удалить.
# opam switch remove ./
opam switch create ./ 5.2.0
eval $( opam env )
make deps
makeЭто создает отдельную среду OCAML в клонированном проекте, независимо от того, что вы отправили в свой домашний каталог. Это позволяет вам чередовать зависимости или тестировать изменения зависимостей, без влияния существующих проектов OCAML.
Примечание. Вы можете увидеть следующее предупреждение при строительстве:
Warning 58 [no-cmx-file]: no cmx file was found in path for module Ezjs_idb, and its interface was not compiled with -opaque
Это связано с проблемой библиотеки вверх по течению и не вызывает проблем с Хейзел:
Ocamlpro/ezjs_idb#1
Вы можете распечатать в консоли браузера, используя стандартную функцию print_endline . Это, наверное, самый простой метод прямо сейчас. У большинства данных данных в кодовой базе есть что -то вроде [@deriving (show({with_path: false}), sexp, yojson)] . Это генерирует вспомогательные функции для печати и сериализации этих данных. Для типа с именем t , функция show будет названа show . В противном случае, для типа, названного что -то еще, например, q , это будет show_q .
Карты источников для js_of_ocaml должны быть настроены при локальном создании с профилем DEV ( make ). Это настроено с использованием Env Stanzas, присутствующих в файлах dune для каждого каталога верхнего уровня.
Поскольку исходные карты генерируются инструменты разработчика браузеров должны показывать код разума в отладчике и исходном дереве. Следы стека также должны включать номера линий разумов.
Если Хейзел висит на загрузке или когда вы выполняете определенные действия, вы можете загрузить в режим отладки, добавив #debug на URL и перезагрузить. Оттуда у вас есть несколько кнопок, которые будут изменять настройки или сбросить локальное хранилище. Обновите без флага #debug , и, надеюсь, вы сможете разрешить ситуацию оттуда.
Вы можете запустить все модульные тесты, расположенные в test , запустив make test .
Модульные тесты записываются с использованием Framework Alcotest.
Покрытие кода предоставляется BISECT_PPX. Для сбора статистики покрытия из тестов запускается make coverage . После того, как статистика покрытия будет сгенерирована, запуск make generate-coverage-html будет генерировать локальную веб-страницу по адресу _coverage/index.html , которая может быть просмотрена, чтобы увидеть покрытие линии на модуль.
Когда вы подталкиваете свою ветвь к основному репозиторию hazelgrove/hazel , у нас есть настройка действия Github (см. .github/workflows/deploy_branches.yml ), которая построит эту ветвь (в режиме release ) и развертывает его в URL https://hazel.org/build/<branch name> , утверждая построение.
Обычно это занимает около 2 минут, если кэш среды сборки попадает, или 20+ минут, если нет. Вы можете просмотреть статус сборки на вкладке «Действия» на GitHub.
Сборки до июля 2024 года архивируют по адресу https://hazel.org/build/<branch name> .
ПРИМЕЧАНИЕ. Если необходимо выполнить другой архив, убедитесь, что переделывают следующие ветви вручную, так как мы ссылаемся на них в различных общественных материалах (веб -сайты и опубликованные документы):
Dev Livelits