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.


 

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

22075. ЗАГАЛЬНА МЕТОДОЛОГІЯ НАУКОВОГО ДОСЛІДЖЕННЯ 239.5 KB
  ТЕМА: ЗАГАЛЬНА МЕТОДОЛОГІЯ НАУКОВОГО ДОСЛІДЖЕННЯ План 1. методика і техніка дослідження. Методологічні основи педагогічного дослідження. Педагогічні дослідження: методологічні поради молодим науковцям.
22076. МЕТОДОЛОГІЯ ТЕОРЕТИЧНОГО ДОСЛІДЖЕННЯИ 51.5 KB
  ТЕМА: МЕТОДОЛОГІЯ ТЕОРЕТИЧНОГО ДОСЛІДЖЕННЯИ План 1. Методи наукового дослідження. Особливості теоретичного дослідження 3. Характеристика методів теоретичного дослідження.
22077. МЕТОДОЛОГІЯ ЕМПІРИЧНОГО ДОСЛІДЖЕННЯ 254.5 KB
  ТЕМА: МЕТОДОЛОГІЯ ЕМПІРИЧНОГО ДОСЛІДЖЕННЯ План 1. Сутність і особливості емпіричного дослідження. Переваги експерименту перед іншими методами дослідження. Сутність і особливості емпіричного дослідження Наукове дослідження любої предметної області починається з емпіричного рівня.
22078. СОЦИАЛЬНО-ПЕДАГОГИЧЕСКАЯ ДЕЯТЕЛЬНОСТЬ С ДЕТЬМИ-ИНВАЛИДАМИ И ИХ СЕМЬЯМИ 61.5 KB
  Ребенок с нарушениями развития не вписывался в картину счастливой жизни и нередко исключался из активной общественной жизни а его отношения с обществом опосредовались через здоровых членов семьи или систему специальных закрытых учреждений и как следствие этого изоляция больного ребенка и искусственное замалчивание проблемы детской инвалидности. Права лиц детей инвалидов отражены в ряде документов ООН: Всеобщая декларация прав человека1948; Декларация о правах инвалидов1971; Декларация о правах умственно отсталых лиц1971;...
22079. КАТЕГОРИИ И ФУНКЦИИ СОЦИАЛЬНОЙ ПЕДАГОГИКИ 32 KB
  В связи с тем что соц. педагогика стала самостоятельной наукой относительно недавно отделившись от педагогики и объект изучения у них практически одинаков то разделение категорий относящихся к разным наукам поможет выявить специфику соц. Много категорий взято соц.
22080. ПРОФЕССИОНАЛЬНО-ЛИЧНОСТНЫЙ ПОРТРЕТ СОЦИАЛЬНОГО ПЕДАГОГА 56.5 KB
  Специализация соц. Квалификационная характеристика соц. Функции соц.
22081. МЕТОДЫ СОЦИАЛЬНОЙ ПЕДАГОГИКИ 34 KB
  Методы соц. пед можно классифицировать объединив их в три большие группы: методы исследования; методы воспитания; методы социальнопсихологической помощи. Методы научного исследования это способы получения научной информации. ПЕДАГОГИЧЕСКИЙ ЭКСПЕРИМЕНТ является комплексным методом исследования и позволяет глубже чем другие методы проверить правильность выдвинутой гипотезы.
22082. ПРОФИЛАКТИКА НАРКОМАНИИ У ПОДРОСТКОВ 51.5 KB
  За последние пять лет по России число школьников и студентов употребляющих наркотики возросло более чем в 8 раз. Проведенный областным наркологическим диспансером и РИРО опрос учащихся школ и профессиональных училищ свидетельствует о том что более 17 их них уже пробовали наркотики: каждый четвертый юноша и каждая восьмая девушка. Около 4 подростков употребляют наркотики систематически. Исследование выявило что первая пробы наркотиков произошла в довольно молодом возрасте: в среднем это 1517 лет однако есть много и таких которые...
22083. Педагогика творчества 94.5 KB
  Если рассмотреть процентное соотношение одаренных и неодаренных детей то мы получим график в виде колокола: 22 сверходаренные дети; 135 выше нормы; 682 детей имеют средний интеллект; 135 ниже нормы; 22 умственно отсталые. Творческих детей отличает живое воображение включение элементов игры в выполнение задач изобретательность богатая фантазия нестандартность мышления отличная память в сочетании с ранним языковым развитием способность к классификации Барьерами тормозящими раскрытие творческого потенциала личности...