Обзоры
Scripting & Automation, или Как разрабатывать приспособляемое ПО
0

Scripting & Automation, или Как разрабатывать приспособляемое ПО


Выживают не те виды, которые сильнее или умнее остальных, а те, что умеют наилучшим
образом приспосабливаться к изменениям.
Чарльз Дарвин


Каждый разработчик программного обеспечения хочет, чтобы его программами заинтересовалось
как можно большее число пользователей. Поэтому, помимо реализации основных функций,
создатели ПО стараются сделать так, чтобы сами пользователи при желании могли
адаптировать уже готовую программу в соответствии со своими вкусами, требованиями
и спецификой решаемых задач. Сегодня практически все популярные приложения имеют
гибкие возможности настройки, которые позволяют изменить как внешний вид программы,
так и некоторые правила ее поведения. Достаточно нажать в определенном окне пару
кнопок, и программа станет выглядеть и вести себя (в каких-то аспектах) несколько
иначе. Число конфигурируемых параметров может быть весьма значительным — так,
например, в последней версии Microsoft Word 2002 насчитывается около 30 страниц
с различного рода настройками, причем многие из них содержат по 20 и более элементов.

Однако какую бы тонкую настройку ни предусмотрели разработчики того или иного
приложения, она все равно будет ограничена изменением лишь заведомо определенных
свойств, задуманных и реализованных изначально. А что делать, если со временем
или даже сразу после приобретения пользователю понадобится функция, которая не
была заложена в ПО с самого начала? Изящным и универсальным решением такой проблемы,
с успехом применяемым во многих современных программных продуктах, является простой
встроенный интерпретируемый язык (scripting language, язык сценариев). Если пользователь
захочет реализовать необходимую ему дополнительную функцию или автоматизировать
некоторую часто выполняемую им операцию, он может написать на этом языке небольшую
программу-сценарий (script) и после обращаться к ней точно так же, как и ко всем
остальным базовым возможностям приложения: через пункт меню, кнопку панели инструментов
или выбранную комбинацию клавиш. Такой подход используется, например, в программах
пакета Microsoft Office (Visual Basic), Sun StarOffice (StarBASIC), Adobe PageMaker
(PMScript), ESRI ArcView GIS (Avenue) и многих других.

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

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

Выбор технологий Microsoft

Сегодня довольно большое число разнообразных приложений обладает встроенными
возможностями написания пользовательских сценариев. Но для разработчика, желающего
реализовать данную функциональность в собственной программе, выбор, по сути, невелик.
В этой статье мы остановимся на технологиях, предлагаемых компанией Microsoft,
— Active Scripting, VBA (Visual Basic for Applications) и VSA (Visual Studio
for Applications), поскольку они, на наш взгляд, являются наиболее адекватным
решением данной задачи. Естественно, ярые противники софтверного гиганта могут
обойтись и без его разработок, однако потеряют они наверняка больше, чем приобретут.
Чтобы пояснить нашу точку зрения, приведем три наиболее распространенных альтернативных
подхода.

Самый очевидный и популярный — реализация поддержки каких-нибудь дополнительных
модулей (plug-ins или add-ons). Однако даже если обеспечить для них доступ ко
всем "внутренностям" приложения, сами эти модули необходимо будет создавать
на некотором языке программирования вроде C++. Разработать такую программу сможет
лишь достаточно квалифицированный программист, имеющий к тому же необходимый компилятор.
Для большинства пользователей это несоизмеримо более сложно, чем создать сценарий,
скажем, на Basic-подобном языке, не задумываясь ни о каких компиляторах.

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

Пожалуй, единственным конкурирующим решением, сравнимым по универсальности и удобству
с предлагаемыми Microsoft, является разработка всей программы на Java и использование
для составления пользовательских сценариев одного из таких языков, как JPython,
BeanShell, Simkin,
Slate и им подобных. Интерпретаторы
этих языков чаще всего свободно распространяются с исходным кодом и позволяют
обращаться к Java-классам вашей программы, вследствие чего их интеграция в приложение
обычно не составляет большого труда. Следует особо отметить, что данный подход
является наиболее предпочтительным при разработке кросс-платформенных (Windows/Unix/
Linux) приложений. Если же создаваемое ПО ориентировано исключительно на Windows,
по нашему мнению, использование Java будет нецелесообразным.

