77369

РАЗРАБОТКА КОМПИЛЯТОРА ДЛЯ ЯЗЫКА ПРОГРАММИРОВАНИЯ RIDE.L

Научная статья

Информатика, кибернетика и программирование

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

Русский

2015-02-02

24 KB

0 чел.

РАЗРАБОТКА КОМПИЛЯТОРА ДЛЯ ЯЗЫКА ПРОГРАММИРОВАНИЯ RIDE.L

М.О. Бахтерев, В.В. Косенко

ИММ УрО РАН, УрГУ, Екатеринбург

Растущая сложность задач решаемых в рамках высокопроизводительных вычислений влечет за собой увеличение сложности соответствующего программного обеспечения. Возникает две связанные между собой задачи:

  1.  Не усложнять процесс разработки.
  2.  Максимально эффективно использовать ресурсы вычислителя.

С первой лучше справляются динамические языки программирования, со второй - языки с классической архитектурой компиляторов. Универсального инструмента нет, и работы по поиску подходящей концепции активно проводятся (переработанные версии Fortran, C++, Haskell, появление Go [1]).

Вопрос актуален, поэтому с нашей стороны была разработана идея императивного языка RiDE.L (оригинальное название 7fa2.L) [2,3], согласно которой, используя статическую типизацию и перегрузку операторов для описания семантики синтаксических конструкций языка на самом языке, можно получать эффективный машинный код. Данная идея является развитием метапрограммирования (Lisp, Nemerle) и сводится к динамическому выстраиванию окружения, состоящего из типов, переменных и операторов. Всё это легко укладывается в границы простого в реализации и компактного компилятора, что особенно полезно при портировании языка на специализированные вычислители и новые типы процессоров.

За основу взят язык алгебраических выражений:

  •  упрощенная лексика языка C (без ключевых слов и одним типом скобок);
  •  операторный синтаксис с сокращенной таблицей приоритетов.

Семантика строится на основе трех языковых примитивов: специального оператора asm, двух связывающих операторов:

  •  ; - бинарный оператор c пустой реализацией, определенный для всех типов;
  •  , - не совсем оператор, управляет арностью остальных операторов (например: (a,b)+c – трехоперандное сложение, (a,b)+(c,d) - четырех).

и нескольких особых типов, описывающих базовые сущности языка. Всего сущностей пять: тип, оператор, идентификатор, константа и обобщенное выражение. Взаимодействовать с ними можно только через аппликацию оператора asm. Оператор в качестве аргументов получает несколько выражений и одну строковую константу, содержащую ассемблерный код в тернарной форме. Параметрами инструкций помимо меток могут быть селекторы для доступа к аргументам оператора. Среди инструкций компилятор выделяет и интерпретирует директивы, которые:

  •  создают типы и операторы;
  •  объявляют переменные;
  •  получают лексемы у идентификаторов и констант,
  •  перестраивают фрагменты дерево разбора как обобщенные выражения;
  •  работают с прочими структурами времени компиляции.

Обработанные директивы исключаются из потока инструкций, оставшиеся становится реализаций фрагмента дерева, соответствующего оператору.

Другие операторы (арифметика, функции, объектный подход) определяются самим программистом и выражаются через asm и пару связок по индукции. В общем случае аппликация операторов происходит так:

  •  код реализация оператора подставляется по месту обращения;
  •  код определяется следующим образом:

если выражение - это оператор

код фрагментов (при проходе слева направо) + реализация оператора

иначе (атомарное выражение)

пусто.

Метки инструкций, также как и имена переменных, сигнатуры типов и операторов имеют локальное значение в своих областях видимости, задаваемых скобками. Коллизии, возникающие при конкатенации кода, регулируются по правилам:

  •  метки инструкций автоматически переименовываются;
  •  переменные перекрывают друг друга при включении соответствующих областей видимости друг в друга;
  •  внутри одной и той же области видимости двух переменных с одним именем зарегистрировать нельзя;
  •  операторы всегда перекрывают реализации друг друга (как при включении соответствующих областей, так и в рамках одной).

По окончанию компиляции каждое выражение получит тип, ссылку на значение и ассемблерный код. Код корневого выражения будет передан далее back-end’у.

