77341

Язык программирования 0xfb.L

Научная статья

Информатика, кибернетика и программирование

Близится выход С0x новой расширенной версии С которая может стать тем самым инструментом но стандарт С сам по себе очень сложен синтаксис система типов виртуальные методы не все компиляторы поддерживают все возможности поэтому расширение кажется спорным решением. Концепция является результатом развития идей метапрограммирования Lisp Nemerle и сводится к динамическому выстраиванию окружения состоящего из типов переменных и операторов во время компиляции. В процессе компиляции каждое выражение синтаксическая конструкция...

Русский

2015-02-02

65.5 KB

0 чел.

Язык программирования 0xfb.L

Косенко В.В.

УрГУ, г. Екатеринбург

Растущая сложность задач решаемых на компьютере в результате привлечения более совершенных математических моделей и архитектурно-аппаратных решений приводит к неминуемому увеличению сложности всего разрабатываемого программного обеспечения. Сдержать при этом усложнение процесса разработки и не потерять в производительности можно только за счет развития новых подходов в программировании. Так появилось структурное программирование, функциональное программирование (ФП) и позже объектно-ориентированное программирование (ООП). Теперь же любой современный язык программирования по-своему объединяет сразу несколько парадигм:

  •  императивность + ФП = монады (Haskell);
  •  императивность + ФП = Linq, TFunc (C#).

Разработка действительно упрощается, но программы созданные с помощью современных подходов проигрывают прямолинейным и зачастую более громоздким реализациям на С и С++ как минимум в два раза по скорости исполнения и в эффективности использования оперативной памяти (http://shootout.alioth.debian.org/). Давно сформированные и далее не развивавшиеся языки остаются востребованными, потому что построение инструмента одновременно эффективного, как с точки зрения выполнения, так и с точки зрения разработки представляет собой сложную задачу. Близится выход С++0x - новой расширенной версии С++, которая может стать тем самым инструментом, но стандарт С++ сам по себе очень сложен (синтаксис, система типов, виртуальные методы), не все компиляторы поддерживают все возможности, поэтому расширение кажется спорным решением.

Более привлекательной представляется концепция языка 0xfb.L (оригинальное название 7fa2.L или RiDE.L) [1,2], согласно которой можно построить доступный в реализации, и эффективный язык программирования, предложив новый механизм компиляции, при котором множество базовых конструкций языка будет описываться на самом языке. Концепция является результатом развития идей метапрограммирования (Lisp, Nemerle) и сводится к динамическому выстраиванию окружения, состоящего из типов, переменных и операторов, во время компиляции.

За основу взят язык алгебраических выражений:

  •  упрощенная лексика языка С (без ключевых слов, фигурных и квадратных скобок, операций инкремента/декремента и многострочных комментариев) с двумя автогенерируемыми операторами:
  1.  бинарный apply

x y - пара токенов заменяется лексическим анализатором на тройку x apply y,

если x{ID,CONST,)} y{ID,CONST,(}

  1.  унарный $

цепочка E;...;E заменяется синтаксическим анализатором на E$;...;E$,

где E – нетерминал, обозначающий выражение;

  •  операторный синтаксис.

В процессе компиляции каждое выражение (синтаксическая конструкция) получает тип, ссылку на значение и ассемблерный код, определяющий вывод значения. Код  корневого выражения будет ассемблерным представлением исходного кода, выходом компилятора.

Центральным блоком нового языка является его система типов. Существовало несколько предположений о том, как этот блок необходимо конструировать. На данный момент реализована только одна из возможных схем, она и будет рассмотрена далее.

Итак, тип выражения выводится последовательно в два этапа:

Этап 1:

если выражение – оператор

тип значения оператора

иначе (атомарное выражение)

если записывается лексемой идентификатора

  если зарегистрирована переменная с таким именем

   тип переменной

  иначе

   T_ID

 иначе (записывается лексемой константы)

  T_CONST

Этап 2:

если выражение – аргумент некоторого оператора

 тип из сигнатуры подходящего оператора

иначе

 результат первого этапа

В языке предусмотрен специальный тип T_BE для нескомпилированных выражений, для функционирования которого в алгоритм необходимо внести поправку:

если выражение является аргументом оператора, в множестве зарегистрированных сигнатур которого найдется хотя бы одна, согласно которой выражение имеет тип T_BE, тогда отрабатывает только второй этап алгоритма.

Следует отметить, что манипуляции с деревом разбора, производимые за счет таких выражений - один из основных механизмов метапрограммирования в 0xfb.L.

Другой необычный тип языка T_TYPE. Выражения данного типа хранят в себе описатели типов языка, поэтому можно, например, создать переменную с именем int и сохранить в ней указатель на тип целых чисел. Аналогично добавляются и другие примитивные типы. Предполагается, что похожая схема позволит конструировать и более сложные типы (структуры, объекты и генеративные типы).

Свой тип T_OP имеется и для указателей на регистрируемые операторы.

Типы, отражающие основные сущности языка, называются базисными. Изначально ни для каких типов имена не выделены, поэтому для того чтобы базисные типы не перепутались, введено следующее правило:

базисные типы регистрируются первыми T_TYPE, T_ID, T_CONST, T_OP, T_BE и строго в данном порядке.

Привычного набора операторов в самом начале тоже нет. Вместо этого введена пара особых (с фиксированной семантикой) связывающих операторов:

  •  оператор «;» сцепляющий произвольные выражения в список

пустая реализация, значение равно значению последнего выражения;

  •  оператор «,» позволяющий управлять арностью других операторов

пример: (a,b)+c - трехоперандное сложение, (a,b)+(c,d) - четырех.

Кроме того, по умолчанию регистрируется тип T_ASM, переменная asm этого типа и исходный оператор

apply # T_ASM/T_BE (метка apply, левый аргумент типа T_ASM, правый - T_BE)

Значением второго аргумента этого оператора должна быть строковая константа, содержащая ассемблерный код в тернарной форме. Код может содержать как обычные инструкции, так и специальные - директивы компилятору. Директивы интерпретируются семантическим блоком компилятора во время компиляции, взаимодействуя с окружением:

  •  регистрация и конфигурирование типов, переменных и операторов
  •  работа со структурами времени компиляции и с фрагментами дерева разбора

Проинтерпретированные директивы исключаются из потока инструкций, и все, что осталось, становится реализацией исходного оператора.

Остальные операторы выражаются через исходный и упомянутую ранее пару связок по интуитивно понятному алгоритму:

если выражение - оператор

 код аргументов (при проходе слева направо) + реализация оператора

иначе (атомарное выражение)

пусто

Единственным неосвещенным местом работы компилятора является фундаментальный для всей системы механизм поиска подходящего оператора по сигнатуре среди всех зарегистрированных. Следующий алгоритм является его текущей реализацией:

  1.  по метке и числу аргументов определить множество выбора E. I = .
  2.  перебираем выражения-аргументы ei слева направо

Ex = {s|sE s[i]=T_BE}

Ix = {s|sI s[i]=T_BE}

если Ex = и Ix =

компилируем ei

 Ex = {s|sE s[i]=тип ei}

 Ix = {s|sE ei-идентификатор и s[i]=T_ID}{s | sI s[i]=тип ei}

 если Ix =  и Ex = 

  нет оператора

E = Ex

I = Ix

  1.  если E ≠ ∅

E[0]

иначе

I[0]

Множество I дает операторам с типом T_ID в сигнатуре особый приоритет, что может быть удобно при реализации свойств и методов для ООП.

На данный момент для Windows реализованы все описанные алгоритмы в виде рабочей связки лексического, синтаксического и семантического анализаторов. Для нового языка написана первая библиотека, реализующая необходимые операторы для привычного определения типов, переменных и операторов, а также таких конструкций как if-else, for-break-continue и switch-case-default-break. Сейчас ведется разработка блока генерации кода, позволяющего компилировать 0xfb.L в MSIL для применения в .Net приложениях.

Литература

  1.  Бахтерев М.О. Язык программирования 7fa2.L // Третья международная конференция "Информационно-математические технологии в экономике, технике и образовании" г.Екатеринбург, 20-22 ноября 2008 г. Тезисы докладов. Стр.215-216.
  2.  Бахтерев М.О., Косенко В.В. Язык программирования RiDE.L // Тезисы 11-го Международного семинара "Супервычисления и Математическое моделирование", РФЯЦ-ВНИИЭФ, Саров, 2009, с. 25-26.


 

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

44563. Пакетная фильтрация. Использование маршрутизаторов в качестве firewall 29.5 KB
  Пропуск во внутреннюю сеть пакетов сетевого уровня или кадров канального уровня по адресам MCадреса IPадреса IPXадреса или номерам портов TCP соответствующих приложениям.
44564. Сервисы-посредники (Proxy-services) 30 KB
  Для того чтобы обратиться к удаленному сервису клиент-пользователь внутренней сети устанавливает логическое соединение с сервисом-посредником работающим на межсетевом экране. Сервис-посредник устанавливает отдельное соединение с настоящим сервисом работающим на сервере внешней сети получает от него ответ и передает по назначению клиенту пользователю защищенной сети.
44565. Критерии выбора корпоративной ОС 31 KB
  Среди основных требований которым должна отвечать корпоративная ОС можно указать следующие: функциональная полнота разнообразие поддерживаемых сервисов; производительность запросы к серверам должны обрабатываться с преемлемым уровнем задержек; масштабируемость характеристики производительности сетевой ОС должны сохраняться неизменными в широком диапазоне изменения параметров системы то есть сеть должна хорошо работать и тогда когда число пользователей и рабочих станций измеряется тысячами число серверов сотнями объемы...
44566. Функционал КИС как определяющий фактор выбора ее структуры 35.5 KB
  Очевидно что в состав КИС должны войти средства для документационного обеспечения управления информационной поддержки предметных областей коммуникационное программное обеспечение средства организации коллективной работы сотрудников и другие вспомогательные технологические продукты. Из этого в частности следует что обязательным требованием к КИС является интеграция большого числа программных продуктов. Наполнение предметной части КИС может существенно изменяться в зависимости от профиля деятельности предприятия включая например...
44567. Создание инфосистем на основе системы автоматизации деловых процессов 36 KB
  Из зарубежных систем это в первую очередь ction Workflow фирмы ction Techologies и продукт фирмы Stffwre Inc. Работа workflowсистем как правило основывается на том что большая часть деловых процессов представляет собой периодически повторяемую отрегулированную последовательность действий выполнение заданий которая может быть легко формализована. Таким образом без всякого программирования можно за считанные минуты получить реально работающее workflowприложение. В некоторых workflowсистемах создание информационных моделей деловых...
44568. Основные компоненты и типы ЛВС 44.5 KB
  ЛВС имеют модульную организацию. Компоненты ЛВС Выделяется два основных типа ЛВС: одноранговые peertopeer ЛВС и ЛВС на основе сервера server bsed. Выбор типа ЛВС зависит от: размеров предприятия; необходимого уровня безопасности; объема сетевого трафика; финансовых затрат; уровня доступности сетевой административной поддержки.
44569. Одноранговые сети. Рабочая группа 45.5 KB
  Все пользователи решают сами какие данные и ресурсы каталоги принтеры факсмодемы на своем компьютере сделать общедоступными по сети Одноранговая сеть Рабочая группа – это небольшой коллектив объединенный общей целью и интересами. Эти сети относительно просты.
44570. Сети на основе сервера 70.5 KB
  Поэтому большинство сетей используют выделенные серверы Выделенными называются такие серверы которые функционируют только как сервер исключая функции РС или клиента. Круг задач которые выполняют серверы многообразен и сложен. Чтобы приспособиться к возрастающим потребностям пользователей серверы в ЛВС стали специализированными. Так например в операционной системе Windows NT Server существуют различные типы серверов: Файлсерверы и принтсерверы.
44571. Комбинированные сети 46 KB
  На рабочих станциях ЛВС устанавливают Windows NT WorkSttion или Windows 95 98 которые будут управлять доступом к ресурсам выделенного сервера и в то же время предоставлять в совместное использование свои жесткие диски а по мере необходимости разрешать доступ и к своим данным Структура комбинированной ЛВС Комбинированные сети – наиболее распространенный тип ЛВС но для их правильной и надежной защиты необходимы определенные знания и навыки планирования. А вот различия между одноранговыми сетями и ЛВС с выделенными серверами существенно...