Характеристики "скриптовых"
технологий Microsoft
Характеристика Active Scripting VBA VSA
Базовая технология COM, OLE Automation COM, OLE Automation .NET Framework
Поддерживаемые языки VBScript, JScript, Perl, Python, Ruby,
Haskell и др.
Только Visual Basic В первой версии: Run Time — VB.NET и JScript.NET,
IDE — только VB.NET
Наличие IDE Нет Да Да
Удобство интеграции Просто при использовании Script Control,
относительно сложно при непосредственной работе с COM-интерфейсами
Просто Просто
Размер в памяти Небольшой Большой Небольшой при выпол- нении кода, большой
при активизации IDE
Производительность Высокая Относительно низкая Высокая
Способ выполнения сценария Интерпретация промежуточного кода Интерпретация промежуточного кода Двухэтапная компиляция и выполнение машинных
команд
Возможность хранения сценария в транслированном
виде
Нет Есть Есть
Управляемость работой сценария Низкая при использовании Script Control,
высокая при непосредственной работе с COM-интерфейсами
Высокая Высокая
Предназначение Простые настольные приложения, серверное
ПО
Сложные настольные приложения Web-приложения
Стоимость Бесплатная Платная Бесплатная без IDE, платная с IDE

Active Scripting

Прежде чем приступить к рассмотрению Active Scripting и VBA, необходимо
отметить, что обе эти технологии основываются на модели COM и спецификации OLE
Automation. С одной стороны, сами они представлены в виде COM-модулей и описаний
COM-интерфейсов, которые необходимо реализовать программе. С другой — пользовательские
сценарии, выполняющиеся в рамках программы, могут взаимодействовать только с COM-объектами,
поддерживающими OLE Automation. Таким образом, разработчик вынужден представить
все открытые для "скриптинга" функциональные возможности в виде COM-объектов,
реализующих интерфейс IDispatch (или IDispatchEx).

Для кого-то это требование может показаться неким ограничением — почему, например,
не сделать эти вещи в виде обычных DLL? На подобный вопрос, конечно, лучше всего
могла бы ответить сама компания Microsoft. Мы лишь отметим одно очень важное достоинство,
которое появится у вашей программы, построенной на основе COM и OLE Automation,
— доступ к реализованным в ней функциям будет открыт не только для внутренних
сценариев, но и для внешних приложений, т. е. ее "пользователем" может
стать не только человек, но и любая другая программа.

Active Scripting — это, собственно, просто набор спецификаций-соглашений, определяющих
правила взаимодействия Script Engine — машины, исполняющей сценарий, и Script
Host — программы, в рамках которой эта машина функционирует. От конкретного "скриптового"
языка эта спецификация не зависит. Таким образом, если ваша программа умеет работать
с Active Script Engine, то внутри нее сможет выполняться сценарий на любом языке,
для которого существует соответствующая машина. Сейчас список языков, использующихся
с Active Scripting, довольно внушителен. Microsoft поддерживает VBScript (Visual
Basic Scripting Edition) — упрощенную версию Visual Basic — и JScript — реализацию
стандарта ECMAScript, построенного на базе JavaScript от Netscape. Существует
несколько разработок для языка Perl, из которых наиболее известной является ActivePerl
компании ActiveState.
Доступны также Python, Haskell,
Ruby,
ведутся работы над реализацией поддержки Active Scripting для Tcl/Tk. Таким образом,
данной технологией охвачены практически все наиболее популярные "скриптовые"
языки.

Active Scripting — свободно распространяемая технология, вся необходимая документация
и компоненты, включая интерпретаторы языков VBScript и JScript, доступны на сайте
Microsoft. Причем
если вам нужно встроить возможности "скриптинга" в разрабатываемую программу
"по-быстрому", то для этого есть готовый Microsoft Script Control, так
что вся работа, например на Visual Basic, делается за считанные минуты. Если же
вас интересует полный контроль за выполнением сценариев и доступ ко всем возможностям
технологии, то потрудиться придется значительно больше, поскольку необходимо будет
реализовать ряд непростых COM-интерфейсов. Документация весьма лаконичная, так
что некоторые нюансы можно узнать только экспериментальным путем. Правда, для
C/C++ есть вспомогательные заголовочные (.h) файлы и несколько примеров. Чтобы
оценить, какого результата можно достичь, достаточно посмотреть, как Active Scripting
работает в собственных продуктах Microsoft:

  • в Active Server Pages сценарии выполняются в рамках WWW-сервера;
  • в последних версиях Internet Explorer технология Active Scripting
    применяется для представления пользователю интерактивных HTML-страниц;
  • Windows Script Host обеспечивает "скриптинг" на уровне
    ОС Windows.

