Создание DSL-компиляторов на PythonЯзык Python, его эволюция и использование

Доклад принят в программу конференции
Пётр Советов
МИРЭА

Создал несколько DSL-компиляторов для софт-ядер на FPGA и многоядерных систем в кремнии. Текущие интересы: быстрая разработка инструментального ПО.

Тезисы

Сегодня небольшие языки программирования для отдельных предметных областей (DSL) широко применяются разработчиками. Подход с использованием DSL является одним из самых эффективных в борьбе со сложностью программных систем. В связи со сказанным выше возникает задача быстрого прототипирования DSL-компиляторов. Перед автором доклада эта задача возникла в контексте задачи ускорения процесса разработки специализированных процессорных ядер на FPGA. Для оперативной оценки различных вариантов создаваемой системы команд процессора необходимо быстро перестраивать соответствующим образом весь набор инструментального ПО (компилятор, ассемблер, симулятор).

В результате был разработан собственный инструментарий, который позволил решить не только задачу синтаксического разбора простого DSL, но и дал возможность в выразительной форме описывать AST-преобразования, а также порождать эффективный целевой код. В разработке самого инструментария также был применен подход DSL: инструментарий реализован в виде двух внутренних DSL, представляющих собой набор комбинаторов на Python.

Использование Python в качестве языка реализации, а также тщательный выбор алгоритмов, позволили получить компактное решение — реализация заняла около 300 строк. Полученный инструментарий был успешно использован для создания DSL-компиляторов нескольких процессорных архитектур. При этом данный конструктор DSL-компиляторов может использоваться для создания самых разнообразных языковых средств. Среди простых примеров можно упомянуть компактную реализацию (39 строк) разбора JSON-формата. Более полно средства DSL-инструментария используются в миниатюрном DSL-компиляторе "Уж", входным языком которого является подмножество Python, а целевой код порождается для софт-процессора на FPGA.

Python
,
Прочие языки
,
Разработка библиотек, включая open source библиотеки

Другие доклады секции Язык Python, его эволюция и использование