автореферат диссертации по информатике, вычислительной технике и управлению, 05.13.17, диссертация на тему:Формальная модель контекстно-зависимых программных структур и их преобразований в применении к методологии Language-Driven Development

кандидата технических наук
Седунов, Алексей Александрович
город
Воронеж
год
2012
специальность ВАК РФ
05.13.17
Диссертация по информатике, вычислительной технике и управлению на тему «Формальная модель контекстно-зависимых программных структур и их преобразований в применении к методологии Language-Driven Development»

Автореферат диссертации по теме "Формальная модель контекстно-зависимых программных структур и их преобразований в применении к методологии Language-Driven Development"

На правах рукописи

005046062

СЕДУНОВ АЛЕКСЕЙ АЛЕКСАНДРОВИЧ

ФОРМАЛЬНАЯ МОДЕЛЬ КОНТЕКСТНО-ЗАВИСИМЫХ ПРОГРАММНЫХ СТРУКТУР И ИХ ПРЕОБРАЗОВАНИЙ В ПРИМЕНЕНИИ К МЕТОДОЛОГИИ LANGUAGE-DRIVEN DEVELOPMENT

Специальность 05ЛЗЛ7. — «Теоретические основы информатики»

АВТОРЕФЕРАТ диссертации на соискание ученой степени кандидата технических наук

2 2 ИЮН 2012

Воронеж 2012

005046062

Работа выполнена в ФГБОУ ВПО «Воронежский государственный университет»

Научный руководитель:

Официальные оппоненты:

Ведущая организация

кандидат физико-математических наук, доцент

Тюкачев Николай Аркадиевич

доктор технических наук, профессор,

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

Чижов Михаил Иванович

доктор физико-математических наук, доцент,

зав. кафедрой математического обеспечения ЭВМ Махортов Сергей Дмитриевич Таганрогский технологический институт ФГАОУ ВПО "Южный федеральный университет"

¿Ш-СК^

