Jump to content

Библиотека (вычисления)

Иллюстрация приложения, которое использует libvorbisfile для воспроизведения Ogg Vorbis . файла

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

Исторически библиотека состояла из подпрограмм (сегодня их обычно называют функциями). Эта концепция теперь включает в себя другие формы исполняемого кода, включая классы и неисполняемые данные, включая изображения и текст . Он также может ссылаться на коллекцию исходного кода .

Например, программа может использовать библиотеку для косвенного выполнения системных вызовов вместо того, чтобы выполнять эти системные вызовы непосредственно в программе.

Характеристики

[ редактировать ]

Библиотека может использоваться несколькими независимыми потребителями (программами и другими библиотеками). Это отличается от ресурсов, определенных в программе, которые обычно могут использоваться только этой программой.

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

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

Библиотеки могут использовать другие библиотеки, что приводит к иерархии библиотек в программе.

Исполняемый файл

[ редактировать ]

Библиотека исполняемого кода имеет четко определенный интерфейс , с помощью которого вызываются функциональные возможности. Например, в C библиотечная функция вызывается через обычную возможность вызова функции C. Компоновщик генерирует код для вызова функции через библиотечный механизм, если функция доступна из библиотеки, а не из самой программы. [ 1 ]

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

Большинство компилируемых языков имеют стандартную библиотеку , хотя программисты также могут создавать свои собственные библиотеки. Большинство современных программных систем предоставляют библиотеки, реализующие большинство системных сервисов. Такие библиотеки организовали сервисы, необходимые современному приложению. Таким образом, большая часть кода, используемого современными приложениями, содержится в этих системных библиотеках.

Идея компьютерной библиотеки восходит к первым компьютерам, созданным Чарльзом Бэббиджем . В статье 1888 года, посвященной его аналитической машине, предполагалось, что компьютерные операции можно выполнять на отдельных карточках с числовым вводом. Если бы эти перфокарты операций были сохранены для повторного использования, то «со временем у движка появилась бы собственная библиотека». [ 3 ]

Женщина работает рядом со шкафом с библиотекой подпрограмм на катушках перфоленты для компьютера EDSAC.

В 1947 году Гольдстайн и фон Нейман предположили, что было бы полезно создать «библиотеку» подпрограмм для их работы на машине IAS , раннем компьютере, который в то время еще не работал. [ 4 ] Они представляли себе физическую библиотеку записей магнитных проводов , в которой каждый провод хранит многоразовый компьютерный код. [ 5 ]

Вдохновленный фон Нейманом, Уилкс и его команда создали EDSAC . с В шкафу перфолентой хранилась библиотека подпрограмм для этого компьютера. [ 6 ] Программы для EDSAC состояли из основной программы и последовательности подпрограмм, скопированных из библиотеки подпрограмм. [ 7 ] В 1951 году коллектив опубликовал первый учебник по программированию « Подготовка программ для электронного цифрового компьютера» , в котором подробно описал создание и назначение библиотеки. [ 8 ]

COBOL включил «примитивные возможности библиотечной системы» в 1959 году. [ 9 ] но Жан Самме ретроспективно охарактеризовал их как «неадекватные библиотечные возможности». [ 10 ]

У JOVIAL есть коммуникационный пул (COMPOOL), примерно библиотека заголовочных файлов.

Еще одним важным вкладом в концепцию современной библиотеки стало подпрограммы нововведение FORTRAN . Подпрограммы FORTRAN можно компилировать независимо друг от друга, но в компиляторе отсутствовал компоновщик . Поэтому перед введением модулей в Фортран-90 необходимо провести проверку типов между FORTRAN-90. [ Примечание 1 ] подпрограмм было невозможно. [ 11 ]

К середине 1960-х годов библиотеки копирования и макросов для ассемблеров стали обычным явлением. Начиная с популярности IBM System/360 , библиотеки, содержащие другие типы текстовых элементов, например, системные параметры, также стали обычным явлением.

В IBM OS/360 и ее преемниках это называется секционированным набором данных .

Первый объектно-ориентированный язык программирования Simula , разработанный в 1965 году, поддерживал добавление классов в библиотеки через свой компилятор. [ 12 ] [ 13 ]

