Скриптинг в Delphi-приложениях
Различных библиотек, позволяющих добавить поддержку скриптов в разрабатываемое вами приложение, великое множество. Особенно если вы разрабатываете своё приложение под Windows и на Delphi. Чем же FastScript может заслужить внимание разработчика, выбирающего, какой библиотекой для внедрения скриптинга в приложение воспользоваться?
FastScript от FastReports
Если вам близка тема программирования на Delphi, то вы наверняка слышали о российской компании FastReports, разрабатывающей одноименный генератор отчётов. Генератор, что и говорить, качественный и весьма популярный в самых широких кругах Delphi-программистов. Можно было бы ожидать, что и библиотека FastScript, разработанная той же самой компанией, окажется не менее качественной и функциональной, чем её флагманский программный продукт. Что ж, давайте вместе посмотрим на то, что именно может предложить FastScript разработчику, и решить, насколько реальность соответствует ожиданиям.
Для начала, конечно, стоит рассказать о том, где можно взять пробную версию этой библиотеки, чтобы самостоятельно ознакомиться с ней, а не верить на слово тому, что я о ней вам расскажу. Найти FastScript, конечно, же, можно на официальном сайте компании-производителя, а если точнее, то по следующему адресу: fast-report.com/ru/products/fast-script.html. Размер "триалки" совсем небольшой, и есть версии практически для всех Delphi и C++ Builder (исключая, разве что, самую новую - RAD Studio 2010). Купить же библиотеку можно примерно за 1,2К российских рублей.
Что предлагает нам FastScript?
Итак, давайте посмотрим на список возможностей, которые компания FastReports предлагает за эти деньги.
Первое, что наверняка будет интересно любому, кто желает встроить в своё приложение поддержку скриптов, - это, конечно, на каком языке эти самые скрипты будет писать конечный пользователь. Вопрос, надо сказать, далеко не праздный, потому что, в зависимости от того, на какую аудиторию нацелена программа, наиболее предпочтительный скриптовый язык может быть разным. Конечно, если мы говорим о Windows-приложениях, понятно, что здесь наверняка самым удачным можно считать Visual Basic-подобный скрипт, с которым пользователи знакомы по Microsoft Office, но, опять-таки, есть нюансы. Так вот, что касается FastScript, эта библиотека поддерживает целых четыре скриптовых языка: PascalScript, C++Script, JScript и BasicScript. Несколько необычно смотрится в этом списке, на мой взгляд, скриптовый язык, берущий своё начало от C++ (ну вот просто как-то непривычно думать, что этот язык можно использовать как базу для скриптинга), хотя наверняка найдутся и такие приложения, где скрипт, написанный на C++-подобном языке, будет смотреться даже более органично, чем скрипт на достаточно широко распространённом JScript.
Кстати говоря, можно расширять список поддерживаемых языков и своими, и для этого не нужно "ковыряться" в недрах программного кода библиотеки. С помощью XML'ей, содержащих описание языков, можно добавлять свои процедурные диалекты. Для этого, конечно, нужно будет разобраться с форматом XML-файлов, используемых библиотекой, но, думаю, это будет не так сложно, как разбираться с её кодом на Delphi.
Здесь нужно упомянуть ещё один момент: FastScript никаким боком не взаимодействует с Windows Script Host, что как бы потенциально снижает количество возможных проблем, связанных с совместимостью разрабатываемого вами приложения с разными версиями Windows. Есть и ещё один момент, связанный с программированием на Borland Kylix или Lazarus под Linux (вполне возможно, что вам потребуется портировать приложение под эту систему, особенно если вы пишете его под заказ). Как справедливо написано на сайте компании FastReports, "FastScript не использует Microsoft Scripting Host, а потому может использоваться как в Windows, так и в Linux". Но даже если и не программировать под Linux (а программировать под него на Kylix - это, простите, в некотором роде извращение), отсутствие зависимости от WSH, думаю, вряд ли можно записать в недостатки рассматриваемой библиотеки.
Ещё один приятный момент заключается в том, что размер библиотеки, отражающийся на результирующем EXE-файле, совсем невелик (порядка 100-150 Кб), что позволяет применять её даже в тех программах, где всё ещё критично количество потребляемой оперативной памяти. Конечно, можно сказать, что это не такое уж и большое преимущество для сегодняшних планок "оперативы" и сегодняшних многотерабайтных винчестеров, особенно если посмотреть на требования, предъявляемые к компьютерам Windows Vista и Windows 7 (да и современными дистрибутивами Linux, если вспомнить о Kylix и Lazarus, по большому счёту, тоже). Но всё-таки для резидентно запущенных программ и сервисов малый размер всё ещё предпочтителен.
Весьма интересной представляется также возможность создания и выполнения многоязычных скриптов, реализованная разработчиками FastScript. С одной стороны, как бы и не сильно часто нужно, а с другой - отличная реализация идеи повторного использования кода. Хотя применительно к скриптам для каких-то пользовательских приложений сама фраза "повторное использование кода" кажется несколько смешной, но, всё равно, мало ли что в этой жизни бывает.
Помимо, собственно, выполнения скриптов, вам предлагают также текстовый редактор с поддержкой подсветки синтаксиса и закладками. Конечно, если воспользоваться SynEdit'ом, то можно сделать и более удобный для пользователя редактор кода, но там придётся "ручками" вбивать в него все языковые особенности каждого из скриптовых диалектов, поддерживаемых библиотекой FastScript, так что, думаю, разумнее будет использовать тот редактор, который входит в состав библиотеки.
Подробнее о языковых возможностях
(и невозможностях)
Хотя выше уже достаточно подробно говорилось о том, какие скрипты поддерживает FastScript, думаю, вам всё-таки интересно, что из того же C++ осталось в поддерживаемых библиотекой скриптах. Так что, думаю, есть смысл рассказать о языковых особенностях FastScript'а несколько подробнее.
В "стандартный языковой набор", как его назвали создатели библиотеки, входят переменные, константы, процедуры, функции. В функциях поддерживается возможность вложенности, а также различные типы передаваемых параметров: переменные, постоянные и умалчиваемые. Сюда же относятся все стандартные языковые операторы и конструкции (такие, например, как case, try ... finally/except, with и другие), простые типы данных (целый, дробный, логический, символьный, строковый, многомерные массивы, множество, универсальный тип variant, а также variant-массивы). В этот же "стандартный языковой набор" входят и классы со всеми их методами, событиями, свойствами, индексами и свойствами по умолчанию. Библиотека умеет проверять совместимость типов и обеспечивает возможность организовать быстрый доступ к любому объекту в вашем приложении.
Но есть и, так сказать, "языковые невозможности", о которых честно рассказывается в справке к библиотеке. Так, например, отсутствуют объявления сложных типов (records, classes) в скрипте; нет записей (records), нет и указателей, множеств (хотя, при этом, вполне возможно использование оператора IN из стандартного арсенала Delphi/Object Pascal, но только при обращении к неименованному множеству), нет типа shortstring, нет безусловного перехода (это даже и к лучшему). Отдельной графой в справке идёт неоднократно тут упоминавшийся C++Script, в котором нет восьмеричных констант; нет 'break' в операторе SWITCH (то есть, фактически, SWITCH работает подобно CASE из Delphi); операторы '++' и '-' возможны только после переменных (забудьте о ++i), а ещё операторы '-', '++' и '=' ничего не возвращают. И, внимание, все идентификаторы регистронезависимые. То есть, в общем-то, C++Script - это, во многом, тот же PascalScript, в котором begin...end'ы заменены на милые сердцу "сишника" фигурные скобки, вокруг которых шло столько разных холиваров.
Пару слов о справочных материалах
Справка - это, как бы, не самое главное в программном продукте, но если продукт рассчитан на программистов, то наличие хорошего help'а - не последнее из условий его успеха. Конечно, я могу вам назвать компании, которые вполне успешно продают свои SDK с практически отсутствующей справкой к нему... Но это всё-таки неудобно и неправильно.
Так вот, о справке. Она на русском и очень подробная. В ней даже расписаны грамматики для каждого из используемых скриптовых языков (это на случай, если вы решите с ними всерьёз разобраться). Каждый из компонентов, входящих в состав библиотеки, также разобран более чем подробно, так что на любой из возникающих вопросов вы наверняка сможете получить ответ благодаря скачанному с сайта FastReports PDF'у. Так что про справку к FastScript можно сказать, что многие продукты, предназначенные для разработчиков и при этом рассчитанные на СНГ-шный рынок, могли бы на неё равняться.
Резюме
Что ж, вот такая она, библиотека FastScript. Полезная? Безусловно. Но полезна ли она в данном конкретном программном продукте, несомненно, должен ответить для себя тот, кто руководит разработкой этого продукта. Я рассказал о ней по возможности подробно, теперь уже выбор за вами - использовать или не использовать FastScript в вашем приложении. В любом случае хочу пожелать вам успехов в использовании её или кого-то из её конкурентов.
Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by
Горячие темы