Реализация компилятора и среды исполнения языка программирования Slowrace, написанная на языке Java. Компилятор преобразует исходный код программ в исполняемый байт-код, запускаемый виртуальной машиной.
Разработать JIT-компилируемый язык программирования с автоматическим управлением памятью и сборщиком мусора, обладающий необходимым функционалом для запуска простых приложений (примеры указаны в каталоге examples).
- Пашкеев Кирилл
- Бушков Никита
- Кононенко Кирилл
- Самарин Андрей
- Типы данных:
int(целые числа произвольной точности /BigInt)float(числа с плавающей точкой двойной точности)bool(логический тип)string(строковый тип)
- Структуры данных:
- Массивы (ключевое слово
array), размещаемые в динамической памяти (куче) - Пользовательские структуры (ключевое слово
struct) с поддержкой доступа к полям через оператор точки (.)
- Массивы (ключевое слово
- Операции:
- Базовые арифметические (
+,-,*,/(деление зависит от типа операндов),%) - Логические и побитовые операции
- Операции сравнения
- Базовые арифметические (
- Управляющие конструкции:
- Условные операторы (
if,else,elif) - Циклы (
for,while)
- Условные операторы (
- Функции:
- Объявление функций (
func) с указанием возвращаемого типа (илиvoid) - Поддержка рекурсии
- Объявление функций (
- Ввод/вывод и утилиты:
- Ввод данных через аргументы командной строки
- Вывод данных через
printиprintln - Встроенные функции:
len,to_int,sqrt,random
Более подробный синтаксис находится в каталоге docs.
- Запрещено использование LLVM при разработке компилятора
- Виртуальная машина должна поддерживать исполнение байт-кода программ, в частности тестовых примеров
- Необходимо использовать JIT для оптимизации байт-кода во время его исполнения виртуальной машиной
- Необходимо использовать Garbage Collector для управления памятью и сборки мусора в виртуальной машине
- Расширение файлов с исходным кодом -
.sr, расширение файлов с байт-кодом -.srbyte - Все компоненты компилятора и среды исполнения программ должны быть написаны на языке Java (в том числе и с использованием любых библиотек)
- JDK 21 или выше
- Maven
Выполните команду в корне проекта:
cd language && mvn clean packageЭто создаст исполняемый JAR файл в директории language/target/.
После сборки вы можете использовать компилятор следующими способами:
- Компиляция и запуск (run): компилирует исходный файл в памяти и сразу запускает его.
cd language && java -jar target/language-1.0-SNAPSHOT-jar-with-dependencies.jar run ../examples/factorial.sr 10
- Компиляция в файл (compile): создает файл байт-кода
.srbyteиз исходного кода.cd language && java -jar target/language-1.0-SNAPSHOT-jar-with-dependencies.jar compile ../examples/factorial.sr out.srbyte
- Исполнение байт-кода (exec): запускает ранее скомпилированный файл.
cd language && java -jar target/language-1.0-SNAPSHOT-jar-with-dependencies.jar exec out.srbyte 10
Все параметры, переданные после имени файла (например, 10 в примерах выше), будут доступны в программе через массив argv.
Для отключения JIT можно передать --no-jit в качестве первого аргумента.
| Задача | Статус |
|---|---|
| Полное написание документации языка и примеров кода | Выполнено (✅) |
| Реализация парсера исходного кода | Выполнено (✅) |
| Реализация компилятора из AST в байт-код | Выполнено (✅) |
| Реализация GC | Выполнено (✅) |
| Реализация VM | Выполнено (✅) |
| Написание бенчмарков для тестовых примеров (возможно и добавление дополнительных примеров кода и бенчмарков для них) | Выполнено (✅) |
| Приведение языка (компилятора и среды исполнения) к состоянию MVP | Выполнено (✅) |