Библиотека программ
Библиоте́ка програ́мм, организованная совокупность компьютерных программ, доступ к которым осуществляется по их именам (или индексам). Библиотека программ ускоряет и облегчает процесс создания пользовательской программы, позволяя применять в качестве составных частей уже готовые функции, подпрограммы, программы, входящие в библиотеку программ. Для этого достаточно указать имя соответствующей функции. Благодаря библиотеке программ процесс программирования становится более технологичным, а сама пользовательская программа – легче для восприятия. Существенной частью программного обеспечения библиотеки программ является набор сервисных программ (утилит), обеспечивающих создание библиотеки, включение и исключение функций, вывод оглавления и др.
Библиотеки программ могут представлять собой библиотеки объектных модулей или библиотеки программ на исходном языке программирования. Библиотека объектных модулей – это, как правило, файл машинных кодов, состоящий из заголовка и последовательно расположенных объектных модулей. В заголовке содержится список всех модулей с указанием смещения каждого из них от начала библиотеки. Когда программа вызывает библиотечную функцию, редактор связей находит имя этой функции в заголовке, затем извлекает соответствующий модуль из библиотеки программ и компонует (связывает) статически или динамически с выполняемым файлом программы. При статической компоновке библиотека программ автоматически загружается при запуске использующей её программы, а при динамической – подключается к основной программе непосредственно во время обращения к библиотечной функции. В мультизадачной операционной системе статическая компоновка неэффективна, т. к. приводит к неэкономному использованию оперативной памяти. Например, если две одновременно выполняемые программы вызывают одну функцию, то в памяти будут находиться две копии этой функции. Во время динамической компоновки в файле создаётся ссылка на библиотеку программ, которая используется для включения соответствующей библиотеки в адресное пространство вызывающей программы при её выполнении. Таким образом, появляется возможность одновременного использования (разделения) динамически компонуемых библиотек несколькими процессами. Применение таких библиотек сокращает объём программы, но несколько усложняет установку приложения, поскольку оно нуждается ещё и в соответствующих библиотечных файлах.
Другим преимуществом динамической компоновки является атомарность обновления библиотеки программ, обеспечивающая автоматическое переключение всех использующих данную библиотеку программ на новую версию библиотеки программ при условии сохранения неизменности внешнего интерфейса вызова её компонентов. Это свойство особенно важно в случае обнаружения и устранения каких-либо уязвимостей в кодах библиотеки программ, так как позволяет оперативно устранить уязвимость во всех зависимых от неё приложениях, не проводя их перекомпоновку.
Программисты могут создавать свои собственные библиотеки программ. Однако для выполнения часто повторяющихся в различных программах операций (например, ввода-вывода, управления памятью, вычисления элементарных математических функций и др.) применяют, как правило, функции из стандартных библиотек, которые поставляются вместе с компилятором языка (конкретной системы программирования) или с операционной системой. Системы программирования для некоторых языков (например, Fortran) продолжают существовать во многом благодаря тому, что для них разработан развитый аппарат библиотечных функций. При выполнении определённых соглашений библиотеки программ можно использовать в программных проектах, реализуемых на нескольких языках программирования.
Достоинством библиотек программ на исходном языке программирования считается их независимость от конкретного типа вычислительной системы. Часто такая независимость обеспечивается включением в тексты библиотечных программ директив условной компиляции, подстраивающих программу под конкретный тип компьютера и его операционную систему во время процесса компиляции. Эти библиотеки программ эффективно используются при решении научных и инженерных задач. Условно их можно разделить на библиотеки широкого применения, предназначенные для решения задач в различных областях, и специализированные библиотеки. Например, в 1970–1980-х гг. специалистами Объединённого института ядерных исследований (ОИЯИ, Дубна), МГУ, Физико-энергетического института (ФЭИ, Обнинск) и другими были созданы обширная библиотека программ обработки спектрометрической информации, получаемой в ходе экспериментальных исследований, библиотека численного анализа МГУ, иерархия библиотек операционной системы «Дубна». Многие программы из этих библиотек до сих пор применяются на современных вычислительных системах. Широко известны и активно используются в нашей стране международные библиотеки программ CERNLIB Европейской организации по ядерным исследованиям, Computer Physics Communications (CPC) и Numerical Algorithms Group (NAG), предназначенные для решения задач физики, математики, химии и других смежных областей знаний.
Библиотеки программ, написанные на объектных языках С++ или Object Pascal и другие, реализующие базовый набор понятий некоторой предметной области, часто называют библиотеками классов (компонентов). Например, библиотеки стандартных элементов графического интерфейса (меню, полосы прокрутки, списки, флажки, кнопки, окна и др.). Библиотеки классов позволяют упростить разработку приложений, имеющих сложный интерфейс, а также взаимодействие с базами данных и пр.