Команда
- Архитектура проекта и координация команды
- Вся документация — структура, тексты, сайт
- Расширение VS Code для файлов
.rv - Участие в разработке интерпретатора
- Разработка ядра интерпретатора
- Написание примеров программ на RealV
- Тестирование возможностей языка
- Разработка интерпретатора
- Отладка и исправление ошибок
- Проверка граничных случаев
Предыстория
История языка RealV начинается задолго до написания первых строк кода парсера. Наш коллектив сформировался во время совместной работы над сложным аэрокосмическим проектом ВАРКТ. Тот уникальный опыт совместных разработок, преодоления трудностей и бессонных ночей стал настоящим катализатором для команды.
Когда перед нами встала задача разработать собственный интерпретатор, мы решили создать нечто большее, чем стандартное учебное задание. RealV — это дань уважения тому самому проекту, который нас объединил. Уже в самом названии языка кроется отсылка к нашим истокам.
Язык элегантно сочетает строгую функциональную мощь «под капотом» с выразительным C-подобным синтаксисом — как символ того, как инженерные вызовы объединяют людей.
О проекте
RealV — это кастомный функциональный язык программирования, разработанный в рамках курсового проекта по дисциплине «Функциональное программирование». Интерпретатор полностью написан на F# и работает поверх платформы .NET 8.
Главная цель — спроектировать язык с лаконичным и выразительным синтаксисом, основанным на идеях
лямбда-исчисления, но при этом обладающим привычным C-подобным синтаксисом блоков { ... }.
Это делает RealV одновременно строгим с точки зрения функциональной семантики и удобным для повседневного написания кода.
Лексер и парсер написаны вручную (recursive descent) без сторонних комбинаторов — это даёт полный контроль над грамматикой и позволяет генерировать понятные сообщения об ошибках.
Ключевые решения
Три архитектурных выбора, которые определяют характер языка.
-
Читаемый синтаксис — первый приоритет
RealV использует фигурные блоки
{ ... }и оператор=из C/JS. Функциональный подход не должен означать чуждый вид кода — поэтому синтаксис намеренно выглядит знакомо даже без знания теории ФП. -
Интерпретатор без внешних зависимостей
Лексер и парсер написаны вручную методом рекурсивного спуска — без FParsec и других комбинаторов. Это даёт полный контроль над грамматикой и позволяет генерировать понятные, точные сообщения об ошибках.
-
Функциональное ядро с допуском мутаций
Под C-подобным синтаксисом — строгое лямбда-исчисление: замыкания, thunk'и, явная рекурсия через
LetRec. При этом переменные можно переопределять через=, снижая порог вхождения.
Язык в действии
Программы RealV хранятся в файлах с расширением .rv. Несколько характерных примеров:
// Рекурсивный факториал
factorial(n) = {
n == 0 ? return 1 : return n * factorial(n - 1)
}
// Замыкания и функции высшего порядка
makeAdder(x) = {
return (y) => x + y
}
add5 = makeAdder(5)
add5(10) // 15
// Ленивые вычисления
lazyTask = delay(40 + 2)
val = force(lazyTask) // вычисляется один раз, затем кэшируется
Запуск: dotnet run --project src/RealV.Cli/RealV.Cli.fsproj -- скрипт.rv
Возможности языка
RealV — тьюринг-полный язык с богатым набором встроенных конструкций. Нажмите на любую возможность, чтобы увидеть пример кода.
Переменные
Локальные определения и присваивания через единый оператор name = expr.
Функции и лямбды
Функции первого класса, анонимные лямбды (x) => expr и полноценные замыкания.
Рекурсия
Любая объявленная функция видит саму себя внутри своего тела без дополнительных ключевых слов.
→ пример кодаЛенивые вычисления
Отложенное выполнение через delay с мемоизацией результата при force.
Массивы
Встроенные структуры данных: head, tail, append, slice и другие.
Управляющие конструкции
Тернарный оператор cond ? a : b и диапазонные циклы start -> end -> (i) => body.
Обработка ошибок
Оператор ! expr останавливает программу с пользовательским сообщением об ошибке.
Файловый I/O
Встроенные функции readFile, writeFile, appendFile для работы с файловой системой.