На текущий момент закончена вторая версия front-end’а компилятора и RiDE.L-программа-библиотека, реализующая привычное определение типов, переменных и операторов, а так же такие конструкции как if-else, for-break-continue и switch-case-default-break. Первая версия была написана в виде с использованием perl и javascript под Windows для проверки и корректировки нашей теории. Новая версия написана на C#, она значительно быстрее, работает как в Windows (.Net), так и в Linux (Mono), а код стал намного понятнее.

Сейчас ведется разработка оптимизатора и генератора кода. Возможно первым целевым языком для полноценного RiDE.L-компилятора станет MSIL.

Список литературы

  1.  http://golang.org/
  2.  Бахтерев М.О. Язык программирования 7fa2.L // Третья международная конференция "Информационно-математические технологии в экономике, технике и образовании" г.Екатеринбург, 20-22 ноября 2008 г. Тезисы докладов. Стр.215-216.
  3.  Бахтерев М.О., Косенко В.В. Язык программирования RiDE.L // Тезисы 11-го Международного семинара "Супервычисления и Математическое моделирование", РФЯЦ-ВНИИЭФ, Саров, 2009, с. 25-26.


 

А также другие работы, которые могут Вас заинтересовать

18572. Сети ЭВМ и средства телекоммуникационного метода доступа 63 KB
  Сети ЭВМ и средства телекоммуникационного метода доступа Для современного этапа развития средств вычислительной техники характерно использование сравнительно дешевых мини микро и персональных ЭВМ обладающих достаточно большими вычислительными возможностями. По...
18573. Базы данных. Логическая область базы данных 145.5 KB
  Базы данных. Лекция № 1. 1. Предметная область базы: данных сварное соединение стыковое нахлесточное и т.п. Объекты предметной области. Логическая область базы данных цифры записи и т.п.. 2.Характеристика объекта предметной области называется атрибуткоторый прин
18574. НАЗНАЧЕНИЕ, СУЩНОСТЬ И СОСТАВНЫЕ ЧАСТИ ИНФОРМАЦИОННОГО ОБЕСПЕЧЕНИЯ САПР 93.5 KB
  НАЗНАЧЕНИЕ СУЩНОСТЬ И СОСТАВНЫЕ ЧАСТИ ИНФОРМАЦИОННОГО ОБЕСПЕЧЕНИЯ САПР Основное назначение ИО САПР уменьшение объемов информации требуемой в процессе проектирования от разработчика РЭС и исключение дублирования данных в прикладном программном и техническом обе...
18575. УРОВНИ ПРЕДСТАВЛЕНИЯ ДАННЫХ 117.5 KB
  УРОВНИ ПРЕДСТАВЛЕНИЯ ДАННЫХ Существует три уровня представления данных: уровень пользователя предметная область логический и физический. Каждый объект предметной области характеризуется своими атрибутами каждый атрибут имеет имя и значение. Например объект осц
18576. ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ 42.5 KB
  ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ Процесс разработки структуры БД на основании требований пользователя называют проектированием БД ПБД. Результатами ПБД являются структураБД состоящая из логических и физических компонент и руководство для прикладных программистов. Р...
18577. Функции сетевого программного обеспечения 33.5 KB
  Функции сетевого программного обеспечения Принято выделять в ПО АС общесистемное ПО системные среды и прикладное ПО. К общесистемному ПО относят ОС используемых ЭВМ и вычислительных систем а также сетевое ПО типовых телекоммуникационных услуг. Основой системной ср
18578. Прикладные протоколы и телекоммуникационные информационные услуги 65.5 KB
  Прикладные протоколы и телекоммуникационные информационные услуги Прикладные протоколы и телекоммуникационные информационные услуги Основные услуги телекоммуникационных технологий электронная почта передача файлов телеконференции справочные службы доски о
18579. Системы распределенных вычислений 42.5 KB
  Системы распределенных вычислений При выполнении проектных процедур с использованием более чем одного узла сети различают режимы удаленного узла и дистанционного управления рис. 5.1. В режиме удаленного узла основные процедуры приложения исполняются на терминальн...
18580. Информационная безопасность. Симметричную и асимметричную схемы шифрования 38 KB
  Информационная безопасность При обмене информацией между участниками проектирования возможны как утечка конфиденциальных данных так и нарушение целостности данных. Поскольку в САПР зачастую используются связи со смежными предприятиями через сети общего пользовани