Scientific journal
Название журнала на английском

1 1
1

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

Scilab (англ.) – с одной стороны, это математический пакет численных расчетов, а с другой – платформа для разработки высокотехнологичных приложений, где имеются все атрибуты среды разработки: текстовый редактор, компилятор и интерпретатор, язык программирования, средства отладки [3].

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

Библиотека (англ. library) – это организованный набор функций, написанных на языке Scilab (т.е. являющихся макросами), хранящийся на нескольких файлах [1]. Как правило библиотеки являются составляющими элементами при построении модулей, которые могут также содержать файлы справки и файлы с примитивами.

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

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

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

– Библиотеки загружаются и выгружаются целиком, что защищает все функции входящие в нее.

– Библиотеки легко обслуживать, так как каждая законченная функция хранится в своем файле.

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

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

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

Первый прототип:

genlib(lib_name [[,dir_name, [ Force [,verb [,Names]]]])

Второй прототип:

genlib(lib_name [,path=dir_name] [,verbose=verb] [,force=Force] [,names=Names])

Обозначения:

lib_name – строка; имя библиотеки

dir_name – строка; полный путь до каталога в используемой файловой системе, в котором хранятся sci-файлы функций

Force – логическая константа; в случае %t сценарий перекомпилирует все функции в sci-файлах. По умолчанию установлена %f. Эта возможность используется, когда скомпилированная версия функции не соответствует коду sci-файла, например, когда вы его немного модернизировали.

verb – логическая константа; в случае %t процесс сборки будет сопровождать вывод информации о состоянии в командное окно.

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

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

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

– файл names – служебный файл, который содержит имена функций библиотеки. Используется во время подгрузки специальной функцией.

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

Перед непосредственной сборкой следует придерживаться следующих правил:

1. Каждая законченная функция должна хранится в своем sci-файле, и имя этой функции должно в точности совпадать с именем файла. Например, если функция имеет имя function123, то и файл должен быть function123.sci.

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

3. Наличие расширения sci желательно всегда, так как это облегчает работу функции genlib().

Для загрузки готовой библиотеки в среду используется функция lib(). Ее вызов:

namelib = lib(‘lib_dir')

lib_dir – каталог, в котором хранится собранная библиотека

Функция lib() ищет файлы lib и names и с помощью них подгружает библиотеку. В случае успеха функция вернет имя загруженной библиотеки. Для выгрузки используется функция clear.

Каталог со sci-файлами тоже можно назвать библиотекой. Выгрузить такую библиотеку можно с помощью функции getd(), которая работает примерно как и lib(), только проходится непосредственно по sci-файлам. Однако, такой подход имеет ряд недостатков:

1. не скомпилированные функции работают медленнее;

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

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

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

Скрипт сборки функций, написанных на встроенном языке, располагается в каталоге macros и, согласно внутренним соглашениям, носит имя buildmacros.sce. Он пишется автором пакета самостоятельно. В Scilab5 появились специальные команды, упрощающие выполнение данной операции. При использовании Scilab на ОС Windows, во время установки необходимо дополнительно выбрать пункты: Parameters Toolbox, Development Tools и A toolbox skeleton – или просто выбрать полную установку [1].

missing image file

Рис. 1. Алгоритм написания собственной простой библиотеки из двух файлов

Следующий пример демонстрирует, как создать бинарную версию функций, воспользовавшись инструкцией genlib. Первый аргумент функции genlib представляет название будущей библиотеки, а второй указывает каталог, где размещены файлы функций. Заметим, что в данном случае только функции functionl и function2 являются общедоступными, а функция functionl_support может использоваться только внутри библиотеки, но не вне ее.

missing image file

Рис. 2. Бинарная версия функций

Функция genlib генерирует и помещает в каталог «C:/samplelib» следующие файлы:

– functionl.bin: бинарная версия файла functionl.sci,

– function2.bin: бинарная версия файла function2.sci,

– lib: бинарная версия библиотеки

– names: текстовый файл, содержащий имена всех функций в библиотеке.

Скомпилированные файлы *.bin и файл lib являются кроссплатформенным в том смысле, что могут без изменений использоваться версиями Scilab для Windows, Linux или Mac OS.

Вместе с тем, на практике нет необходимости каждый раз генерировать библиотеку заново. Готовую библиотеку можно загрузить посредством команды lib, единственный аргумент которой указывает местоположение загружаемой библиотеки в файловой системе. Следующий фрагмент иллюстрирует загрузку ранее созданной библиотеки.

missing image file

Рис. 3. Загрузка ранее созданной библиотеки

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

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