Связывание

[ редактировать ]

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

Разрешаемые ссылки могут быть адресами для переходов и других стандартных вызовов. Они могут находиться в основной программе или в одном модуле в зависимости от другого. Они преобразуются в фиксированные или перемещаемые адреса (из общей базы) путем выделения памяти времени выполнения для сегментов памяти каждого модуля, на который ссылаются.

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

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

Статические библиотеки

[ редактировать ]

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

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

Общие библиотеки

[ редактировать ]

Общая библиотека или общий объект — это файл, который предназначен для совместного использования исполняемыми файлами и другими файлами общих объектов . Модули, используемые программой, загружаются из отдельных общих объектов в память во время загрузки или во время выполнения , а не копируются компоновщиком, когда он создает для программы один монолитный исполняемый файл.

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

Библиотеки объектов

[ редактировать ]

Впервые динамическое связывание было впервые предложено в 1960-х годах, но оно не достигло наиболее часто используемых операционных систем до конца 1980-х годов. К началу 1990-х годов он был доступен в той или иной форме в большинстве операционных систем. В тот же период объектно-ориентированное программирование (ООП) стало важной частью среды программирования. ООП с привязкой во время выполнения требует дополнительной информации, которую традиционные библиотеки не предоставляют. Помимо имен и точек входа кода, расположенного внутри, им также требуется список объектов, от которых они зависят. Это побочный эффект одной из основных концепций ООП — наследования, что означает, что части полного определения любого метода могут находиться в разных местах. Это больше, чем просто указание того, что одна библиотека требует услуг другой: в настоящей ООП-системе сами библиотеки могут быть неизвестны во время компиляции и различаться от системы к системе.

В то же время многие разработчики работали над идеей многоуровневых программ, в которых «дисплей», работающий на настольном компьютере, использовал бы услуги мэйнфрейма или миникомпьютера для хранения или обработки данных. Например, программа на компьютере с графическим интерфейсом будет отправлять сообщения на миникомпьютер, чтобы вернуть небольшие образцы огромного набора данных для отображения. Удаленные вызовы процедур (RPC) уже решали эти задачи, но стандартной системы RPC не существовало.

Вскоре большинство производителей мини-компьютеров и мейнфреймов инициировали проекты по объединению этих двух технологий, создав формат библиотеки ООП, который можно было бы использовать где угодно. Такие системы назывались объектными библиотеками или распределенными объектами , если они поддерживали удаленный доступ (не все). COM от Microsoft является примером такой системы для локального использования. DCOM, модифицированная версия COM, поддерживает удаленный доступ.

