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.


 

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

77399. Актуальность использования нетрадиционных и возобновляемых источников энергии 103 KB
  Актуальность использования нетрадиционных и возобновляемых источников энергии Понятие традиционной энергетики. Традиционная энергетика совокупность технических устройств использующих хорошо освоенные в технологическом отношении энергетические источники и способы преобразования получаемой от них энергии в первую очередь в электрическую. Их отличительные особенности: значительная единичная мощность; работа в общей электросети возможна работа и в тепловой сети; единый...
77400. Определение токсичных выбросов в атмосферу от объектов традиционной энергетики 142 KB
  Определяется полное количество тепла полезно использованное в паровом котле кВт 1. Значения удельной энтальпии энергоносителя определяется при известных его параметрах по таблицам теплофизических свойств воды и водяного пара. Определяется расход топлива на каждый котел установленный в тепловом источнике г с 1. Определяется расход топлива на все котлы установленные в тепловом источнике г с 1.
77401. Признание брака недействительным 44 KB
  Понятие и основания признания брака недействительным. Под признанием брака недействительным понимается аннулирование брака и всех его правовых последствий с момента его заключения. Признание брака недействительным по правовой природе санкция за нарушение требований установленных семейным законодательством.
77402. Правоотношения супругов 135.5 KB
  Личные неимущественные права и обязанности супругов. Каждый из супругов вправе выбирать место жительства место пребывания профессию и род занятий. СК не обязывает супругов проживать совместно но это более благоприятно устанавливая свободу в выборе место пребывания и места жительства предоставляет выбор и свободу жить раздельно может быть даже и весь период супружеской жизни.
77404. Правоотношение родителей и детей 168 KB
  В данном случае это происхождение ребёнка от конкретных лиц удостоверенное в установленном законом порядке. Установление происхождения ребёнка рождённого в браке. Происхождение ребёнка рождённого в браке установить довольно проще чем рождённого вне брака. Установление происхождения ребёнка рождённого в браке происходит в административном порядке.
77405. Алиментные обязательства членов семьи 75.5 KB
  Алиментное обязательство является имущественным правоотношением и средства предоставляющиеся в качестве алиментов представляют собой товар. В настоящее время алиментные обязательства могут возникать не только на основании закона но и на основании соглашения об уплате алиментов. Взаимность и возмездность в том что если родитель в своё время уклонялся от выполнения обязанности по содержанию ребёнка суд может освободить ребёнка от уплаты алиментов. Плательщик алиментов выплачивает алименты не предполагая получить какое-либо имущественное...
77406. Усыновление (удочерение) детей 102.5 KB
  Что касается усыновления он в СК не раскрыт используется в различных аспектах: Правовой институт который представляет собой систему правовых норм посвящённых подбору усыновителей определению порядка передачи ребёнка на усыновление условия усыновления установление порядка и правовых последствий прекращения отношений по усыновлению. Усыновление как форма устройства определяет юридическую судьбу ребёнка. Усыновление обладает приоритетом именно для того чтобы обеспечить наилучшие интересы ребёнка существуют определённые правила...
77407. Семейное право в правовой системе РФ 40 KB
  Понятие и признаки семьи. Семья в Российском праве не является субъектом S является лишь члены семьи. Понятие семьи даётся социологическими науками понимается и как сожительство разнополых особей но и как различного степени родства людей или находящихся в свойстве родственниками по крови они не являются. В российском праве нет единого определения семьи которое бы имело значение для всех отраслей российского права.