{1-ГО

2012 года в ** на заседании

Защита состоите.

диссертационного совета Д 212.038.24 при Воронежском государственном университете по адресу:

394006, г. Воронеж, Университетская пл., д. 1, ВГУ, ауд. 226.

С диссертацией можно ознакомиться в научной библиотеке ФГБОУ ВПО «Воронежский государственный университет».

Автореферат разослан^(

2012 г.

Ученый секретарь диссертационного совета

Д 212.038.24 -пгт-Ч. Чеботарев А.С.

ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ

Актуальность. Большинство современных технологий разработай программного обеспечения характеризуется ограниченными возможностями управления инструментальными средствами со стороны разработчика. Преодоление подобного ограничения возможно путем перехода к открытой архитектуре языков и основанных на них средств разработки, позволяющей разработчику модифицировать их в соответствии с целями конкретного программного продукта. Одним из способов реализации данного решения является подход, известный как LDD (Language-Driven Development). С позиции LDD ключевым компонентом любого процесса разработки является набор используемых языков, каждый из которых ориентирован на решение определенного круга задач. Программная среда LDD предоставляет разработчику средства, позволяющие создавать новые, а также модифицировать и комбинировать существующие языки.

Таким образом, актуальность настоящей диссертационной работы определяется необходимостью построения математической базы и необходимого программного обеспечения LDD-инфраструктуры.

Цель работы. Целью настоящего исследования является разработка формально-логической модели внутреннего представления программ, расширяющей возможности существующих языков и систем программирования с точки зрения реализации принципа «открытости для расширения и закрытости для изменения».

Объект и предмет исследования. Объектом данного исследования являются языки и системы программирования. Предмет исследования составляют средства метапрограммирования, а также методология Language-Driven Development и объектно-ориентированной разработки программного обеспечения.

Задачи исследования. Для достижения указанной цели поставлены и решены следующие задачи:

1. Анализ основных решений в области языков и систем разработки, поддерживающих элементы метапрограммирования.

2. Анализ существующих и разработка новых методов развития объектно-ориентированного подхода с целью расширения возможностей повторного использования компонентов программного обеспечения.

3. Разработка формальной модели внутреннего представления программ в применении к методологии Language-Driven Development.

Методы исследования. При выполнении диссертационной работы использованы методы математической логики и теории множеств, элементы теории графов и формальных моделей семантики языков программирования. Для реализации программной системы использованы принципы модульного программирования и объектно-ориентированного программирования с применением паттернов проектирования.

Основные результаты, выносимые на защиту, и их научная новизна.

1. Формальная модель, описывающая структуру внутреннего представления программ, отличающаяся наличием контекстно-зависимых представлений и прототипирования, основанного на отношениях реализации и наследования и тем самым позволяющая снизить сложность описания структуры языков и программ.

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

3. Методика построения языков программирования (на примере языка TBL), отличающаяся использованием контекстно-зависимых представлений и позволяющая расширить возможности традиционного объектно-ориентированного подхода с точки зрения повторного

использования программных компонентов и реализации принципа «открытости - закрытости».

Теоретическая и практическая значимость работы

Практическое значение имеют научные и прикладные результаты, которые можно рекомендовать для создания новых инструментальных систем, поддерживающих разработку и расширение языков программирования. Теоретическая значимость работы состоит в развитии механизма повторного использования программных компонентов в объектно-ориентированных системах за счет использования контекстно-зависимых представлений.

Диссертация соответствует профилю диссертационного совета Д 212.038.24 и паспорту специальности 05.13.17 «Теоретические основы информатики» по следующим областям исследований:

• п. 2 «Исследование информационных структур, разработка и анализ моделей информационных процессов и структур»;

• п. 14 «Разработка теоретических основ создания программных систем для новых информационных технологий».

Апробация работы. Основные положения работы докладывались на конференциях "Информатика. Проблемы, методология, технологии" (Воронеж, 2010), "Технологии Microsoft в теории и практике программирования" (Москва, 2010) и "ICOOOLPS: Workshop on Implementation, Compilation and Optimization of Object-Oriented Languages, Programs and Systems" (European Conference on Object-Oriented Programming, Lancaster, UK, 2011).

Публикации. Основное содержание диссертационной работы изложено в 12 работах, из них 4 статьи в журналах, рекомендованных ВАК РФ.

Структура и объем работы. Диссертация состоит из введения, 4 глав, заключения и списка литературы. Общий объем диссертации - 157 страниц.

СОДЕРЖАНИЕ РАБОТЫ

Введение содержит обоснование актуальности темы диссертационной работы, а также формулировки цели и задач исследования.

Глава 1.

В главе 1 приводится обзор существующих подходов к реализации средств метапрограммирования, а также основных вариантов развития объектно-ориентированного подхода. В работе представлен критический анализ ряда языков программирования и описаны их возможные применения в контексте методологии LDD. Кроме того, рассматриваются ключевые реализации программных инфраструктур, предоставляющих средства метапрограммирования, в частности, Meta Programming System (JetBrains, Inc.), Whole Platform и XMF.

Рассмотрен ряд подходов, направленных на развитие возможностей повторного использования компонентов программных систем. Данный аспект играет важную роль в контексте LDD-подхода, поскольку основные варианты использования соответствующей программной инфраструктуры предполагают расширение и комбинацию различных компонентов, входящих в состав других моделей. Примером может служить добавление новых конструкций в существующий язык программирования, изменение семантики существующих конструкций, комбинация возможностей нескольких языков и т. д.

В завершение главы сформулированы основные требования к языковым возможностям LDD-инфраструктуры и реализуемому ей набору функций.

Глава 2.

В главе 2 вводятся основные элементы структуры программных моделей: ссылки, объектные структуры, контексты и селекторные выражения. Представлены основные элементы метаструктуры, виды отношений между ссылками и аксиомы, определяющие формальную модель внутреннего представления программ.

Значение, коллекции, объектные структуры. Пусть L -фиксированное счетное множество ссылок с выделенным элементом null е L и I = 2* - множество строк (идентификаторов) над некоторым фиксированным алфавитом Е . Множеством значений называется открытое размеченное объединение следующего вида:

def

V = void+ bool: В + int: N + ident: I + ref : L +...

Для описания структур, составленных из значений мы будем использовать отображения вида D = I -> Vx , называемые словарями и кортежи

вида V*. Под коллегией понимается элемент множества

j,f

Col = dic:D + seq: V .

Объектом и списком называются элементы следующих множеств

def <М , . ч

Obj = null+ bd: (self: L, itm: D, meta: D) и List = (self: L, itm: V , meta: Dj соответственно. Размеченное объединение списков и объектов называется

def

множеством объектных структур: Dyn = obj: Obj + list: List. В частности,

def

null = obj(null). На множестве объектных структур определяются функции id : Dyn L , ent: Dyn -> Col и meta : Dyn ->■ Col, извлекающие из них значение компонента self и внутренние элементы cnt (meta) в виде соответствующей коллекции.

Контексты. Для описанию связей между ссылками и объектными структурами используется понятие контекста. Контекстом называется функция вида /: L —» Dyn , удовлетворяющая условию /null = some null. Множество всех контекстов обозначается С . Пустым контекстом называется

def

контекст вида С0 = (Х(хе L).±)[null <- somenull]. Если С(/) = somez , то 1 называется внешней идентичностью объектной структуры z .

Ссылка / е L называется замкнутой в контексте С (запись ас1),

если / е DomT С: ей соответствует объектная структура. Значение v называется замкнутым в контексте С, если оно не содержит незамкнутых

def

ссылок: Ц, v<=> tag v * refv3(/: v = ref /).пс/. Коллекция называется замкнутой в контексте С, если соответствующая ей функция конечна и все содержащиеся в ней ссылки замкнуты в С. Объектная структура z называется замкнутой в контексте С, если

□Ccnt z ADcmetaz л C(idz) = somez . Контекст С называется замкнутым, если

множество Dorn7 С конечно, любая объектная структура, содержащаяся в его множестве значений контекста, замкнута в нем, а сужение контекста на множество Dom7 С является биекцией.

Рассмотрим операции доступа к компонентам структур. Пусть X -

def

множество адресных элементов-. X = itm: I + met:I + idx:N . Кортеж IeX'

называется адресом. Пара (v,X) е V, х X* = Sc, обозначаемая v[X],

называется селектором. Процедура вычисления селектора основана на следующих правилах вывода в контексте С :

С (/) = some z, tag х * met, С (/) = some z, tag x = met,

(cntz)[x] = v_ (metaz)[x] = v

(someref/)[(x)x]^c v[X] (someref /)[(*)*] v[x]'

Любое селекторное выражение имеет единственное значение, поэтому на множестве селекторных выражений можно ввести функцию-вычислитель eval: Se С V± .

Пусть С,, С2 - контексты и /: Dom7 С, Dom7 С2 - биективная функция. Два значения v,,v2 eV± эквивалентны (v,~v2), если выполняется

У, = V, =±

одно из следующих условий: v, 2 = someref/12,/, е Dom/,/2 =/(/,).

у,, = some и, 2, tag г/, , ref, г/, = и2

Контексты С, и С2 эквивалентны, еели DomT С2 ~DomT С,, /(null) = null и

evalQ /[x]~evalCi /(/)[*] при всех / е Dorn7 С,,дт е X .

Метаструктура. Выделяется ряд специальных классов объектных структур, отличающихся метаданными и выполняющих различные функции в формировании программной модели. Основным элементом структуры, на основе которого определяются композиционные связи «часть-целое», является понятие узла. Объектная структура г называется узлом (запись: Nodec z) в

meta z [met "owner"] = some ref / контексте С , если выполняется условие ^ С (/) = some z'

z' = null v Nodec (z')

Назначение компонента "owner" состоит в хранении обратной ссылки на узел-владелец, по отношению к которому данный узел является компонентом.

Объект z называется сущностью (Entc z), если он является узлом и содержит в слоте «desc» список следующего вида (дескриптор Дескриптор, как показано далее, используется для привязки контекстно-

meta z [met" desc "] = some ref I C(f) = some list s

IM=M

V(v e Rngi).tagv = ref

Для отражения ассоциативных связей, которые могут связывать произвольные узлы модели, вводится понятие адаптера. Сущность z

зависимых структур к сущности.

называется адаптером в контексте С (Adpc(z)), если

■ С(/) = somez' z' = null v Nodec (z')

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

Композиция и ассоциация. Рассмотрим ограничения, которые накладываются на рассмотренные выше структуры. Будем говорить, что узел-ссылка / является компонентом узла-ссылки /', а Г соответственно контейнером I (запись: Ыс1'), если evalc/'[.y] = someref / для некоторого хеХ\ {met "owner", met "target") .

Если узел / является контейнером для ссылки-адаптера /' и targetc Г = I" ф null, то имеет место ассоциация между ссылками hi Г \

Сформулируем ограничения, касающиеся метаструктуры контекста. Будем говорить, что замкнутый контекст С является корректным по отношению к метаструктуре, если он удовлетворяет свойствам (]) - (8).

V(zeRngCAtagz = list).Nodec(z) (1)

V(z е Rng С л tag z = obj).Primc (z) v Entc (z) (2)

meta z [met" target"] = someref I

meta z [met" scope"} = some ref I С (I) = somez' z' = nulIvEntc(z')

и

«*■/ ( X \

/~W«/"*nullA3 Г: Adpc (l') л r<c I Ltargetc/' = /

Эти утверждения означают, что в корректном контексте любой список является узлом, а любой объект является либо простым объектом, либо сущностью.

V(/,/'|Mc /').ownerc/ = /' (3)

V(/,/': Nodec (/) л Nodec (/')|ownerc 1 = l 'л Г' * null)[/ Чс /'] (4)

-а(/,/':Nodec(/)лownerc / = /')./'-<*с / (5)

Эти утверждения характеризуют основные свойства отношения композиции: согласованность с операцией owner, отсутствие узлов, которые являются владельцами самих себя.

V//7".Binderc(/)A/'eRng(bndsc/)A/"^c 1'=>Г<С scopес/ (6)

V// 7".Binderc (/) л /' е Rng (bndsc /) л /" ->с /' => Nodec /" (7)

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

Зависимость. Путем pathc / узла I в контексте С называется такая

/, \ , , , [ownerc /„,/„ * null последовательность ссылок < / ), что /0 = / и /п+| = <

v ' [null

Сущность z называется клиентом (запись: Clientc (z)), если

mzia.z\mz\" depAdapters"] = someref /, где С (I) = some list s и

iv = ref/V\ Adpc(/')

V(veRngs).-^ . Клиент l зависит от адаптера

[ target,,/' = nullv Adpc (targetc/')

I', если depAdaptersc / ассоциирован с /1. Кортеж, состоящий из всех ссылок-

атрибутов, от которых зависит данная ссылка-клиент / обозначается depsc /.

Адаптеры позволяют связывать с сущностями контекстно-зависимые метаданные. Пусть е - сущность в контексте С . Локальным дескриптором е называется кортеж, образованный слиянием кортежей атрибутов, принадлежащих косвенным контейнерам е и самой сущности е, указывающих на е и взятых в порядке обратного пути е:

htap ce = (l)^nJ>

=> locdscc е = concat(filter(attrsc i depsc )(Xa.targetc a = e)).

Использование операции слияния означает, что один и тот же атрибут не встречается в дескрипторе более одного раза. Гибкое определение метаданных сущности достигается за счет возможности расширения локального дескриптора атрибутами, доступными через композиционные связи адаптеров, которые ссылаются на исходную сущность. Тем самым один и тот же объект может обладать различным набором метаданных в зависимости от того, какая ссылка используется для обращения к нему. Для учета ассоциативных связей вводится понятие полного дескриптора. В отличие от локального, полный дескриптор определен для адаптеров, поскольку его структура зависит не только от исходной сущности, но и от ее

clef

адаптера: fulldsce / = concat (locdscc targetc /,extdscc /), где

htap =

=> extdscc / = concat ^filter (attrsc i depsc /,. )(ла. targetc a = targetc I)} q

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

Сущность z называется шаблонным параметром (Parc z), если meta z[met" на/не"] = someidents и либо metaz[met"constr"] =± , либо ímetaz[met"coní/r"] = someref /

<! . Связка z называется шаблоном (Tmplr z),

[C(/) = somez1, Adpc (z')

если все ее связанные сущности являются шаблонными параметрами с попарно различными именами. Шаблон / называется производным, если

ÍC(/') = somelists evaL/[met"parent"i = some/', где < , N , 4.

c L J |v(v e Rngi).v = ref /"лТтр1с (/")

Рассмотрим контекст С, в котором определены отличные от null ссылки / и /', причем 1фГ . Ссылка /' называется расширением ссылки /, ( /' >с /), если она имеет ту же структуру, за исключением того, что ссылки на шаблонные параметры могут быть заменены произвольными значениями. Ссылка / называется экземпляром шаблона в контексте С (запись: /:с/'),

если / >с kerc /' и evalc / [met" proto"] = some ref /'.

Сформулируем теперь дополнительные ограничения (9) - (12) на структуру контекста, определяющие его корректность.

Рагс / л constrc / = some /' => Tmplc /' (8)

(9)

y( pj"-. p e Dom er a constrc p = some /") 3 (q : crp = ref q ) .q \Cn I" Таким образом, результат подстановки сам должен быть реализацией шаблона, заданного операцией constr соответствующего параметра. Правила (11) и (12) выражают свойства, характеризующие отношение наследования:

-31J С / (Ю)

Глава 3.

Глава 3 посвящена описанию механизма действий, формализующего

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

13

как создания новых и изменение состояния существующих объектных структур.

Действия. Действия - это объекты предопределенного вида, описывающие элементарные изменения в структуре модели. Выделяются такие действия, как создание списка или объекта с заданной структурой, создание новой реализации заданного шаблона,

изменение/добавление/удаление элемента объектной структуры, активация заданного процедурного объекта.

Для описания процедуры выполнения действий вводятся выражения-активаторы и определяются правила редукции. Активатором называется

def

элемент множества: А = (exec : L х L* + halt), где exec(k,L) символизирует

выполнение последовательности действий, заданной кортежем ссылок L по

отношению к контроллеру k, a halt - останов выполнения. Пара (а,С),

состоящая из активатора и контекста, обозначается ас .

Отдельный шаг выполнения характеризуется отношением редукции => . Ниже представлены некоторые из правил редукции:

• редукция последовательности действий

ехесс (А-,( )) ехесс (£,(/))=» haltc ехесс (£,(/))=> ехесс, (k,L')

haltc ехесс (*,(/)/,) =>haltc ехесс (k,(l)L) => ехесс, (k,L'L)

• создание объекта

I ::с NewActionDesc evalc / [cnt " cut "] = some ref p evalc /[cnt "//¡era"] = some ref q execc (kj) => errlfFail(c,newinitobj(p,q)C,exec(k,( )))

• создание экземпляра шаблона /::с NewInstActionDesc

evalc / [cnt "template"] = some ref p execc (kj) => errlfFail(c.newinst pC,cxcc(k,( )))

14

Все контексты, порождаемые активатором а из фиксированного контекста С, эквивалентны друг другу.

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

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

Таким образом, преобразования контекста, описываемые посредством механизма действий, сохраняют корректность и ключевые свойства структурных элементов моделей. С точки зрения реализации это означает, что любая последовательность объектов ActionDesc всегда реализуема в терминах элементарных операций (создание объекта/списка и изменение его компонента) и сохраняет корректность контекста. Это условие, в частности, необходимо для правильной реализации системы контроля версий, поскольку состояние модели до и после выполнения любой транзакции должно удовлетворять условиям корректности независимо от того, была эта транзакция выполнена или отменена.

Глава 4.

Данная глава содержит описание двух основных языков программирования, используемых в прототипе LDD-фреймворка, реализованном в рамках настоящего исследования — язык TBL, реализующий объектно-ориентированный подход к разработке и язык запросов TQ, предназначенный для выборки и модификации объектных графов, описывающих структуру моделей/программ. Рассматривается ряд примеров, демонстрирующих преимущества TBL по сравнению с традиционной парадигмой ООП, а также реализация преобразований программных моделей с

15

помощью языка TQ. В завершение главы приводится описание основных особенностей программной реализации ядра системы Turbine, включая объектные модели ключевых компонентов.

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

1. Формальная модель внутреннего представления программ, поддерживающая контекстно-зависимые представления и прототипы.

2. Формальная модель преобразования структуры программ (механизм действий) с контролем версий.

3. Методика построения языков программирования, которая за счет использования указанных моделей (в частности, контекстно-зависимых представлений), позволяет расширить возможности повторного использования в объектно-ориентированных системах.

СПИСОК ПУБЛИКАЦИЙ ПО ТЕМЕ ДИССЕРТАЦИИ

1. Седунов А. А. Гибридный объектно-ориентированный метаязык // Труды VI всероссийской научно-практической конференции «Технологии Microsoft в теории и практике программирования», Москва, 2009.

2. Седунов А. А., Тюкачев Н. А. Объектно-ориентированный язык спецификаций // Труды всероссийской научно-технической конференции «Молодые исследователи - регионам», Вологда, 2009.

3. Седунов А. А. Объектно-ориентированный метаязык // Вестник ВГУ, серия «Системный анализ и информационные технологии», 2009, №1.

4. Седунов А. А., Тюкачев Н. А. Построение формальных моделей с применением объектно-ориентированного метаязыка // Вестник ВГТУ, 2009, т. 5, №10 [издание из перечня ВАК].

5. Седунов А. А. Присоединяемые типажи в Java: расширение языка и область применения // Вестник Воронежского государственного университета, серия «Системный анализ и информационные технологии», 2010, №1 [издание из перечня ВАК].

6. Седунов А. А. Расширение функциональности классов с помощью присоединяемых типажей. // Труды X международной конференции «Информатика: проблемы, методология, технологии», Воронеж, 2010.

7. Седунов А. А. Язык запросов для внутреннего представления ВОО-программ // Труды VII всероссийской научно-практической конференции «Технологии Microsoft в теории и практике программирования», Москва, 2010.

8. Седунов А. А., Тюкачев Н. А. Расширение языка Java с помощью присоединяемых типажей // Труды всероссийской научно-технической конференции «Молодые исследователи - регионам», Вологда, 2010.

9. Седунов А. А. Формализация объектной структуры с помощью систем объектных уравнений // Вестник ВГУ, серия «Системный анализ и информационные технологии», 2010, №2 [издание из перечня ВАК].

10. Седунов А. А. Расширение функциональности классов с помощью присоединяемых типажей. // Труды XI международной конференции «Информатика: проблемы, методология, технологии», Воронеж, 2011.

11. Седунов А. А. Структура ядра метаязыка в системе LDD-программирования // Вестник ВГУ, серия «Системный анализ и информационные технологии», 2011, №1 [издание из перечня ВАК].

12. Sedunov Aleksey, Tyukachev Nikolay. An Approach to Modular Object-Oriented Programming in Language-Driven Development Framework // 6th ICOOOLPS Workshop, European Conference on Object-Oriented Programming, Lancaster, UK, 2011.

Подписано в печать 25.05.12. Формат 60*84 '/16. Усл. псч. л. I. Тираж 80 экз. Заказ 563.

Отпечатано с готового оригинал-макета в типографии Издательско-полиграфичсского цсн1ра Воронежского государственного университета. 394000, Воронеж, ул. Пушкинская, 3

Оглавление автор диссертации — кандидата технических наук Седунов, Алексей Александрович

ОГЛАВЛЕНИЕ.

ВВЕДЕНИЕ.

1 АНАЛИЗ ЯЗЫКОВ И СРЕДСТВ РАЗРАБОТКИ.

1.1 Расширение объектно-ориентированного подхода.

1.2 Средства метаразработки.

2 СТРУКТУРА ВНУТРЕННЕГО ПРЕДСТАВЛЕНИЯ МОДЕЛЕЙ.

2.1 Основные обозначения.

2.2 Основные понятия.

2.3 Метаструктура.

2.4 Графическая нотация для описания моделей. Модель Kernel.

3 ДЕЙСТВИЯ В СТРУКТУРЕ МОДЕЛЕЙ.

3.1 Преобразования контекста.

3.2 Основные структуры механизма действий.

3.3 Семантика действий.

4 ОСОБЕННОСТИ РЕАЛИЗАЦИИ.

4.1 Архитектура LDD-фреймворка.

4.2 TBL.

4.3 Язык запросов TQ.

Введение 2012 год, диссертация по информатике, вычислительной технике и управлению, Седунов, Алексей Александрович

Актуальность средств метапрограммирования

В современной практике разработки программного обеспечения можно выделить 3 принципиальные проблемы, связанные, главным образом, с использованием языков общего назначения:

• проблема "перевода";

• проблема изменчивости;

• проблема разнородности;

Проблема "перевода" состоит в том, что предметная область задач, решаемых конкретным программным продуктом, как правило, существенно отличается от предметной области применяемого языка программирования. Данное обстоятельство является вполне естественным, поскольку язык общего назначения ориентирован на описание программы в терминах некоторой вычислительной парадигмы, а не конкретной задачи. Тем не менее, в сложных проектах "универсальность" языка программирования может отрицательно влиять на процесс разработки, в частности

• увеличивать время разработки из-за необходимости выражения предметной области задачи в терминах языка программирования;

• усложнять понимание и модификацию существующего кода в силу необходимости обратного "перевода" программного кода на языка решаемой задачи. Данная проблема может быть решена, если в процессе разработки поддерживается необходимая документация, явным образом отражающая связь программного кода с конкретной предметной областью. Однако подобная документация требует существенных затрат и на практике, как правило, имеет тенденцию к устареванию.

Проблема "перевода" также имеет отношение к предметно-ориентированным расширениям языка программирования. В современной практике разработки такие расширения обычно представлены в форме библиотек разработчика. Поскольку библиотеки создаются на универсальном языке программирования и используются в контексте этого языка (или других языков одной платформы, как в случае с Java и .NET), они описывают свою предметную область лишь косвенно, т. е. в терминах языка программирования. Это усложняет изучение библиотек разработчиками, даже если они обладают опытом в соответствующей предметной области. Кроме того, инструментальные среды, имеющиеся в распоряжении разработчиков, могут предоставить контекстные средства для предметно-ориентированной обработки только для фиксированного набора библиотек, так как поддержка новых требует разработки модулей расширения для самой инструментальной среды, что для разработчиков-пользователей библиотеки в большинстве случаев является неприемлемым. Так, на платформах Java и .NET в настоящее время существует несколько десятков языков, включая языки, специфичные для этих платформ, а также портированные версии языков, не зависимых от Java/.NET. В то же время только для нескольких из них, наиболее распространенных на практике, существует полноценная поддержка со стороны интегрированных сред разработки (причем набор модулей расширения, а также их качество и полнота реализуемой поддержки языка для различных IDE также различается). Аналогичная ситуация наблюдается с фреймворками, ориентированными на разработку Web-приложений и другими предметно-ориентированными библиотеками.

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

• проявление ограничений традиционного объектно-ориентированного подхода, используемого в большинстве современных языков программирования;

• ограниченные возможности адаптации средств разработки (включая, языки программирования) для целей проекта и, как следствие, сложность управления изменениями в предметной области ПО.

Проблема неоднородности состоит в трудности разработки программных решений при наличии неоднородной среды. Можно выделить следующие аспекты неоднородности:

1. Неоднородность предметной области. Требования к различным программным продуктам формулируются в терминах различных предметных областей, характеризуемых специфическими методами решения задач. При этом задача разработчика состоит в "переводе" и интеграции экспертных знаний для различных областей на языки разработки.

2. Неоднородность требований. Сложность разработки адаптивного и расширяемого ПО затрудняет повторное использование существующих разработок для различных проектов даже в рамках одной предметной области.

3. Неоднородность технологической базы. Данный аспект проявляется в том, что на практике сложно отделить программную систему от ее технологической базы, даже если бизнес-логика системы непосредственно не связана с конкретной технологией разработки и определяется лишь предметной областью задачи. Моделирование и документирование системы на уровне абстракции предметной области не решает проблемы, поскольку, как правило, не обеспечивает достаточно полного описания системы.

В целом можно сказать, что основной проблемой современной разработки является отсутствие контроля разработчика над используемыми им языками программирования, или, говоря шире, над инструментальными средствами в целом. Решение этой проблемы предполагает переход к открытой архитектуре языков и основанных на них средствах разработки, позволяющей разработчику модифицировать их (главным образом, за счет расширения) в соответствии с целями конкретного программного продукта. В свою очередь, для реализации этой возможности необходимы средства манипуляции внутренним представлением программ и их представлением, т. е. средства метапрограммирования, или, в более широком контексте, метаразработки. Наиболее перспективным решением представляется подход, известный как LDD (Language-Driven Development). С позиции LDD [14, 26] ключевым компонентом любого процесса разработки является набор используемых языков, каждый из которых ориентирован на решение определенного круга задач. Сами языки при этом могут быть как предметно-ориентированными, так и универсальными, опираться на конкретные технологические решение или описывать требуемый аспект системы на абстрактном уровне. Разработчик имеет в своем распоряжении средства, позволяющие создавать новые и модифицировать уже имеющиеся языки, причем эти средства должны обеспечивать максимальную возможность повторного использования существующего программного кода.

LDD позволяет при разработке программной системы использовать для каждой цели собственный язык программирования, упрощая тем самым разработку предметно-специфичных компонентов ПО. Это в значительной степени снимает проблемы неоднородности и "перевода". Кроме того, открытость языков позволяет им эволюционировать совместно с программной системой, причем контроль совместимость версий также предоставляется LDD-средствами. В сочетании с возможностью разработки на высоком уровне абстракции это позволяет решить многие проявления проблемы сложности.

Таким образом, LDD-инфраструктура предоставляет среду, способствующую решению поставленных проблем. В частности, позволяет разрабатывать устойчивые к изменениям абстракции, определять правила реализации этих абстракции на конкретной технологической базе и реализовывать специализированные инструментальные средства (редакторы, инструменты анализа, преобразования моделей и т.д.).

Цель и задачи исследования

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

1. Анализ основных решений в области языков и систем разработки, поддерживающих элементы метапрограммирования.

2. Анализ существующих и разработка новых методов развития объектно-ориентированного подхода с целью расширения возможностей повторного использования компонентов программного обеспечения.

3. Разработка формальной модели внутреннего представления программ в применении к методологии Language-Driven Development.

Объект и предмет исследования.

Объектом данного исследования являются языки и системы программирования. Предмет исследования составляют средства метапрограммирования, а также методология Language-Driven Development и объектно-ориентированной разработки программного обеспечения.

Методы исследования

При выполнении диссертационной работы использованы методы математической логики и теории множеств, элементы теории графов и формальных моделей семантики языков программирования. Для реализации программной системы использованы принципы модульного программирования и объектно-ориентированного программирования с применением паттернов проектирования.

Основные результаты, выносимые на защиту, и их научная новизна.

1.Формальная модель, описывающая структуру внутреннего представления программ, отличающаяся наличием контекстно-зависимых представлений и прототипирования, основанного на отношениях реализации и наследования и тем самым позволяющая снизить сложность описания структуры языков и программ.

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

3.Методика построения языков программирования (на примере языка TBL), отличающаяся использованием контекстно-зависимых представлений и позволяющая расширить возможности традиционного объектно-ориентированного подхода с точки зрения повторного использования программных компонентов и реализации принципа «открытости закрытости».

Теоретическая и практическая значимость работы

Практическое значение имеют научные и прикладные результаты, которые можно рекомендовать для создания новых инструментальных систем, поддерживающих разработку и расширение языков программирования. Теоретическая значимость работы состоит в развитии механизма повторного использования программных компонентов в объектно-ориентированных системах за счет использования контекстно-зависимых представлений.

Апробация работы и публикации

Основные положения работы докладывались на конференциях "Информатика. Проблемы, методология, технологии" (Воронеж, 2010), "Технологии Microsoft в теории и практике программирования" (Москва, 2010) и "ICOOOLPS: Workshop on Implementation, Compilation and Optimization of Object-Oriented Languages, Programs and Systems" (European Conference on Object-Oriented Programming, Lancaster, UK, 2011).

Основное содержание диссертационной работы изложено в 12 работах, из них 4 статьи (№№ 4, 5, 9,11) в журналах, рекомендованных ВАК РФ:

1. Седунов А. А. Гибридный объектно-ориентированный метаязык // Труды VI всероссийской научно-практической конференции «Технологии Microsoft в теории и практике программирования», Москва, 2009.

2. Седунов А. А., Тюкачев Н. А. Объектно-ориентированный язык спецификаций // Труды всероссийской научно-технической конференции «Молодые исследователи - регионам», Вологда, 2009.

3. Седунов А. А. Объектно-ориентированный метаязык // Вестник ВГУ, серия «Системный анализ и информационные технологии», 2009, №1.

4. Седунов А. А., Тюкачев Н. А. Построение формальных моделей с применением объектно-ориентированного метаязыка // Вестник ВГТУ, 2009, т. 5, №10.

5. Седунов А. А. Присоединяемые типажи в Java: расширение языка и область применения // Вестник Воронежского государственного университета, серия «Системный анализ и информационные технологии», 2010, №1.

6. Седунов А. А. Расширение функциональности классов с помощью присоединяемых типажей. // Труды X международной конференции «Информатика: проблемы, методология, технологии», Воронеж, 2010.

7. Седунов А. А. Язык запросов для внутреннего представления ВОО-программ // Труды VII всероссийской научно-практической конференции «Технологии Microsoft в теории и практике программирования», Москва, 2010.

8. Седунов А. А., Тюкачев Н. А. Расширение языка Java с помощью присоединяемых типажей // Труды всероссийской научно-технической конференции «Молодые исследователи - регионам», Вологда, 2010.

9. Седунов А. А. Формализация объектной структуры с помощью систем объектных уравнений // Вестник ВГУ, серия «Системный анализ и информационные технологии», 2010, №2.

10. Седунов А. А. Расширение функциональности классов с помощью присоединяемых типажей. // Труды XI международной конференции «Информатика: проблемы, методология, технологии», Воронеж, 2011.

11. Седунов А. А. Структура ядра метаязыка в системе LDD-программирования // Вестник ВГУ, серия «Системный анализ и информационные технологии», 2011, №1.

12. Sedunov Aleksey, Tyukachev Nikolay. An Approach to Modular Object-Oriented Programming in Language-Driven Development Framework // 6th ICOOOLPS Workshop, European Conference on Object-Oriented Programming, Lancaster, UK, 2011.

Структура и объем работы

Диссертация состоит из введения, 4 глав, заключения и списка литературы. Общий

Заключение диссертация на тему "Формальная модель контекстно-зависимых программных структур и их преобразований в применении к методологии Language-Driven Development"

Заключение

В настоящей диссертационной работе проведено исследование проблемы построения математической модели системы разработки по методологии ЬЭО и создание на ее основе прототипа программной инфраструктуры. В процессе выполнения исследования решены следующие задачи:

4. Анализ основных решений в области языков и систем разработки, поддерживающих элементы метапрограммирования.

5. Анализ существующих и разработка новых методов развития объектно-ориентированного подхода с целью расширения возможностей повторного использования компонентов программного обеспечения.

6. Разработка формальной математической модели, описывающей структуру внутреннего представления программ для ЬОО-инфраструктуры.

В диссертации получены результаты, характеризующие научную новизну в плане разработки теоретических основ создания программ средств для новых информационных технологий74

1. Формальная модель, описывающая обобщенную структуру внутреннего представления программ.

2. Формальная модель преобразований структуры программ (механизм действий.

3. Методика построения языков программирования, расширяющая возможности объектно-ориентированного подхода.

Библиография Седунов, Алексей Александрович, диссертация по теме Теоретические основы информатики

1. H. Abelson, G. J. Sussman, J. Sussman. Structure and 1.terpretation of Computer Programs (Second Edition) - The MIT Press, 1996. http://mitpress.mit.edu/sicp/full-text/book/book.html

2. Davide Ancona, Elena Zucca. Overriding Operators in a Mixin-Based Framework. // Proceedings of 9th International Symposium on Programming Languages: Implementations, Logics, and Programs PLILP'97, Southampton, UK, September 3-5, 1997.

3. Malte Appeltauer, Robert Hirschfeld, Michael Haupt, and Hidehiko Masuhara ContextJ: Context-oriented Programming with Java. // Proceedings of the JSSST Annual Conference 2009, 2D-1, Shimane University, Matsue, Shimane, Japan, September 16, 2009.

4. K. B. Bruce. Foundations of Object-Oriented Languages. Types and Semantics. The MIT Press, 2002.

5. C. Chambers. The Diesel Language Specification and Rationale, 2006 http://wvvw.cs.washington.edu/research/projects/cecil/wvvw/Release/doc-diesel-lang/diesel-spec.pdf

6. Juan Chen. Decidable Subclassing-Bounded Quantification. // Proceedings of the 2005 ACM SIGPLAN International Workshop on Types in Languages Design and Implementation TLDI'05, January 10, 2005, Long Beach, California, USA.

7. Shigeru Chiba, Muga Nishizawa. An Easy-to-Use Toolkit for Efficient Java Bytecode Translators. // Proceedings of 2nd International Conference on Generative Programming and Component Engineering (GPCE '03), LNCS 2830, pp. 364-376, Springer-Verlag, 2003.

8. Aske Simon Christensen, Christian Kirkegaard, Anders Moiler. A Runtime System for XML Transformations in Java. // Proceedings of Second International XML Database Symposium, XSym 2004, Toronto, Canada, August 29-30, 2004.

9. A. Clark, P. Sammut, J. Willans. Applied Metamodeling. A Foundation for Language Driven Development (Second Edition), 2008. http://www.ceteva.com/home/Papers/AppIied%20MetamodeIling%20%28Second %20Edition%29.pdf

10. A. Clark, P. Sammut, J. Willans. Superlanguages. Developing Languages and Applications with XMF, 2008. http://itcentre.tvu.ac.uk/~clark/Papers/Superlanguages.pdf

11. A. Clark, L. Tratt. Language Factories, 2009. http://itcentre.tvu.ac.uk/~clark/Papers/language factories.pdf

12. A. Clark, A. Evans, P. Sammut, J. Willans. Transformation Language Design. A

13. Metamodelling Foundation. LNCS 3256, 2004.149

14. J.R. Cordy, I. H. Carmichael, R. Halliday. The TXL Programming Language. Version 10.5.2007. http://www.txl.ca/docs/TXL105ProgLang.pdf

15. J.R. Cordy. "The TXL Source Transformation Language". Science of Computer Programming 61, 3 (August 2006).http://www.cs.queensu.ca/~cordy/Papers/Cordy TXL SCP.pdf

16. Andrea Corradi, Marco Servetto, Elena Zucca. DEEPFJIG. Modular composition of nested classes. // Proceedings of 2010 Workshop on Foundations of Object-Oriented Languages, FOOL '10 October 17, 2010, Reno, Nevada, USA.

17. C# Language Specification, Version 3.0. http://download.microsoft.com/downIoad/3/8/8/388e7205-bcl0-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc

18. C# Language Specification, Version 4.0 http://downIoad.microsoft.com/download/0/B/D/0BDA894F-2CCD-4C2C-B5A7-4EB1171962E5/CSharp%20Language%20Specification.doc

19. B. De Fraine. Range Parameterized Types. Use-site Variance without the Existential Questions. FTfJP'09, 2009.

20. S. Dmitriev. Language Oriented Programming. The Next Programming Paradigm. JetBrains OnBoard, 2004. http://www.onboard.jetbrains.com/isl/articles/04/10/lop/

21. Iulian Dragos, Martin Odersky. Compiling Generics Through User-Directed

22. Type Specialization // Proceedings of the 4th workshop on the Implementation,150

23. Compilation, Optimization of Object-Oriented Languages and Programming Systems ICOOOLPS'09 Genova, Italy.28. 0. Eini. DSLs in Boo. Domain-Specific Languages in .NET. Manning Publications Co., 2010. - 352 pp.

24. Michael Eisenberg, Harold Abelson. Programming in Scheme. MIT Press, 1990.

25. Raphael A. Finkel. Advanced Programming Language Design. Addison-Wesley Publishing Company, 1996.

26. Daniel P. Friedman, Mitchell Wand. Essentials of Programming Languages. -MIT Press, 2008.

27. Alessandro Garcia, Claudio Sant'Anna, Eduardo Figueiredo, Uirâ Kulesza, Carlos Lucena, and Arndt von Staa. Modularizing Design Patterns with Aspects: A Quantitative Study. // Transactions on Aspect-Oriented Software Development I, Springer, 2006.

28. P. Graham. On Lisp. Advanced Techniques for Common Lisp, 1993.

29. Jan Hidders, Jan Paredaens, Roel Vercammen, Serge Demeyer. A Light but Formal Introduction to XQuery. // Proceedings of Second International XML Database Symposium, XSym 2004, Toronto, Canada, August 29-30, 2004.

30. Javaassist Library www.javassist.org/

31. JetBrains Meta Programming System http://www.jetbrains.com/mps/

32. R. Laddad. AspectJ in Action. Enterprise AOP with Spring Applications -Manning, 2009.

33. Daan Leijen. Flexible Types: Robust type inference for first-classpolymorphism. // Proceedings of the 36th Annual ACM SIGPLAN-SIGACT151

34. Symposium on Principles of Programming Languages POPL'09, January 18-24, 2009, Savannah, Georgia, USA.

35. Karl Lieberherr. Adaptive Object-Oriented Software: The Demeter Method. -PWS Publishing Company, 1996.

36. M. Fowler. Language Workbenches. The Killer-App for Domain Specific Languages, 2005. http://martinfowler.com/articles/languageWorkbench.html

37. T. Millstein, C. Frost, J. Ryder, A. Warth. Expressive and Modular Predicate Dispatch for Java. ACM TOPLAS, Vol. 31, No. 2, Article 7, 2009.

38. T. Millstein, T. Leavens, C. Chambers. Multijava. Design Rationale, Compiler Implementation and Applications. Iowa State University, 2004. ftp://ftp.cs.iastate.edu/pub/techreports/TR04-01/TR.pdf

39. Pedro J. Molina. Introducing Model-Driven Software Development // Proceedings of the 1st Code Generation Conference, May 25 27, 2011, Cambridge, UK.

40. Benoit Montagu, Didier Remy. Modeling Abstract Types in Modules with Open Existential Types. // Proceedings of the 36th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages POPL'09, January 18-24, 2009, Savannah, Georgia, USA.

41. Miguel P. Monteiro, Joao M. Fernandes. Towards a Catalogue of Refactorings and Code Smells for AspectJ. // Transactions on Aspect-Oriented Software Development I, Springer, 2006.

42. Adriaan Moors, Frank Piessens, Martin Odersky. Generic of a Higher Kind. // Proceedings of Conference in Object-Oriented Programming Systems, Languages and Applications, OOPSLA'08, October 19-23, 2008, Nashville, Tennessee, USA.

43. Adriaan Moors, Frank Piessens, Martin Odersky. Safe Type-level Abstraction in Scala. // Proceedings of 2008 International Workshop on Foundations of Object-Oriented Languages FOOL'08 13 January, San Francisco, California, USA.

44. MOF 2.0 Core Specification. http://www.omg.Org/spec/MQF/2.0/PDF/

45. Radu Muschevici, Alex Potanin, Ewan Tempero, James Noble. Multiple Dispatch in Practice. // Proceedings of Conference in Object-Oriented Programming Systems, Languages and Applications, OOPSLA'08, October 19-23, 2008, Nashville, Tennessee, USA.

46. Benjamin C. Pierce. Types and Programming Languages. The MIT Press, 2002.-623 pp.

47. Benjamin C. Pierce. Advanced Topics in Types and Programming Languages. -The MIT Press, 2005. 589 pp.

48. Adam Richard, Ondrej Lhotak. OOMatch: Pattern Matching as Dispatch in Java. // Proceedings of 2008 Workshop on Foundations of Object-Oriented Languages, FOOL'08 Sunday, 13 January 2008 San Francisco, California.

49. Sukyoung Ryu, Changhee Park, Guy L. Steele Jr. Adding Pattern Matching to Existing Object-Oriented Languages. // Proceedings of 2010 Workshop on Foundations of Object-Oriented Languages, FOOL '10 October 17, 2010, Reno, Nevada, USA.

50. Michael L. Scott. Programming Language Pragmatics, Third Edition. Morgan Kaufmann, 1999.

51. Robert W. Sebesta. Concepts of Programming Languages. Addison-Wesley Publishing Company, 2001.

52. Ed Seidewitz: Models, Programs and Executable UML. // Proceedings of the 1st International Workshop on Combined Object-Oriented Modeling and Programming COOMP 2011, October 23, 2011, Portland, USA.

53. R. Solmi. Whole Platform, Ph.D Thesis, TR UBLCS-2005-07, University of Bologna, 2005. http://www.cs.unibo.it/pub/TR/UBLCS/2005/2005-07.pdf

54. Squeak http://www.squeak.org/

55. Standard ECMA-262. ECMAScript Language Specification (5th Edition), 2009 http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf

56. Michiaki Tatsubori, Shigeru Chiba, Marc-Olivier Killijian, and Kozo Itano. Openjava: A Class-Based Macro System for Java. // Reflection and Software Engineering, Springer, 2000.

57. The Java Language Specification (Third Edition) http://java.sun.eom/docs/books/jls/download/langspec-3.0.pdf

58. The Java Virtual Machine Specification (Second Edition),http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html154

59. The Scala Language Specification, Version 2.8, 2010 http://www.scaIa-lang.org/docu/files/ScalaReference.pdf

60. David S. Touretzky. COMMON LISP: A Gentle Introduction to Symbolic Computation. The Benjamin/Cummings Publishing Company, 1989.

61. Franklyn A. Turbak, David K. Gifford. Design Concepts in Programming Languages MIT Press, 2008.

62. UML Infrastructure, Version 2.3. http://www.0mg.0rg/spec/UML/2.3/Infrastructure/PDF/

63. UML Superstructure, Version 2.3 http://www.0mg.0rg/spec/UML/2.3/Superstructure/PDF/

64. Dimitrios Vytiniotis Geoffrey Washburn Stephanie Weirich. An Open and Shut Typecase. // Proceedings of the 2005 ACM SIGPLAN International Workshop on Types in Languages Design and Implementation TLDI'05, January 10, 2005, Long Beach, California, USA.

65. Markus Völter, Alexander Shatalin. Hands-On: Introduction to JetBrains Meta Programming System (MPS). // Proceedings of the 1st Code Generation Conference, May 25 27, 2011, Cambridge, UK.

66. Markus Völter. Type Systems for DSLs. // Proceedings of the 1st Code Generation Conference, May 25 27, 2011, Cambridge, UK.

67. Ian Welch, Robert J. Stroud. Kava A Reflective Java Based on Bytecode Rewriting. // Reflection and Software Engineering, Springer, 2000.

68. Whole Platform http://whoIe.sourceforge.net/

69. XMF http://www.ceteva.com/XMF/

70. XQuery 1.0. An XML Query Language (Second Edition). W3C Proposed Edited Recommendation 21 April, 2009. http://www.w3.org/TR/2009/PER-xquery-2009Q421/

71. XQuery Update Facility 1.0. W3C Candidate Recommendation 09 June, 2009. http://www.w3.org/TR/2009/CR-xquery-update-10-200906Q9/

72. XQuery 3.0: An XML Query Language. W3C Working Draft 14 June, 2011. http://www.w3.org/TR/xquery-30/

73. Sebastian Zarnekow, Sven Efftinge, Jan Koehnlein. Xtext: Creating Code Generators with Xtend2. // Proceedings of the 1st Code Generation Conference, May 25 27, 2011, Cambridge, UK.

74. Y. Zhang, B. Xu. A Survey of Semantic Description Frameworks for Programming Languages. ACM SIGPLAN Notices, Volume 39, Issue 3 (March 2004), pp. 14-30.

75. А. А. Седунов. Расширяемые типажи в Java. Расширение языка и область применения. Вестник ВГУ, №1, 2010.

76. А. А. Седунов, Н. А. Тюкачев. Построение формальных моделей с применением объектно-ориентированного метаязыка. Вестник ВГТУ, 2009.

77. А. А. Седунов. Гибридный объектно-ориентированный метаязык // Труды VI всероссийской научно-практической конференции студентов, аспирантов и молодых ученых «Технологии Microsoft в теории и практике программирования», Москва, 2009.

78. А. А. Седунов, Н. А. Тюкачев. Объектно-ориентированный язык спецификаций // Труды всероссийской научно-технической конференции «Молодые исследователи регионам», Вологда, 2009.

79. А. А. Седунов. Объектно-ориентированный метаязык // Вестник Воронежского государственного университета, серия «Системный анализ и информационные технологии», 2009, №1.

80. А. А. Седунов. Расширение функциональности классов с помощью присоединяемых типажей. // Труды X международной конференции «Информатика: проблемы, методология, технологии», Воронеж, 2010.

81. А. А. Седунов. Язык запросов для внутреннего представления ВОО-программ // Труды VII всероссийской научно-практической конференциистудентов, аспирантов и молодых ученых «Технологии Microsoft в теории и практике программирования», Москва, 2010.

82. А. А. Седунов., Н. А. Тюкачев. Расширение языка Java с помощью присоединяемых типажей // Труды всероссийской научно-технической конференции «Молодые исследователи регионам», Вологда, 2010.

83. А. А. Седунов. Формализация объектной структуры с помощью систем объектных уравнений // Вестник Воронежского государственного университета, серия «Системный анализ и информационные технологии», 2010, №2.

84. А. А. Седунов. Расширение функциональности классов с помощью присоединяемых типажей. // Труды XI международной конференции «Информатика: проблемы, методология, технологии», Воронеж, 2010.

85. А. А. Седунов. Структура ядра метаязыка в системе LDD-программирования. Международная конференция «Информатика: проблемы, методология, технологии» (Воронеж, 2011 г.).

86. А. А. Седунов. Математическая модель ядра системы метапрограммирования. Вестник ВГУ, №1, 2011.

87. Теренс Пратт, Марвин Зелковиц. Языки программирования: разработка и реализация, 4-е издание / Под общей редакцией А. Матросова. СПб.: Питер, 2002. - 688 е.: ил. ISBN 5-318-00189-0.