Некоторое время объектные библиотеки сохраняли статус «следующей большой вещи» в мире программирования. Было предпринято множество попыток создать системы, которые могли бы работать на разных платформах, и компании соревновались в попытках запереть разработчиков в своей собственной системе. Примеры включают IBM системную объектную модель (SOM/DSOM), Sun Microsystems , Distributed Objects Everywhere (DOE) NeXT Portable Distributed Objects PDO) Digital , ObjectBroker ( Microsoft , объектную модель компонентов (COM/DCOM) и любое количество систем на базе CORBA .

Библиотеки классов

[ редактировать ]

Библиотеки классов — это грубый ООП-эквивалент старых типов библиотек кода. Они содержат классы , которые описывают характеристики и определяют действия ( методы ), связанные с объектами. Библиотеки классов используются для создания экземпляров или объектов, характеристики которых имеют определенные значения. В некоторых языках ООП, таких как Java , различие очевидно: классы часто содержатся в библиотечных файлах (например, в формате файлов JAR Java ), а созданные объекты находятся только в памяти (хотя потенциально их можно сделать постоянными в отдельных файлах). В других, таких как Smalltalk , библиотеки классов являются просто отправной точкой для образа системы , который включает в себя все состояние среды, классов и всех созданных объектов.

Сегодня большинство библиотек классов хранятся в репозитории пакетов (например, Maven Central для Java). Клиентский код явно объявляет зависимости от внешних библиотек в файлах конфигурации сборки (например, Maven Pom в Java).

Удаленные библиотеки

[ редактировать ]

Другой библиотечный метод использует совершенно отдельные исполняемые файлы (часто в некоторой облегченной форме) и вызывает их с помощью удаленного вызова процедур (RPC) по сети на другой компьютер. Это максимизирует повторное использование операционной системы: код, необходимый для поддержки библиотеки, — это тот же код, который используется для обеспечения поддержки приложений и безопасности для любой другой программы. Кроме того, такие системы не требуют наличия библиотеки на том же компьютере, но могут пересылать запросы по сети.

Однако такой подход означает, что каждый вызов библиотеки требует значительных накладных расходов. Вызовы RPC намного дороже, чем вызов общей библиотеки, которая уже загружена на ту же машину. Этот подход обычно используется в распределенной архитектуре , которая интенсивно использует такие удаленные вызовы, особенно в системах клиент-сервер и серверах приложений, таких как Enterprise JavaBeans .

Библиотеки генерации кода

[ редактировать ]

высокого уровня Библиотеки генерации кода — это API , которые могут генерировать или преобразовывать байт-код для Java . Они используются аспектно-ориентированным программированием , некоторыми платформами доступа к данным, а также для тестирования для создания динамических прокси-объектов. Они также используются для перехвата доступа к полям. [ 16 ]

Именование файлов

[ редактировать ]

Большинство современных Unix-подобных систем

[ редактировать ]

Система хранит libfoo.a и libfoo.so файлы в таких каталогах, как /lib, /usr/lib или /usr/local/lib. Имена файлов всегда начинаются с libи заканчиваются суффиксом .a ( архив , статическая библиотека) или .so (общий объект, динамически подключаемая библиотека). В некоторых системах может быть несколько имен для динамически подключаемой библиотеки. Эти имена обычно имеют один и тот же префикс и разные суффиксы, указывающие номер версии. Большинство названий являются символическими ссылками на последнюю версию. Например, в некоторых системах libfoo.so.2 будет именем файла второй основной версии интерфейса динамически подключаемой библиотеки. libfoo. .la файлы, которые иногда можно найти в каталогах библиотеки, представляют собой архивы libtool и не могут использоваться системой как таковые.

Система наследует соглашения о статических библиотеках от BSD , при этом библиотека хранится в .a файл и может использовать .soдинамически подключаемые библиотеки в стиле (с .dylib вместо этого суффикс). Однако большинство библиотек в macOS состоят из «фреймворков», размещенных в специальных каталогах, называемых « пакетами », которые содержат необходимые файлы и метаданные библиотеки. Например, структура под названием MyFramework будет реализован в пакете под названием MyFramework.framework, с MyFramework.framework/MyFramework быть либо файлом динамически подключаемой библиотеки, либо символической ссылкой на файл динамически подключаемой библиотеки в MyFramework.framework/Versions/Current/MyFramework.

Microsoft Windows

[ редактировать ]

Библиотеки динамической компоновки обычно имеют суффикс *.DLL, [ 17 ] хотя другие расширения имен файлов могут идентифицировать динамически подключаемые библиотеки специального назначения, например *.OCX для OLE -библиотек. Версии интерфейса либо кодируются в именах файлов, либо абстрагируются с помощью интерфейсов COM-объектов . В зависимости от того, как они составлены, *.LIB файлы могут быть либо статическими библиотеками, либо представлениями динамически подключаемых библиотек, необходимых только во время компиляции, известных как « библиотеки импорта ». В отличие от мира UNIX , где используются разные расширения файлов, при связывании с .LIB В Windows необходимо сначала узнать, является ли это обычной статической библиотекой или библиотекой импорта. В последнем случае .DLL файл должен присутствовать во время выполнения.

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Раньше это было возможно, например, между подпрограммами Ada.
  1. ^ Дешпанде, Прасад (2013). Обнаружение метаморфических явлений с использованием анализа графа вызовов функций (Диссертация). Библиотека государственного университета Сан-Хосе. doi : 10.31979/etd.t9xm-ahsc .
  2. ^ «Статические библиотеки» . TLDP. Архивировано из оригинала 3 июля 2013 г. Проверено 3 октября 2013 г.
  3. ^ Бэббидж, HP (12 сентября 1888 г.). «Аналитическая машина» . Труды Британской ассоциации . Ванна.
  4. ^ Голдстайн, Герман Х. (31 декабря 2008 г.). Компьютер от Паскаля до фон Неймана . Принстон: Издательство Принстонского университета. дои : 10.1515/9781400820139 . ISBN  978-1-4008-2013-9 .
  5. ^ Голдстайн, Герман ; фон Нейман, Джон (1947). Планирование и кодирование задач для электронно-вычислительного прибора (Отчет). Институт перспективных исследований. стр. 3, 21–22. OCLC   26239859 . вероятно, будет очень важно разработать обширную «библиотеку» подпрограмм
  6. ^ Уилкс, М.В. (1951). «Компьютер EDSAC» . 1951 Международный семинар по управлению знаниями о требованиях . 1951 Международный семинар по управлению знаниями о требованиях. IEEE. п. 79. дои : 10.1109/afips.1951.13 .
  7. ^ Кэмпбелл-Келли, Мартин (сентябрь 2011 г.). «Во славу Уилкса, Уиллера и Гилла » . Коммуникации АКМ . 54 (9): 25–27. дои : 10.1145/1995376.1995386 . S2CID   20261972 .
  8. ^ Уилкс, Морис ; Уилер, Дэвид ; Гилл, Стэнли (1951). Подготовка программ для электронной цифровой вычислительной машины . Аддисон-Уэсли. стр. 45, 80–91, 100. OCLC   641145988 .
  9. ^ Вексельблат, Ричард (1981). История языков программирования . Серия монографий ACM. Нью-Йорк, штат Нью-Йорк: Academic Press (дочерняя компания Harcourt Brace ). п. 274 . ISBN  0-12-745040-8 .
  10. ^ Wexelblat, соч. цит. , с. 258
  11. ^ Уилсон, Лесли Б.; Кларк, Роберт Г. (1988). Сравнительные языки программирования . Уокингем, Англия: Аддисон-Уэсли. п. 126. ИСБН  0-201-18483-4 .
  12. ^ Уилсон и Кларк, соч. цит. , с. 52
  13. ^ Wexelblat, соч. цит. , с. 716
  14. ^ Каминский, Дэн (2008). «Глава 3 — Переносимый исполняемый файл и исполняемые и связывающие форматы» . Реверс-инжиниринг кода с помощью IDA Pro . Эльзевир. стр. 37–66. дои : 10.1016/b978-1-59749-237-9.00003-x . ISBN  978-1-59749-237-9 . Проверено 27 мая 2021 г.
  15. ^ Коллберг, Кристиан; Хартман, Джон Х.; Бабу, Шридивья; Удупа, Шарат К. (2003). SLINKY: перезагрузка статического связывания . УСЕНИКС '05. Департамент компьютерных наук Университета Аризоны . Архивировано из оригинала 23 марта 2016 г. Проверено 17 марта 2016 г.
  16. ^ «Библиотека генерации кода» . Исходная кузница . Архивировано из оригинала 12 января 2010 г. Проверено 3 марта 2010 г. Библиотека генерации байт-кода — это API высокого уровня для генерации и преобразования байт-кода JAVA. Он используется АОП, тестированием и платформами доступа к данным для создания динамических прокси-объектов и перехвата доступа к полям.
  17. ^ Бреснахан, Кристина; Блюм, Ричард (27 апреля 2015 г.). Учебное пособие по сертификации LPIC-1 Linux Professional Institute: экзамен 101-400 и экзамен 102-400 . Джон Уайли и сыновья (опубликовано в 2015 г.). п. 82. ИСБН  9781119021186 . Архивировано из оригинала 24 сентября 2015 г. Проверено 3 сентября 2015 г. Общие библиотеки Linux аналогичны библиотекам динамической компоновки (DLL) Windows. Библиотеки Windows DLL обычно идентифицируются по .dll расширения имен файлов.

Дальнейшее чтение

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b294df6dbb9bc6be37412691af8c5a46__1722240900
URL1:https://arc.ask3.ru/arc/aa/b2/46/b294df6dbb9bc6be37412691af8c5a46.html
Заголовок, (Title) документа по адресу, URL1:
Library (computing) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)