Библиотека (library ) представляет собой набор функций, объединенных некоторой идеей или по функциональному признаку. В системе Scilab простейшая библиотека содержит только функции, написанные средствами языка Scilab, где каждая функция хранится в отдельном файле. В терминах Scilab такие функции являются макросами [13]. Они не содержит файлов справки и функций на компилируемых языках (примитивов).
Объединение функций в библиотеку во многих практических ситуациях является весьма удобным средством использования внешних независимых функций при создании локальных приложений. Более сложной организацией внешних откомпилированных функций, написанных, в том числе, на универсальных языках программирования, является модуль. Разработка собственного модуля не представляет трудностей, однако требует более детального знакомства с внутренним устройством пакета Scilab. Кроме того, модули также имеют в своей основе библиотеки, поэтому для создания модулей требуется понимание работы библиотек.
К преимуществам библиотеки можно отнести следующее:
· библиотека загружается и выгружается целиком, что защищает все функции, входящие в нее.
· библиотеки легко обслуживать, так как каждая законченная функция хранится в своем файле.
· разрабатывать библиотеку может группа разработчиков, так как функции соединяются воедино только на этапе сборки.
· функции библиотеки хранятся в откомпилированном виде и, следовательно, выполняются быстрее.
Рассмотрим создание простой библиотеки функций Scilab, а также способы ее автоматической загрузки при запуске пакета.
Предположим, что имеется несколько sci.файлов, написанных средствами Scilab. Причем в каждом файле хранится одна функция, имя которой совпадает с именем sci-файла. Тогда последовательность шагов по созданию библиотеки заключается в следующем:
1) Создать откомпилированные (бинарные файлы с расширением *. bin) экземпляры функций, используя функцию genlib . Эта функция создает библиотеку из функций, описания которых расположены в некотором каталоге. Кроме того, функция genlibсоздает индексные файлы.
2) Загрузить библиотеку в Scilab, с помощью встроенная функция lib.
Для создания библиотеки функций следует придерживаться следующих правил:
· Файлы, содержащие определения функций, должны иметь расширение *. sci. В одном sci-файле могут быть определены несколько функций Scilab, однако только первая из них считается главной и доступна извне. Иными словами, только первая функция, определенная в файле, считается общедоступной, в то время как остальные неявно полагаются внутренними функциями;
· Имя sci-файлов должно совпадать с именем главной функции в этом файле. Например, если имя функции myfun, то файл, содержащий ее, должен иметь название myfun . sci. Это требование является обязательным, в противном случае функция genlib не будет работать корректно.
После создания библиотеки в каталоге появятся новые файлы:
· bin-файлы, которые являются скомпилированными версиями функций в sci-файлах. Из этих файлов и загружаются функции;
· файл names – служебный файл, который содержит имена функций библиотеки;
· файл с расширением *. lib, который используется сценарием погрузки и фактически является головой библиотеки.
Далее рассмотрим пример создания библиотеки (рис.1.5.6-3).
Пусть в каталоге samplelib размещаются два файла.
--> // Первый файл библиотеки samplelib содержит две функции
--> // C:\samplelib/fuction1.sci:
--> functionу = functionl(х) // Перваяфункция
>у= 1 * functionl_support(х)
> end
-->
--> function у = functionl_support(x) // Втораяфункция
> у = 3 * x
>end
--> // Второй файл содержит одну функцию
--> // C:/samplelib/fuction2.sci:
--> function у = function2 (x)
> у = 2 * x
>end
Рис. 1.5.6-3 Файлы с функциями, размещенные в каталоге samplelib
Создадим бинарную версию функций, воспользовавшись функцией genlib (рис. 1.5.6-4). Первый аргумент функции genlib представляет название будущей библиотеки, а второй указывает каталог, где размещены файлы функций. Заметим, что в данном случае только функции functionl и function2 являются общедоступными, а функция functionl _ support может использоваться только внутри библиотеки, но не вне ее.
--> // Запись файлов в каталог samplelib
-->genlib("mylibrary", "С:/samplelib")
--> mylibrary
mylibrary =
Functions files location: С:\samplelib\.functionl function2
Рис.1.5.6-4 Запись файлов в каталог samplelib
В результате функция genlib генерирует и помещает в каталог "C:/samplelib" следующие файлы:
functionl.bin – бинарная версия файла function1.sci;
function2.bin – бинарнаяверсияфайла function2.sci;
lib – бинарная версия библиотеки;
names – текстовый файл, содержащий имена всех
функций в библиотеке.
Сразу же после вызова genlib, две новых функции становятся доступны окружению Scilab и могут быть вызваны, как показано на рис. 1.5.6-5.
--> // Пример обращения к библиотечным функциям
-->functionl(3)
ans =
9.
-->
-->function2(3)
ans =
6.
Рис. 1.5.6-5 Обращение к библиотечным функциям из командного окна
Вместе с тем, на практике нет необходимости каждый раз генерировать библиотеку заново. Созданную ранее библиотеку можно загрузить посредством команды lib, единственный аргумент которой указывает местоположение загружаемой библиотеки в файловой системе. Фрагмент на рис. 1.5.6-6 иллюстрирует загрузку ранее созданной библиотеки.
---> // Загрузка файлов в библиотеку
--> mylibrary = lib("С:\samplelib\")
ans =
--> functions files location: С:\samplelib\.
functionl function2
Рис.1.5.6-6 Загрузка файлов в библиотеку с использованием функции lib
Дата: 2019-11-01, просмотров: 308.