автореферат диссертации по информатике, вычислительной технике и управлению, 05.13.11, диссертация на тему:Интегрирующие интерфейсы в кросс-системе программирования

кандидата физико-математических наук
Кузьминов, Тимофей Владимирович
город
Новосибирск
год
1994
специальность ВАК РФ
05.13.11
Автореферат по информатике, вычислительной технике и управлению на тему «Интегрирующие интерфейсы в кросс-системе программирования»

Автореферат диссертации по теме "Интегрирующие интерфейсы в кросс-системе программирования"

РГб од з

Российская академия наук Сибирское отделение Институт Систем Информатики

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

Кузьминов Тимофей Владимирович

Интегрирующие интерфейсы в кросс-системе программирования

05.13.11 — математическое и программное обеспечение вычислительных машин, комплексов, систем и сетей

Автореферат диссертации на соискание ученой степени кандидата физико-математических наук

Новосибирск 1994

Работа выполнена в Институте систем информатики Сибирского отделения Российской академии наук (ИСИ СО РАН).

Научный руководитель: И.В. Поттосин,

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

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

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

Г.Д. Чинин,

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

И.Е. Швецов,

кандидат технических наук

НИИ ММ Санкт-Петербургского университета

Защита диссертации состоится "_3_" июня. 1994 г в 14.30 н.

заседании специализированного совета К003.93.01 в Институте систег, информатики Сибирского отделения РАН по адресу:

630090, Новосибирск, пр. ак. Лаврентьева, 6.

С диссертацией можно ознакомиться в читальном зале библиотеки ВЦ СО РАН (пр. ак. Лаврентьева, 6).

Автореферат разослан . 1994 г.

Ученый секретарь

специализированного совета К003.93.01

к.ф.-м.н.

М.А.Бульонков

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

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

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

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

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

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

Для описываемых механизмов предложена реализация как путем расширения языка программирования, так и в виде библиотеки.

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

Практическая ценность работы подтверждается использованием предложенных принципов при разработке штатного образца кросс-системы программирования для встроенных ЭВМ. Автором диссертации в рамка> этой системы разработаны как отдельные составные части, так и общи! принципы взаимодействия компонентов и процессов.

Апробация работы. Результаты работы докладывались на междуна родной конференции молодых ученых в Самарканде в 1990 году, на между народном конгрессе СБАМ'ЭЗ в Санкт-Петербурге, на внутренних семинарах ИСИ СО РАН. По теме диссертации опубликовано 7 научных работ, не считая программной документации по разработанным средствам.

Структура и объем работы. Диссертация состоит из введения, 6 глав, заключения и списка литературы из 44 наименований, 3 рисунков Общий объем работы — 116 страниц.

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

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

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

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

• по платформе;

• по пользовательскому интерфейсу;

• по данным;

• по управлению;

• по процессу разработки.

Рассматриваются принципы интеграции компонентов в системах программирования для ПК, в проекте Arcadia, выполнявшемся в ряде американских университетов при поддержке правительства США, в стандарте РСТЕ, разработанном в рамках проекта ESPRIT, в системах Оберон и Mithril. На основе анализа этих систем делается вывод о необходимости поддержки в интегрированной системе набора выполняющихся параллельно или квазипараллельно процессов, имеющих доступ к общему пространству объектов.

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

Под руководством и при участии автора диссертации для проекте Сократ разработаны входной блок транслятора и интегрирующая оболочка Kauri, а также интерфейсы этих компонентов.

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

• Необходимость динамического подключения компонентов системы.

• Динамическая централизованная настройка расширяемого набора параметров системы,

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

• Доопределение действий и задание их параметров с использованием командного языка.

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

та объектом производного класса. Помимо этого, предлагаются следующие методы:

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

• Обеспечивается преобразование объектов к текстовому виду и обратно. Тем самым все объекты системы становятся сохраняемыми и перемещаемыми.

• Программные сущности сохраняют текстовые имена во время исполнения — обеспечивается динамическое именование. При этом контекст имен может быть глобальным во всей системе или локальным в пределах компонента, модуля или структуры данных.

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

CLASS OF С

Значением такого типа может быть любой подкласс класса С. Для таких типов определяются правила совместимости и семантика операций, ь том числе проверки принадлежности (is), контролируемого приведения (: :) и создания объекта (NEW).

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

Языковая сущность имеет динамическое имя в контексте некоторое другой квалифицирующей сущности (поиск в глобальном контексте — ча стный случай, поскольку предопределена глобальная группа). Набор и син таксис имен, определенных в контексте некоторой сущности, зависит o"i класса этой сущности.

Классы квалифицированных сущностей задаются во всех операциях динамического именования и определяют следующие методы:

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

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

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

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

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

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

Описывается реализация объектно-ориентированных механизмов включая описанные выше новые средства, на языке Модула-2 без привлечения объектно-ориентированных расширений. При этом для каждого класса заводится запись — дескриптор этого класса. В начало объекта помещается указатель на дескриптор. Как объекты, так и дескрипторы производных классов содержат в начале соответствующие структуры базовых классов. Если глубина наследования больше 1, объекты всех базовых классов объединяются в вариантную запись. Нотация при таком способе реализации получилась несколько громоздкой, а контроль типов был ослаблен. Зато не возникло проблем с доступом к дескрипторам классов.

Дополнительная гибкость, полученная за счет "ручного" моделирования объектной ориентированности, позволила легко реализовать операции над классами и общее для нескольких задач пространство объектов. Реализация таких средств на "настоящем" объектно-ориентированном языке, например, С++, достаточно трудна.

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

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

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

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

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

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

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

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

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

Глава 6 посвящена особенностям динамической настройки входного блока транслятора МУ с языка Модула-2, а также механизмам взаимодействия транслятора с другими частями системы.

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

• набор и разрядность арифметических типов;

• правила вычисления константных выражений (точность, функции от типов, изменение типа);

• определение размеров объектов;

• системно-зависимые средства и машинно-зависимые атрибуты типог. данных.

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

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

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

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

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

ОСНОВНЫЕ РЕЗУЛЬТАТЫ РАБОТЫ

1. Обоснована необходимость средств повышения динамики в статической среде исполнения — наличия общего пространства объектов, динамического именования, употребления классов в качестве сущностей пер вого сорта и систематического применения текстового представленш объектов для создания их сохраняемых образов.

2. Разработан способ моделирования объектно-ориентированных средств ( помощью традиционного языка программирования. Этот способ являет ся более гибким, чем использование стандартных средств объектно ориентированных языков.

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

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

5. Исследована применимость концепции структурного конструирования для интеграции средств в системе программирования.

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

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

соб использован при реализации настраиваемого на архитектуру целевой машины транслятора.

8. Разработаны структура набора и способ задания прагм транслятор,! пригодные для управления работой различных языковых процессоров.

Разработанные принципы и методы использованы в практической

работе, в частности, при создании интегрированной системы программирования в рамках проекта Сократ:

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

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

3. Автором разработан настраиваемый на архитектуру целевой машины входной блок транслятора и функциональный интерфейс этого блока с различными языковыми процессорами.

4. Разработан структурный редактор, явившийся ядром прототипа си стемы структурного конструирования.

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

1. Кузьминов Т.В. Языково-настраиваемый структурный редактор для ЭВМ Кронос. - Новосибирск, 1990. - 29 с. - (Препр. / ИСИ СО АН СССР; N 1).

2. Болтаев Т.Е., Кузьминов ТВ., Поттосин ИВ. О структурном конструировании и инструментах его поддержки // Среда программирования - методы и инструменты. - Новосибирск, ИСИ СО РАН, 1992. -с. 22-37.

3. Кузьминов Т.В. Применение динамического именования в статической среде // Конструирование и оптимизация программ / ИСИ СО РАН. - Новосибирск, 1992. - с. 61-67.

4. Кузьминов Т.В. Программные интерфейсы в трансляторе Модула-Y // Среда программирования - методы и инструменты. - Новосибирск, ИСИ СО РАН, 1992. - с. 61-67.

5. The Structured Constructing as a Discipline of Safe Programming and Instruments Supporting It / Aniskov M.I., Boltayev T.B., Kochetov D.V. Kuzminov Т. V., Pottosin I V. / / International Congress on Computer Systems and Applied Mathematics CSAM'93, St.Petersburg, July 19-23, 1993. - p. 170.

6. Sokrat: an Environment for Safe and Efficient Programming / Kasyanov V.N., Kuzminov T.V., Pokrovsky SB. et at. // Internationa' Congress on Computer Systems and Applied Mathematics CSAM'93. St.Petersburg, July 19-23, 1993. - p. 177.

7. Kuzminov Т. V. Some Features of a Compiler Front-end in a Software Development Cross-System / / International Congress on Computer Systems and Applied Mathematics CSAM'93, St.Petersburg, July 19-23 1993. - p. 181.