Колодий К.Н., Раннев Д.Г., Григорьев А.В.
ГОУ ВПО «Донецкий национальный технический университет» (г. Донецк)
e-mail: kirill.kolodiy@gmail.com, grigorievalvl@gmail.com
В настоящее время инструменты разработки программного обеспечения (ПО) призваны полностью или частично автоматизировать, ускорить и сократить процесс жизненного цикла программы от создания архитектуры программного обеспечения до внедрения его в продуктовую среду. Современные интегрированные средства разработки позволяют настроить окружение под конкретные задачи программиста и использовать всевозможные “расширения” для индивидуализации этих процессов.
Среды разработки программного обеспечения - это инструменты для поддержки разработки программного обеспечения. Генерация среды программирования – это процесс установки необходимых библиотек, фреймворков, компиляторов, интерпретаторов и другого ПО, а также создание «пустого» проекта с помощью специальной программы. Входными данными такого приложения являются язык программирования и тип разрабатываемого приложения. Такое приложение является генератором сред программирования.
Цель написания данной статьи заключается в описании подходов к реализации генераторов сред программирования, анализе существующих готовых решений и выявлении основных проблем при создании подобных систем.
Генератор среды - это инструмент, который принимает описание среды в качестве входных данных, обрабатывает описание и объединяет его с большой коллекцией повторно используемого кода для создания среды в качестве выходных данных. В зависимости от генератора среды описание среды может включать в себя описание синтаксиса и семантики языка (языков), которыми должна управлять среда, описание программного процесса, который должен поддерживаться средой, и описание пользовательского интерфейса.
Synthesizer Generator. Синтаксическое описание определяет внутреннее представление документов и внешнее представление документов. Внутреннее представление обычно представляет собой абстрактное синтаксическое дерево, а внешнее представление - обычно текст. С помощью Synthesizer Generator разработчики среды явно определяют внутреннее представление, внешнее представление и сопоставления между ними. С помощью этого генератора разработчик описывает язык двумя различными грамматиками: абстрактной и конкретной. Абстрактная грамматика определяет представление абстрактного синтаксического дерева и правила анализа, а конкретная грамматика определяет синтаксис и правила построения дерева для синтаксического анализа [1].
Семантические описания Synthesizer Generator написаны с использованием грамматик атрибутов. Атрибут может представлять семантическую структуру, обычно не видимую пользователю, например таблицу символов. В традиционном цикле редактирования-компиляции-отладки сгенерированные среды выполняют синтаксический и семантический анализ на этапе редактирования, обычно с использованием компилятора только для генерации кода.
Генератор Pan. Разработчик среды определяет внутреннее представление абстрактным синтаксисом, а его внешнее представление определяется конкретным синтаксисом. Pan определяет взаимосвязь между абстрактным синтаксисом и конкретным синтаксисом автоматически с помощью метода, называемого грамматическая абстракция, и генерирует функции синтаксического разбора и сбора. Фактически, среда Pan может быть сгенерирована с использованием только абстрактного синтаксиса. Семантические описания Pan написаны с использованием языка логических ограничений, который сочетает в себе логическое программирование и поддержание согласованности. Pan выполняет семантический анализ, используя унификацию, как в Prolog. Так же Pan генерирует интерфейс, распознающий синтаксис, а не интерфейс, ориентированный на синтаксис. Важным аспектом пользовательского интерфейса Pan является обработка синтаксически и семантически некорректных документов.
Генератор CENTAUR. Универсальной интегрированной средой разработки является генератор CENTAUR. Получив формальную спецификацию конкретного языка программирования, включая синтаксис и семантику, он создает среду, специфичную для языка. Эта результирующая среда включает в себя редактор структуры, интерпретатор/отладчик и другие инструменты, которые имеют графический человеко-машинный интерфейс [2].
Такая среда состоит из трех частей: компонент базы данных, который обеспечивает стандартизированное представление и доступ к формальным объектам и их постоянному хранилищу; логический механизм, который используется для выполнения формальных спецификаций; объектно-ориентированный человеко-машинный интерфейс, обеспечивающий легкий доступ к функциям системы.
Архитектура генератора среды основана на разложении на три класса функций:
Каждый структурированный объект представлен в системе в виде абстрактного синтаксического дерева, которое управляется примитивами ядра. Ядро предназначено для поддержки символьных манипуляций со структурированными документами и состоит из двух специализированных компонентов:
Эти два компонента связаны через интерфейс, который содержит два класса примитивов:
Чтобы создать интерактивную среду программирования для данного языка, необходимо предоставить спецификации для его конкретного синтаксиса, абстрактного синтаксиса и семантики.
Доступ к функциям CENTAUR осуществляется двумя способами: через прямые вызовы функций и через интерфейс человек-машина. В человекомашинном интерфейсе используются различные графические объекты: меню, предлагающие различные параметры, кнопки для управления выполнением, псевдотерминалы.
Генератор CENTAUR по сути написан на Lisp. Логический движок - Prolog. Человеко-машинный интерфейс построен на основе средства виртуальной графики Le_Lisp, которое в основном реализовано на базе XWindows.
Интегрированная среда разработки (IDE) - комплексное средство, включающее всё необходимое программисту для создания программного обеспечения. Современные IDE являются визуальными - они позволяют создавать интерфейс программы с помощью мыши в точности так, как это выглядит для пользователя. Не визуальные IDE требуют от программиста написания специального кода, отвечающего за создание пользовательского интерфейса программы. Среды разработки делятся на кроссплатформенные или зависимые от платформы. В зависимости от количества поддерживаемых языков программирования среды могут быть многозначными или однозначными.
В IDE существует обязательный набор компонентов: во-первых, это компилятор или интерпретатор, во-вторых, редактор исходного кода программ, и, в-третьих, отладчик. Иногда IDE также содержит инструменты для интеграции с системами контроля версий и различные инструменты для упрощения построения графического интерфейса пользователя. Многие современные среды разработки также включают браузер классов, инспектор объектов и диаграмму иерархии классов - для использования в объектно-ориентированной разработке программного обеспечения.
В открытую систему можно ввести новый входной язык с транслятором, не требуя изменений в системе: в интерпретирующей системе осуществляется покомандная расшифровка и выполнение инструкций входного языка; в компилирующей — подготовка результирующего модуля, который может выполняться на ЭВМ практически независимо от среды. Обобщенная схема генерации среды программирования представлена на рис. 1.
Рисунок 1 — Обобщенная схема генерации среды программирования
Для того чтобы сгенерировать среду необходимо определится с языком и типом приложения. Ниже приведены наиболее популярные типы приложений:
Выделим следующие этапы генерации среды программирования:
На рис. 2 в виде UML-диаграммы представлен алгоритм программы генерации среды программирования.
Рисунок 2 – Алгоритм программы генерации среды программирования
Eclipse. Интегрированная среда разработки на основе платформы Eclipse используются для создания программного обеспечения на различных языках программирования (более 100 языков программирования). Eclipse - это платформа для разработки любой интегрированной среды программирования и практически любого клиентского программного обеспечения [3].
Преимущества Eclipse:
Недостатки: сильно загружает оперативную память компьютера, долго запускается, имеет громоздкие конфигурации, однако, если компьютер достаточно мощный — данная проблема легко решаема.
Wing IDE. Интегрированная среда разработки Wing IDE предназначена для создания приложений не только на языке Python, но и на многих других языках программирования.
IDE предоставляет профессиональный редактор кода, работает автодополнение кода, рефакторинг, отслеживание вызовов, контекстные подсказки.
Доступен графический отладчик кода для локальной и удаленной отладки, интерфейс для контроля версий, система unit-тестирования, гибкий механизм поиска [4].
Редактор Wing ускоряет интерактивную разработку благодаря автоматическому завершению и документированию с учетом контекста, встроенному обнаружению ошибок и анализу качества кода.
Wing может эмулировать Eclipse, Visual Studio, XCode и MATLAB. Отладчик Wing IDE позволяет легко исправлять ошибки и писать новый код в интерактивном режиме.
Сегодня большинство компаний используют язык программирования Python для искусственного интеллекта и машинного обучения.
Объектно-ориентированные возможности Python позволяют легко создавать декларативные мини-языки для задач программирования.
Библиотека PyLog - это Python реализация системы Prolog. Она читает файл данных Prolog как шаблон, затем создает объекты Python для моделирования объявлений Prolog.
NetBeans IDE. Свободной интегрированной средой разработки приложений на нескольких языках программирования считается так же NetBeans IDE. Она представляет собой бесплатную интегрированную среду разработки с открытым кодом. Среда NetBeans IDE может работать на различных платформах, включая операционные системы Windows, Linux, Solaris и Mac.
Модульный характер приложения платформы NetBeans дает возможность удовлетворить сложные требования путем объединения нескольких небольших, простых модулей инкапсулированных в крупно детализированные функции приложения.
Редактор NetBeans поддерживает многие языки, обнаруживает ошибки во время редактирования, и помогает с помощью всплывающих подсказок и «умного» автодополнения кода [5].
Возможности NetBeans IDE:
Недостатки: временами в среде разработки возникают проблемы с кодировкой, долгий запуск программы.
Интегрированные среды разработки ПО достигают основных целей программной инженерии: сокращение времени написания приложений, снижение затратности на написание (разработку), повышение удобности разработки.
Следует отметить, что на смену устоявшимся паттернам приходят облачные IDE. Для создания и поддержки приложений, с помощью облачных IDE, необходим будет только браузер. Облачная IDE представляет собой веб-интегрированную платформу разработки, которая находится в облаке, где все вычислительные процессы происходят на сервере. Достоинства облачных IDE:
Ещё одной тенденцией развития интегрированных сред разработки ПО является использование в IDE инструментов статического анализа, например SonarQube. SonarQube – это платформа с открытым исходным кодом для непрерывного анализа и измерения качества кода [6]. Сама она не выполняет код, а только просматривает его. SonarQube предоставляет следующие возможности:
Перспективным направлением в создании программного обеспечения может быть Low-code-разработка – это подход, при котором приложения можно «собирать» без создания кода вручную благодаря инструментам визуального моделирования с интуитивно понятным пользовательским интерфейсом. Low-code-платформа состоит из трех компонентов:
В данной статье описаны основные этапы генерации интерактивных сред программирования: реализация графического интерфейса пользователя, которым будет предусмотрен выбор различных языков программирования, анализ синтаксиса языка, подключение различных интерпретаторов и компиляторов языков программирования. Проведен краткий обзор генераторов сред разработки ПО и современных интегрированных сред программирования, сформулированы основные проблемы, возникающие при их использовании. Рассмотрены интерфейсы для отладки программного кода, которые могут являться альтернативой генераторам сред разработки ПО.
Колодий К.Н., Раннев Д.Г., Григорьев А.В. Генераторы инструментальных сред программирования, анализ современного состояния. В статье описаны ключевые процессы разработки сред программирования. Проведен анализ существующих интегрированных сред разработки программного обеспечения, показаны проблемы использования и их возможные пути решения.
Ключевые слова: генератор сред разработки, интегрированная среда разработки, абстрактный синтаксис, конкретный синтаксис, интерпретатор, компилятор.
Kolodiy K.N., Rannev D.G., Grigoriev A.V. Generators of programming environments, analysis of the current state. This article describes the key processes for developing programming environments. The analysis of existing integrated software development environments is carried out, the problems of use and their possible solutions are shown.
Keywords: development environment generator, integrated development environment, abstract syntax, concrete syntax, interpreter, compiler.