Skip to content

Commit

Permalink
Update README
Browse files Browse the repository at this point in the history
Signed-off-by: Ilya Pankratov <i.pankratov.main@gmail.com>
  • Loading branch information
i-pankrat committed Aug 9, 2023
1 parent 9ae94f8 commit f2da09f
Showing 1 changed file with 5 additions and 59 deletions.
64 changes: 5 additions & 59 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,63 +1,9 @@
# ФП 2022. Репо для домашек
# About

Домашки по курсу ФП 2022 оформлять **в виде пулл-реквестов к этому репо**.
This is a forked repository homework on functional programming course work at SPBSU. In the [Lambda](./Lambda/) directory there is a template, which was used by participants for their tasks.

В директории `/Lambda` лежит шаблон-скелет, его нужно скопипастить и исправить под свои нужды:
- переименовать нужные файлы под свой мини-язык;
- пофикисить имя автора и т.п.
- ну и сделать реализацию с тестами.
# My task

Ожидается примерно следующая структура репозитория
- `/Lambda` -- шаблон проекта домашки, который редактирует только препод;
- `/CSharpExc` -- реализация мини-С# c исключениями, на основе шаблона `/Lambda`;
- `/Java` -- реализация мини-Java, снова на основе шаблона `/Lambda`;
- и т.д.
My task was to implement an OCaml interpreter with polymorphic types. The solution of the task can be found in [OCamlPV](./OCamlPV/).

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

Также CI собирает документацию к миниязыку и выкладывает её в https://kakadu.github.io/fp2022/doc/LANGUAGE
(например, в https://kakadu.github.io/fp2021/doc/Lambda)

###### N.B. Не удаляйте директорию Lambda. Это шаблон!


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

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

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

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

Для opam >= 2.1:

opam switch init --bare
opam switch create SWITCHNAME --compiler=ocaml-variants.4.14.0+options,ocaml-option-flambda

Перед этим можно удалить другие 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.
All tasks can be found in [tasks.md](tasks.md)

0 comments on commit f2da09f

Please sign in to comment.