Giter VIP home page Giter VIP logo

fp2023's Introduction

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

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

Учебная группа имеет чатик в мессенджере. Все вопросы писать туду. В личку писать нельзя -- буду банить.

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

  • Указать автора (я должен быть способен сопоставить решение с фамилией в ведомости)
  • Переименовать проект под свой мини-язык и пересобрать dune'ой. CI при сборке ожидает имя проекта, совпадающее с именем директории. И так как имя проекта это [a-zA-Z_]+, то у директорий с пробелами и символами # шансов пройти CI нет
  • Cделать реализацию. Разработку рекомендуется вести итеративной моделью, а не водопадной.
  • Изменять или удалять шаблон 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 (например, вот так). А ещё измеряется покрытие тестами (например, так).

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

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

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

  • Пулл-реквесты должны проходить CI
    • в том числе линтер (замечания должны исправляться);
    • проверку, что автоформатирование через ocamlformat настроено и соблюдается;
    • DCO;
  • В названии надо указать задачу, которую реализовывали, идентифицировать себя (фамилия, имя и курс, если возможны неоднозначности).
  • К дереву абстрактного синтаксиса (AST) должны быть написаны комменты, какой конструтор за что отвечает. (Например, как здесь.)
  • Да, объекты и присваивание запрещены.

Тесты нужны, чтобы убедить преподавателя, что вы таки запускали свою поделку на адекватных примерах. Большинство тестов будут интеграционные: запустил самописный интерпретатор миниязыка и сравнил с результатом (например, с поведением интерпретатора оригинального языка). В CI измеряeтся тестовое покрытие в процентах. Чем больше покрытие --- тем лучше. Если код не вызывается в тестах, то либо он не нужен, либо на него не написан тест, либо (в редких случаях) это бага ppx_bisect, который измеряет покрытие. Чтобы покрытие тестами таки считалось, не забывайте приписывать к своим библиотекам/исполняемым файлом заклинание в dune-файлах:

(instrumentation
  (backend bisect_ppx))

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

Далее инструкции по найстройки всего под 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.

fp2023's People

Contributors

aartdem avatar kakadu avatar salvatore112 avatar osogi avatar anna-er avatar pavlushasource avatar yazoondinalt avatar itismrlag avatar toadharvard avatar urtix avatar parzival-05 avatar artem-rzhankoff avatar rozhkovaleksandr avatar alanovaya avatar nemakin avatar ksenmel avatar tepa46 avatar maybenotilya avatar therain7 avatar dmitrypilyuk avatar ancavar avatar juliakononov avatar lesh79 avatar surfaceyellowduck avatar leonidelkin avatar twotwozeronine avatar wokuparalyzed avatar d-zaytsev avatar arsene-baitenov avatar vacmannnn avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.