Skip to content

Kakadu/comp25

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 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

License

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •