Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

887 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Реализации miniML коммитить сюда

Придумайте на двоих уникальное название дирекории и создавайте там проект с уникальным называнием. Запишитесь в /pairing.md, чтобы я не забыл кто есть кто. (В коммит припишите [skip ci], чтобы он не пытался запускать CI.)

Настройка окружения: /DEV.md

Зачача на допуск к экзамену

Выдается на двоих и сдается частями в виде PR в этот репо. Разумеется, там должно быть адекватное покрытие тестами, более-менее документация, использование линтера и нормальный функциональный код (на OCaml/Haskell).

Описание задач

Уже новые, 2025 года: /tasks.md

Описание MiniML (образца 2024 года)

  1. Целые числа, булевы значения и сравнения чисел и прочая арифметика
    1. Идентификаторы должны быть как в OCaml, запрещено резервировать какие-то имена, чтобы их порождать по ходу дела.
  2. Парсер должен работать шустро, а не парсить объявления факториала 10 секунд
  3. К идентификатором разрешено приписывать типы явно: fun (x: int) (xs: _ list) -> ...
  4. В процессе построения ANF должно быть адекватным. Стоит его распечатывать обратно в исходный синтаксис, и проверять, что типы (не) разъехались.
  5. Рекурсивные функции на верхнем уровне (в компиляторе назвается structure_item).
    1. Разрешено ыпереопределять операторы как функции: let (+) = ...
    2. First-class функции, в том числе с частичным примерением и взаимной рекурсией.
      1. Вызовы функций должны быть efficient: если 3-арная функция вызывается от трёх аргументов, то нельзя делать 3 частичных применения под одному аргументу.
      2. Взаимная рекурсия через let rec ... and .... Делать let ... and ... без rec --- не надо
    3. Вложенные let-определения
    4. Не должно быть никакого ограничения сверху на количество аргументов у функций.
      1. В том году бойцы нагенерили большой switch на 100 арностей функций, а в случае >100 --- рантайм падал. так делать не надо
  6. Сопоставление с образцом для кортежей и списков
    1. Полноценные алгебраические типы в 2024 не обязательно
  7. Рантайм: печать чисел, примитивы частичного применения и сборки мусора.
    1. Примитивы для сравнения чисел уже есть встроенные в RISC-V и LLVM. Пихать это в рантайм запрещено и нельзя
    2. libffi забанен
  8. Должны обрабатываться ошибки в процессе компиляции: компилятор не должен крешиться.
  9. Что-нибудь ещё, что я забыл :)

В директории demo --- рыба

Сделайте поддиректорию для своего языка с помощью NEW_NAME=CringeML make copy_template.

В manytests --- тесты. Стоит сделать символическую ссылку на них у себя, и тестировать на этом коде свой компилятор. Когда буду находить особую ересь в решениях --- буду добавлять новые тесты.

Доклады

???

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Contributors

Languages