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.


 

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

15366. Основные критерии оценки предпринимательских рисков 276.5 KB
  Основные критерии оценки предпринимательских рисков Введение Предпринимательская деятельность как функция управления имеет свою историю и динамику развития. Исходя из истории развития категории предпринимательства в современных трактовках научных деятелей в с
15367. Основные понятия аудита и аудиторской деятельности 195.5 KB
  Аудит – это вид деятельности, заключающийся в сборе и оценке фактов, касающихся функционирования и положения экономического объекта (самостоятельного хозяйственного подразделения) или касающихся информации о таком положении и функционировании...
15368. Анализ развития перестрахования в России 247.5 KB
  Содержание Введение 1. Понятие перестрахования и его назначение 1.1 Сущность и теоретические основы перестрахования 1.2 Виды перестрахования 1.3 Функции перестрахования 1.4 Нормативноправовая основа перестрахования 2. Анализ развития перестрахования в России ...
15369. Повышение эффективности производства подсолнечника на примере ООО Лосево 1.28 MB
  Основы экономики производства подсолнечника 5 Народнохозяйственное значение производства подсолнечника 5 Состояние и основные тенденции развития рынка 9 подсолнечника в России Краткая характеристика ООО Лосево
15370. Понятие и виды освобождения от наказания 191.5 KB
  Проявившиеся в последнее время тенденции широкого применения к лицам, впервые совершившим преступления не только небольшой, но и средней тяжести, института освобождения от наказания, нуждается в дальнейшем изучении с целью выявления необходимости последующего изменения уголовного закона и эффективности его применения
15371. Правовые основы доходов и расходов, финансирования 187 KB
  Термин «государственные доходы» употребляется в литературе и правовых актах в двояком значении. С одной стороны, этим термином обозначается определенная группа экономических распределительных отношений, а с другой – материальные носители этих отношений – финансовые ресурсы государства
15372. Принципы гражданского процессуального права 205 KB
  Данная курсовая работа состоит из: введения, в котором описываются задачи, цели, предмет и объект данного научного исследования; основной части, состоящей из трех глав. Первые две главы раскрывают непосредственно содержание принципов гражданского судопроизводства
15373. Психология мотивации человека 163.5 KB
  Введение Проблема мотивации и мотивов поведения в деятельности одна из основных в психологии. Вряд ли найдется такая область психологии которая не затрагивала бы мотивационного процесса. В настоящее время мотивация как психическое явление трактуется поразному....
15374. Развитие толерантности в системе образования - как объективная потребность современного общества 225 KB
  Курсовая работа Тема: Развитие толерантности в системе образования как объективная потребность современного общества. Развитие толерантности является объективной потребностью современного общества. В услов