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

Программный комитет ещё не принял решения по этому докладу
Пётр Советов
МИРЭА

Разработал инструментальное ПО для многоядерного форт-процессора в компании IntellaSys. Создал DSL-компиляторы для ПЛИС-ядер и многоядерных систем в кремнии ("Системы технического зрения", 9Mb96G). Текущие интересы: быстрая разработка DSL-компиляторов для проблемно-ориентированных архитектур.

Тезисы

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

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

Использование Python в качестве языка реализации, а также тщательный выбор алгоритмов, позволили получить миниатюрное решение — реализация инструментария заняла около 300 строк. Полученный инструментарий был успешно использован для создания DSL-компиляторов нескольких процессорных архитектур. При этом данный DSL-инструментарий может использоваться для создания самых разнообразных языковых средств. Среди простых примеров можно упомянуть компактную реализацию (39 строк) разбора JSON-формата. Более полно средства DSL-инструментария используются в примере source-to-source-компилятора, который транслирует текст программы на учебном языке PL/0 Н.Вирта в представление на Python. В еще одном реализованном примере используются исключительно второй, Prolog-подобный DSL для задачи преобразования AST-представления функции на языке Python и порождения целевого кода некоторой процессорной архитектуры.

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

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