Skip to content

A custom statically-typed programming language implemented in Java. Features a bytecode compiler, VM with JIT optimization, and a GC.

Notifications You must be signed in to change notification settings

PaKicek/Slowrace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

79 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Slowrace

Реализация компилятора и среды исполнения языка программирования 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/.

Использование CLI

После сборки вы можете использовать компилятор следующими способами:

  • Компиляция и запуск (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 Выполнено (✅)

About

A custom statically-typed programming language implemented in Java. Features a bytecode compiler, VM with JIT optimization, and a GC.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages