научная статья по теме ПОДХОД К СОЗДАНИЮ СРЕД РАЗРАБОТКИ ДЛЯ ШИРОКОГО КЛАССА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ Математика

Текст научной статьи на тему «ПОДХОД К СОЗДАНИЮ СРЕД РАЗРАБОТКИ ДЛЯ ШИРОКОГО КЛАССА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ»

ПРОГРАММИРОВАНИЕ, 2008, № 4, с. 54-71

- СРЕДСТВА РАЗРАБОТКИ ПРОГРАММ -

УДК 681.3.06

ПОДХОД К СОЗДАНИЮ СРЕД РАЗРАБОТКИ ДЛЯ ШИРОКОГО КЛАССА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

© 2008 г. С. В. Гоманюк

Институт системного программирования РАН 109004 Москва, ул. Б. Коммунистическая, 25 E-mail: sergg@ispras.ru Поступила в редакцию 20.09.2007 г.

Создание среды разработки для нового языка программирования - нетривиальная и ресурсоемкая задача. Наличие таких универсальных интегрирующих платформ, как Eclipse, NetBeans, MS Visual Studio и др., позволяет частично упростить ее решение. В статье проводится сравнительный анализ подходов к созданию среды разработки на базе универсальной интегрирующей платформы и предлагается авторский подход, устраняющий недостатки и сохраняющий достоинства существующих подходов.

1. ВВЕДЕНИЕ

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

Интегрированные среды разработки (Integrated Development Environment или IDE) прошли длинный эволюционный путь от простого редактора с возможностями сборки и запуска программы до мощного инструмента, функциональность которого отражает современные требования к процессу разработки программного обеспечения (ПО). Сложность конкурентоспособной IDE превращает создание продукта такого класса в масштабную и ресурсоемкую задачу. Данный факт определил естественный шаг в дальнейшей эволюции сред разработки, а именно -выделение в некоторых из них базового слоя, носящего название универсальной интегрирующей платформы. Наличие такой платформы

позволяет конструировать IDE, используя так называемые модули расширения (plug-ins или add-ins).

В качестве наиболее известных и предоставляющих богатые возможности сред можно выделить систему разработки MS Visual Studio [1] и универсальные интегрирующие платформы Eclipse [2, 3] и Netbeans [4]. Первая дает возможность создавать модули расширения, используя технологии СОМ и .NET, для остальных двух языком интеграции является Java.

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

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

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

2. ФУНКЦИОНАЛЬНЫЕ ВОЗМОЖНОСТИ СРЕД РАЗРАБОТКИ

Набор функциональных возможностей сред разработки достаточно широк и может варьироваться от продукта к продукту. В то же время, в этих наборах можно выделить общий базис, свойственный широкому кругу IDE, например, Eclipse, MS Visual Studio, Netbeans, IntelliJ IDEA и др.

2.1. Сборка проекта (build)

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

2.2. Запуск и отладка исполнимых артефактов проекта (execute и debug)

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

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

2.3. Подсветка редактируемого кода (highlighting)

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

2.4. Форматирование редактируемого кода (indentation и formatting)

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

именования элементов программы, расстановки отступов (indentation) и переносов длинных строк, форматирования конструкций языка (formatting) и т.д. Хотя разные программисты могут быть приверженцами разных стилей, все чаще тот или иной способ форматирования принимается в качестве корпоративного стандарта [5, 6]. Современные IDE помогают разработчику придерживаться выбранного стиля, автоматически вставляя отступы во время написания кода или осуществляя форматирование выбранного участка программы. Немаловажным является и набор мелких функциональных возможностей, например, таких, как автоматическое закрытие блоков программы или расстановка закрывающих скобок, комментирование или дек-омментирование программного кода и т.п.

2.5. Структурное представление программного кода (outline и folding)

Чтобы разработчик "не заблудился" в создаваемом коде, среда разработки предоставляет различные функции навигации, как по редактируемому файлу, так и по всему проекту. Достаточно давно программа в IDE стала визуализироваться в виде иерархического дерева, в узлах которого находятся различные ее элементы (это представление также называется outline). Например, классический способ визуализации Лауа-файла - это иерархия, первый уровень которой включает: пакет; узел, содержащий набор import-директив; и классы, определенные в файле. Каждый класс далее раскрывается в набор полей, конструкторов, методов и т.д. Помимо того, что такое представление позволяет наглядно структурировать объемный программный код, у разработчика имеется возможность переходить с выбранного элемента дерева на соответствующее место в программе.

Еще один способ структуризации кода в редакторе заключается в блочном скрытии частей программы (такая функциональность также называется folding). Свертывание и представление в виде одной строки комментариев, большого набора импортов в Java или include-директив в С, скрытие тел методов - все это позволяет воспринимать код более наглядно.

2.6. Поиск элементов программного

кода в проекте (search)

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

2.7. Контекстное автопродолжение редактируемого кода (auto completion)

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

2.8. Создание и модиф

Для дальнейшего прочтения статьи необходимо приобрести полный текст. Статьи высылаются в формате PDF на указанную при оплате почту. Время доставки составляет менее 10 минут. Стоимость одной статьи — 150 рублей.

Показать целиком