Все бы хорошо, но Active Scripting позволяет лишь исполнять готовые сценарии,
но не создавать их. Это ограничение не так существенно при разработке серверного
ПО, обслуживанием которого будет заниматься квалифицированный администратор или
программист. При создании же приложения для массового использования желательно
предоставить пользователю удобную среду для редактирования и отладки сценариев
— с подсветкой синтаксиса, точками прерываний, просмотром значений переменных,
стека вызовов и т. п. Таких средств в Active Scripting нет. А учитывая, что Microsoft
не предоставляет по этому вопросу практически никакой документации, до сих пор
никому не удалось оснастить свое ПО полноценной интегрированной средой разработки
для Active Scripting. Такое, на первый взгляд странное, нежелание Microsoft заполнить
это "белое пятно", с нашей точки зрения, объясняется наличием у Microsoft
другой "скриптовой" технологии — VBA.

VBA (Visual Basic for Applications)



Интегрированная среда разработки
VBA

Visual Basic for Applications — это комплексная
технология для тех, кто хочет добавить серьезные возможности "скриптинга"
в свое приложение настольного класса. На сегодняшний день более 250 компаний выпускают
ПО, включающее поддержку VBA. Примерами таких приложений являются программы Microsoft
Office, CorelDRAW и др.

Чтобы познакомиться с технологией VBA и встроить ее в разрабатываемое приложение,
можно на сайте Microsoft
заказать последнюю версию пакета VBA SDK. Распространяется это ПО в виде коробки
с компакт-диском и печатной документацией и само по себе ничего не стоит, хотя
придется заплатить за почтовые услуги по его доставке. Для жителей Украины эта
сумма составит $16,95. Однако чтобы получить возможность продавать свою программу
со встроенным VBA, необходимо заключить специальное соглашение, предусматривающее
лицензионные отчисления. Всеми формальностями занимается компания Summit
Software
— уполномоченный партнер Microsoft. Сугубо индивидуально для каждого
случая она определяет размер авторских отчислений. Эта информация держится обеими
сторонами в секрете, поэтому назвать даже ориентировочную цифру не представляется
возможным.

С технической стороны VBA во многом аналогична технологии Active Scripting, но,
помимо собственно интерпретатора, она включает также полноценную оболочку для
создания, редактирования и отладки пользовательских сценариев (макросов). Однако,
в отличие от Active Scripting, VBA ограничена только одним языком — Visual Basic.
Другим существенным моментом является то, что среда разработки и собственно интерпретатор
неотделимы друг от друга. Таким образом, даже при выполнении простейшего макроса
в адресное пространство программы загружается внушительных размеров модуль, что
требует наличия свободной памяти и происходит сравнительно медленно. Впрочем,
поскольку VBA предназначена для программ, с которыми работает только один пользователь,
ее относительную тяжеловесность и медлительность нельзя отнести к серьезным недостаткам.
Тем более что "скриптовыми" возможностями оснащаются, как правило, достаточно
мощные продукты, которые и сами по себе являются довольно громоздкими.

Справедливости ради нужно сказать, что VBA — это больше, чем просто технология встроенных сценариев. Она позволяет расширить не только функциональные возможности программы, но и ее пользовательский интерфейс. В состав VBA входит специальный редактор, в котором можно визуально создавать пользовательские формы (user forms) — диалоговые окна со стандартными элементами управления (кнопки, поля ввода и др.). Эти формы можно вызывать из макросов и таким образом, например, запрашивать у пользователя ввод дополнительной информации, что избавит от необходимости каждый раз редактировать исходный текст. В некоторых случаях средствами VBA создаются практически полноценные приложения, которые выполняются "в среде" родительской программы.

VSA (Visual Studio for Applications)



Интегрированная среда разработки
VSA

Active Scripting и VBA — это технологии
сегодняшнего дня. А что предлагает Microsoft для платформы .NET, выпуск которой
ожидается уже в конце года? Дело в том, что для этой архитектуры технологии COM
и OLE Automation — "не родные". Модули .NET-приложений представляют
собой так называемые "сборки" (assembly), которые содержат не команды
физического процессора (скажем, x86), а абстрактный код виртуальной машины Common
Language Runtime. Существует программная прослойка, обеспечивающая возможность
работы со сборками как с обычными COM-объектами, но ее использование негативно
сказывается на производительности. Поэтому для .NET компанией Microsoft разрабатывается
другая технология "скриптинга" — Visual Studio for Applications. В
настоящее время VSA существует только в бета-версии, так что до выхода окончательного
варианта в ней еще произойдут некоторые изменения, однако основные характеристики
известны уже сейчас.

