Придумайте на двоих уникальное название дирекории и создавайте там проект с уникальным называнием.
Запишитесь в /pairing.md, чтобы я не забыл кто есть кто. (В коммит припишите [skip ci]
, чтобы он не пытался запускать CI.)
Настройка окружения: /DEV.md
Выдается на двоих и сдается частями в виде PR в этот репо. Разумеется, там должно быть адекватное покрытие тестами, более-менее документация, использование линтера и нормальный функциональный код (на OCaml/Haskell).
Уже новые, 2025 года: /tasks.md
- Целые числа, булевы значения и сравнения чисел и прочая арифметика
- Идентификаторы должны быть как в OCaml, запрещено резервировать какие-то имена, чтобы их порождать по ходу дела.
- Парсер должен работать шустро, а не парсить объявления факториала 10 секунд
- К идентификатором разрешено приписывать типы явно:
fun (x: int) (xs: _ list) -> ...
- В процессе построения ANF должно быть адекватным. Стоит его распечатывать обратно в исходный синтаксис, и проверять, что типы (не) разъехались.
- Рекурсивные функции на верхнем уровне (в компиляторе назвается structure_item).
- Разрешено ыпереопределять операторы как функции:
let (+) = ...
- First-class функции, в том числе с частичным примерением и взаимной рекурсией.
- Вызовы функций должны быть efficient: если 3-арная функция вызывается от трёх аргументов, то нельзя делать 3 частичных применения под одному аргументу.
- Взаимная рекурсия через
let rec ... and ...
. Делатьlet ... and ...
безrec
--- не надо
- Вложенные let-определения
- Не должно быть никакого ограничения сверху на количество аргументов у функций.
- В том году бойцы нагенерили большой switch на 100 арностей функций, а в случае >100 --- рантайм падал. так делать не надо
- Разрешено ыпереопределять операторы как функции:
- Сопоставление с образцом для кортежей и списков
- Полноценные алгебраические типы в 2024 не обязательно
- Рантайм: печать чисел, примитивы частичного применения и сборки мусора.
- Примитивы для сравнения чисел уже есть встроенные в RISC-V и LLVM. Пихать это в рантайм запрещено и нельзя
- libffi забанен
- Должны обрабатываться ошибки в процессе компиляции: компилятор не должен крешиться.
- Что-нибудь ещё, что я забыл :)
Сделайте поддиректорию для своего языка с помощью NEW_NAME=CringeML make copy_template
.
В manytests
--- тесты.
Стоит сделать символическую ссылку на них у себя, и тестировать на этом коде свой компилятор.
Когда буду находить особую ересь в решениях --- буду добавлять новые тесты.
???