forked from Krekep/fp2022
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Ilya Pankratov <i.pankratov.main@gmail.com>
- Loading branch information
Showing
1 changed file
with
5 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |