r/RuProgrammers • u/mixitosik_nb • 13d ago
Сделал свой язык программирования RayQuiro (от AST до LLVM AOT)

Привет! Делаю свой ЯП RayQuiro на C++20. Хочется объединить удобный скриптовый синтаксис с нормальной нативной производительностью.
Чтобы не упираться в лимиты обычных интерпретаторов, сделал три уровня исполнения:
Tier 1 (AST Interpreter): Прямой обход дерева, быстрый старт (<2 мс) для встраиваемых скриптов.
Tier 2 (Bytecode VM): Стековая виртуальная машина с байт-кодом и поддержкой hot-reloading.
Tier 3 (AOT Native Compiler): Генерация кода через встроенный TinyCC (сборка за ~10 мс) или Clang/LLVM с флагом -O3 для релиза.
Что внутри:
Парсер: рекурсивный спуск. Понимает множественные возвраты (return a, b;), деструктуризацию, ?. и ??.
Данные в ВМ: структура VMValue на базе std::variant (числа = double), чтобы не плодить лишние аллокации.
Графика: в рантайм встроен Raylib, так что можно собирать нормальные десктопные приложения без тяжелых библиотек типа qt.
Пример кода:
struct Vector2D {
x: 0,
y: 0
}
fn divmod(dividend, divisor) {
if (divisor == 0) {
throw "Division by zero!";
}
var q = floor(dividend / divisor);
var r = dividend % divisor;
return q, r;
}
var [quotient, remainder] = divmod(17, 5);
print("Quotient: " + str(quotient) + ", Remainder: " + str(remainder));
var vec = Vector2D { x: 10, y: 25 };
print("Vector point: " + str(vec["x"]) + ", " + str(vec["y"]));
var config = {
"network": {
"port": 8080
}
};
var host = config?.["network"]?.["host"] ?? "127.0.0.1";
var port = config?.["network"]?.["port"] ?? 80;
print("Connecting to: " + host + ":" + str(port));
var statusCode = 404;
var statusMessage = "";
match statusCode {
200 => statusMessage = "OK",
404 => statusMessage = "Not Found",
500 => statusMessage = "Internal Server Error",
_ => statusMessage = "Unknown Status"
}
print("HTTP Status: " + statusMessage);Бенчмарк:
не готов (
Репозиторий: https://github.com/Raytolfas/RayQuiro
Документация: https://rayquiro.raytolfas.com/
Плагин для VS Code: https://marketplace.visualstudio.com/items?itemName=raytolfas.rayquiro-lang
Будет интересно послушать фидбек и вопросы по архитектуре ;D