VSA — одна из ключевых технологий .NET, она создана для того, чтобы облегчить
разработку гибких Web-приложений, которые будут легко адаптироваться к изменяющимся
требованиям пользователей. Такой акцент именно на Web-программировании вполне
закономерен — в мире .NET приложению более естественно иметь именно Web-интерфейс,
а не привычный сегодня GUI. Причем Web-интерфейсом будет обладать не только ПО,
рассчитанное на конечного пользователя, но и службы, предназначенные для использования
другими программами (Web-сервисы). Интеграция с VSA позволит и тем и другим стать
более приспособляемыми к потребностям конкретного клиента.

Создавая VSA, Microsoft по сути не изобретала ничего принципиально нового, а постаралась просто объединить все лучшее, что было реализовано в Active Scripting и VBA. Поэтому в новой технологии эффективно сочетаются компактное производительное ядро VSA Run Time, отвечающее за исполнение сценариев, и мощная удобная среда разработки VSA Design Time, позволяющая редактировать и отлаживать исходный код.

Ядро VSA Run Time, иначе называемое Script for .NET Framework, является преемником Active Scripting. Оно так же не зависит от языка программирования (правда, в первой версии будут доступны только JScript

.NET и VB.NET) и оптимизировано для использования в системах, где требуется высокая производительность и эффективная работа с памятью. Использовать Script for .NET Framework в собственной программе можно бесплатно.

VSA Design Time, или VSA IDE, является просто усеченной версией Visual Studio.NET.
Выполняя перенос своих "скриптовых" технологий на платформу .NET, Microsoft
провела существенную унификацию. Вместо VBScript и VBA (фактически — специализированных
версий Visual Basic) теперь будет применяться полноценный Visual Basic.NET, а
вместо всех IDE, использовавшихся в VBA и Visual Studio, — Visual Studio.NET,
которая стала полностью языконезависимой. Включение в состав своей программы VSA
IDE подлежит лицензированию через компанию Summit Soft и, очевидно, требует оплаты.
Размер отчислений, как и в случае с VBA, определяется в индивидуальном порядке.
Однако, в отличие от VBA, VSA IDE представляет собой отдельный компонент, который
может работать даже на другой машине. Таким образом, можно установить несколько
копий программы, использующей VSA Run Time (для этого отчислений платить не нужно),
и только одну копию VSA IDE для администрирования любой из машин в локальной сети.

Интегрировать VSA в свое Web-приложение довольно просто. Для этого с сайта Microsoft
нужно загрузить
VSA SDK beta 2
или более позднюю версию (когда она появится) со всей документацией
и примерами. Примечательно то, что если для использования Active Scripting или
VBA программа должна обязательно поддерживать COM и OLE Automation, то VSA встраивается
в любое .NET-приложение без его переделки.

Стоит немного остановиться на изменениях в способе выполнения кода. В Active Scripting
и VBA используются интерпретаторы — сценарий вначале разбирается на синтаксические
конструкции, а затем выполняется виртуальной машиной — Script Engine. На платформе
.NET исходный код компилируется во внутреннее машинонезависимое представление
и в таком виде хранится. Уже в процессе выполнения происходит второй этап компиляции
— из внутреннего представления в машинный код установленного в системе процессора.
После этого программа запускается обычным образом. Как видите, в .NET интерпретация
отсутствует, что позволяет повысить производительность.

Заключение

Конечно, никакой статьи или даже книги недостаточно для того, чтобы показать
все нюансы описанных технологий. Реальная картина может сложиться только в процессе
непосредственной работы с ними. Они доступны, просты в использовании и открывают
перед разработчиками большие возможности. Однако, как и все творения рук человеческих,
имеют свои недостатки и слабые стороны. Безусловно, далеко не все современные
программы выиграли бы от встроенных в них "скриптовых" возможностей.
Это осложняет разработку, может вносить дополнительные ошибки и потенциально делает
систему более уязвимой для злоумышленника. Тем не менее ввиду наметившихся сегодня
тенденций ко все большей персонализации Web, переводу значительной части ПО в
режим арендного использования через механизм ASP (Application Service Provider)
на первый план выйдут те программные продукты, которые в максимально сжатые сроки
"научатся" приспосабливаться к новым требованиям и индивидуальным запросам
каждого потребителя. По нашему мнению, именно "скриптинг" — залог этого
преобразования, а значит, и вашей готовности к завтрашнему дню.


Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: