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.


 

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

70134. Прості цикли в Паскалі. Сума нескінченного ряду 102 KB
  Постановка завдання: Обчислити суму нескінченного ряду з заданою точністю. Визначити кількість членів, необхідних для досягнення заданої точності. Створити два типи програм за допомогою різних операторів циклу.
70135. Чертёж плоского контура и его аксонометрия 89.5 KB
  Команда LIMITS (Ограничения) позволяет выбрать формат поля чертежа. Первый запрос командной строки предлагает нам координаты левого нижнего угла формата принять за начало координат (0,0) по умолчанию. После ввода начала координат второй запрос предлагает выбрать правый верхний угол...
70136. ИЗУЧЕНИЕ ПРИНЦИПА ДЕЙСТВИЯ И СХЕМ ДЕАЭРАТОРОВ 157.5 KB
  Деаэрация питательной воды паровых котлов и подпиточной воды тепловых сетей является обязательной для всех котельных. Деаэраторы предназначены для удаления из воды растворенных в ней неконденсирующихся газов. Для деаэрации питательной воды в котельных применяются струйные...
70138. ЭЛЕКТРОННАЯ ТАБЛИЦА EXCEL. ПОИСК РЕШЕНИЯ. ПОДБОР ПАРАМЕТРА 383 KB
  Изучить Поиск решения и Подбор параметра в электронной таблице Excel. Решение задач оптимизации Рассматривается технология разработки модели и решения задач с помощью программы Excel Поиск решений. Освоить методику и технологию оптимизации планов производства продукции в табличном...
70139. Оценка параметров надежности программ по временным моделям обнаружения ошибок 145.87 KB
  Научиться использовать модель обнаружения ошибок Джелинского-Моранды. Изучить поведение модели для различных законов распределения времен обнаружения отказов и различного числа используемых для анализа данных.
70140. Изучение конструкции цилиндрических и конических редукторов 61.5 KB
  Познакомится с классификацией, кинематическими схемами, конструкцией узлами и деталями цилиндрических и конических редукторов. Выяснить назначения всех деталей редукторов. Определение основных параметров редуктора. Определить параметры зацепления, размеров зубчатых колес и передач.
70141. Установка OC Windows XP в среде VirtualBox 54.5 KB
  Настройка среды VirtualBox Запустите среду VirtualBox. Проверьте настройки вашей виртуальной машины, созданной на предыдущей паре: подключите образ дистрибутива ОС: D:\SOS\Image\ Windows XP Prof SP3 Rus VL\ WinXP Prof SP3 Rus VL.iso, в Bios Setup должен быть включен режим запуска с компакт-диска.
70142. Завод по производству стальных пространственных конструкций в городе Екатеринбург 134 KB
  Завод выпускает металлические конструкции – колонны, несущие конструкции покрытия и узлы трубопроводов по целевому назначению, пространственные стальные конструкции. В производственный корпус металл подаётся электротележкой, проходит очистку.