Skip to content
 
 

Latest commit

 

History

44 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ФП 2023. Репо для домашек

Домашки по курсу ФП 2023 оформлять в виде пулл-реквестов к этому репо.

В директории /Lambda лежит шаблон-скелет, его нужно скопипастить и исправить под свои нужды:

  • пофикисить имя автора и т.п.
  • переименовать нужные файлы под свой мини-язык;
  • ну и сделать реализацию с тестами.

Ожидается примерно следующая структура репозитория

  • /Lambda -- шаблон проекта домашки, который редактирует только препод (вам необходимо будет его скопировать и переименовать);
  • /CSharpExc -- реализация мини-С# c исключениями, на основе шаблона /Lambda;
  • /Java -- реализация мини-Java, снова на основе шаблона /Lambda;
  • и т.д.

Для Merge Requests (a.k.a. pull requests) настроен CI, который смотрит в какой директории (проекте) произошли последние изменения, и именно в этой директории запускает сборку и тесты. Например, если поменялся файл Lambda/src/Parser.ml, то запустятся все тесты из директории проекта Lambda, а тесты из проекта Java запускаться не будут. Тесты нужны, чтобы убедить препода, что вы таки запускали свою поделку на адекватных примерах.

Также CI собирает документацию к миниязыку и выкладывает её в https://kakadu.github.io/fp2023/doc/LANGUAGE (например, в https://kakadu.github.io/fp2023/doc/Lambda). А ещё измеряется покрытие тестами (например, в https://kakadu.github.io/fp2023/cov/Lambda). Чтобы покрытие тестами таки считалось, не забывайте приписывать к своим библиотекам/исполняемым файлом заклинание в dune-файлах:

(instrumentation
  (backend bisect_ppx))
N.B. Не удаляйте директорию Lambda. Это шаблон!

Подготовка окружения

Далее инструкции по найстройки всего под GNU/Linux. Но на Windows+WSL2 тоже должно работать.

Во-первых, нужен пакетный менеджер opam версии 2.х. С помощью него будем устанавливать OCaml 4.14.1 и необходимые пакеты. Системный OCaml (установленный, например, из репозиториев Ubuntu) использовать не рекомендуется.

После установки opam следует его проинициализировать и установить правильный компилятор (у меня обычно вместо SWITCHNAME используется 4.14.1+flambda)

Для opam >= 2.1:

opam init --bare
opam update
opam switch create SWITCHNAME --packages=ocaml-variants.4.14.1+options,ocaml-option-flambda --yes

Перед этим можно удалить другие switch'и, если они есть, с помощью команды opam switch remove SWITCHNAME.

После установки у вас будет рабочий компилятор по-умолчанию в директории ~/.opam/SWITCHNAME/bin. В конце установки opam вам предложит что-то добавить в ~/.bashrc, чтобы пути к компилятору автоматически подхватывались. Рекомендую это сделать.

Если что-то пошло не так, то всегда можно указать нужный свитч руками командой, например:

export OPAMSWITCH=SWITCHNAME && eval $(opam env)

и затем убедиться, что путь до компилятора правильный

$ which ocamlc
/home/username/.opam/SWITCHNAME/bin/ocamlc

Замечание. Когда вы будете запускать VsCode, то информация об окружении opam из файла ~/.bashrc автоматически применяться не будет, потому что так это работает в UNIX системах из покон веков. Рекомендуется, либо запускать VsCode из-под opam командой opam exec -- code, либо прописать в месте запуска правильную переменную среды OPAMSWITCH, и запускать opam через sh: sh -c 'eval $(opam env) && code'

Когда VsCode запустится, её плагин https://marketplace.visualstudio.com/items?itemName=ocamllabs.ocaml-platform слева снизу должен показать, что правильная версия компилятора подцепилась.

В процессе работы вам также понадобится автоформаттер кода. Он устанавливается с помощью opam install ocamlformat в

 $ which ocamlformat
 /home/username/.opam/SWITCHNAME/bin/ocamlformat

Необходимо также в VsCode включить автоформатирование: Settings->Text Editor->Formatting->Format On Paste и Format on Save.

Приёмка задач

Решения принимаются в виде пулл-реквестов к этому репо. Пулл-реквесты должны

  • проходить CI
    • в том числе линтер;
    • проверку, что автоформатирование через ocamlformat настроено и соблюдается;
    • DCO;
    • проходить тестирование.
  • В названии надо указать задачу, которую реализовывали, идентифицировать себя и курс.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages