Prela — встраиваемый язык запросов на основе алгебры отношений Тарского. В нём всё — бинарные отношения, а запросы собираются из комбинаторов, как из кубиков. На практике это выглядит так: каждая колонка таблицы превращается в отдельное бинарное отношение «ключ → значение», а movie — это тождественное отношение над идентификаторами. Фильтры вроде production_year > 2008 работают как обычные Julia-функции, перегруженные для отношений. Комбинатор : — это левая полу-соединение (restriction), а → — композиция отношений, аналог JOIN по общему ключу. Конъюнкция ∧ и произведение × — одно и то же: они склеивают два отношения по первому столбцу, создавая кортеж.
Поскольку Prela встроен прямо в язык-хост (сейчас основная реализация на Julia, есть экспериментальные порты на Rust и Zig), многие продвинутые фичи достаются бесплатно. CTE — просто присваивание переменной, UDF — обычная анонимная функция. Агрегация делается через комбинатор ▷ вместе с обращением ' (переворачивает столбцы). Например, (order ← Li.supplier) ▷ n_distinct > 1 группирует поставщиков по заказам и оставляет только те заказы, где больше одного уникального поставщика — всё без специального синтаксиса HAVING.
Наивная реализация была в 100 раз медленнее DuckDB из-за постоянной материализации промежуточных результатов. Проблему решила continuation-passing style (CPS): каждая операция не возвращает новое отношение, а принимает функцию-продолжение и сразу передаёт данные дальше. Это позволило слить все шаги в один проход без промежуточных копий. Julia-JIT компилирует такой код в плотные циклы. Вдобавок CPS сам собой даёт колоночное исполнение — детали этого трюка автор обещает описать отдельно.
Тест на Join Order Benchmark: Prela выполнил 113 запросов за 15,9 секунд против 29,6 у DuckDB (с одним потоком), выиграв 80 из 113. На TPC-H DuckDB остаётся быстрее. Осторожно: у Prela нет оптимизатора, запрос выполняется как написан, а схема переработана под бинарные отношения, что даёт преимущество за счёт индексов. Тем не менее, главный вывод — простота не мешает Prela работать быстро.