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.


 

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

49024. РАСЧЕТ ТЕПЛОВОЙ СХЕМЫ КОМБИНИРОВАННОЙ ПГУ ЭЛЕКТРОСТАНЦИИ 1.29 MB
  Схема КПГУ с дожиганием продуктов сгорания ГТУ в топке парового котла и подводом дополнительного топлива и воздуха КПГУ с утилизацией продуктов сгорания ГТУ в топке парового котла без дожигания топлива: при этом генерация пара в котле утилизаторе осуществляется только за счет теплоты выхлопных газов...
49025. Расчет принципиальной схемы замкнутой системы электропривода 685.5 KB
  Электродвигатель постоянного тока независимого возбуждения с рабочей машиной, при допущениях постоянного магнитного потока двигателя, скомпенсированной реакции якоря двигателя, абсолютно жёстких механических соединениях и постоянном моменте инерции J привода
49026. Расчет физических свойств природного газа при нормальных условиях 1012 KB
  Расчет физических свойств природного газа при нормальных условиях Основные физикохимические свойства компонентов газов используемых для газоснабжения Газы Молекулярная масса кг моль Плотность при 0 С и атмосферном давлении кг м3 Критическая температура...
49028. Микропроцессорная система на базе МП КР580ВМ80А 73.5 KB
  Микропроцессорные системы нашли широчайшее применения в настоящее время. Основными характеристиками этих линий являются: Функциональное назначение: линии адреса образующие шину адреса А150; линии данных образующие шину данных D70; линии управления образующие шину управления; линии синхронизации и питания. В микропроцессоре К580...
49029. Выбор профессии финансового аналитика 1.52 MB
  Нейросети в банковском деле Нейросети в маркетинге В данной работе я попытаюсь показать возможно ли применение нейросети при выборе профессии и насколько это будет эффективно. Ими были получены следующие результаты: разработана модель нейрона как простейшего процессорного элемента выполняющего вычисление переходной функции от скалярного произведения вектора входных сигналов и вектора весовых коэффициентов; предложена конструкция сети таких элементов для выполнения логических...
49030. Создание и обработка баз данных в Excel и Access 943 KB
  Для представления данных в удобном виде используют таблицы. Особенность электронных таблиц заключается в возможности применения формул для описания связи между значениями различных ячеек, расчет по ним выполняется автоматически. Изменение значения в одной ячейки приводит к пересчету во всех остальных, которые связаны с нею формульными отношениями, а тем самым к обновлению всей таблицы.
49031. Цифровая система передачи непрерывных сообщений 539.5 KB
  Кодирование отсчетов сигнала bti: kразрядный равномерный двоичный код с добавлением одного бита проверки на четность. Канал связи с постоянными параметрами и аддитивной помехой имеет полосу пропускания ΔFk значительно большую чем ширина спектра модулированного сигнала ΔFU. Смесь сигнала и шума на выходе канала zt=stnt где st= ut∙Kпк сигнал на выходе канала nt аддитивный гауссовский шум с равномерным энергетическим спектром белый...
49032. Разработка технологического процесса изготовления детали по чертежу 1.51 MB
  Технология изготовления заготовки Возможные способы изготовления заготовки. Технологический процесс изготовления заготовки. Технология изготовления детали Технологический процесс стр...