Библиотека (программирование): различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
мНет описания правки
отклонены последние 6 изменений от 80.94.171.236, Alex NB OT, 149.27.77.180, Рейму Хакурей, 213.59.158.168 и 188.124.242.208
Метка: ручная отмена
 
(не показаны 32 промежуточные версии 21 участника)
Строка 1: Строка 1:
{{К объединению|2020-01-12|Разделяемая библиотека}}
{{Значения|Библиотека (значения)}}
{{Значения|Библиотека (значения)}}


'''Библиоте́ка''' (от {{lang-en|library}}) в [[программирование|программировании]] — сборник [[подпрограмма|подпрограмм]] или [[объект (программирование)|объектов]], используемых для разработки [[программное обеспечение|программного обеспечения]] (ПО).
'''Библиоте́ка''' (от {{lang-en|library}}) в [[программирование|программировании]] — сборник [[подпрограмма|подпрограмм]] или [[объект (программирование)|объектов]], используемых для разработки [[программное обеспечение|программного обеспечения]] (ПО).<!-- В некоторых [[язык программирования|языках программирования]] (например, в [[Python]]) то же, что и [[модуль (программирование)|модуль]], в некоторых — несколько модулей.--> С точки зрения [[операционная система|операционной системы]] (ОС) и прикладного [[программное обеспечение|ПО]], библиотеки разделяются на динамические и статические.


Термин «библиотека подпрограмм», по всей видимости, одними из первых упомянули [[Уилкс, Морис Винсент|Уилкс М.]], [[Уилер, Джон Арчибальд|Уиллер Д.]], Гилл С. в качестве одной из форм организации вычислений на компьютере<ref>{{книга
В некоторых [[язык программирования|языках программирования]] (например, в [[Python]]) то же, что и [[модуль (программирование)|модуль]], в некоторых — несколько модулей. С точки зрения [[операционная система|операционной системы]] (ОС) и прикладного [[программное обеспечение|ПО]], библиотеки разделяются на динамические и статические.

Термин «библиотека подпрограмм», по всей видимости, одними из первых упомянули [[Уилкс, Морис Винсент|Уилкс М.]], Уиллер Д., Гилл С. в качестве одной из форм организации вычислений на компьютере<ref>{{книга
|автор = Wilkes M. V., Wheeler D. J., Gill S.
|автор = Wilkes M. V., Wheeler D. J., Gill S.
|заглавие = Preparation of programs for an electronic digital computer
|заглавие = Preparation of programs for an electronic digital computer
|издательство = Addison-Wesley
|издательство = Addison-Wesley
|год= 1951
|год= 1951
}}</ref><ref>Уилкс М., Уиллер Д., Гилл С. «Составление программ для электронных счётных машин». Издательство иностранной литературы, 1953</ref>. Исходя из изложенного в их книге, под библиотекой понимался набор «коротких, заранее заготовленных программ для отдельных, часто встречающихся (стандартных) вычислительных операций»<ref>[http://www.dissercat.com/content/tekhnologiya-mnogomashinnoi-realizatsii-i-zhizneobespecheniya-bibliotek-podprogramm-vychisli Волченскова, Надежда Ивановна, Технология многомашинной реализации и жизнеобеспечения библиотек подпрограмм вычислительной математики на языке Фортран, автореферат к диссертации, 1984]</ref>.
}}</ref><ref>Уилкс М., Уиллер Д., Гилл С. «Составление программ для электронных счётных машин». Издательство иностранной литературы, 1953</ref>. Исходя из изложенного в их книге, под библиотекой понимался набор «коротких, заранее заготовленных программ для отдельных, часто встречающихся (стандартных) вычислительных операций»<ref>{{Cite web |url=http://www.dissercat.com/content/tekhnologiya-mnogomashinnoi-realizatsii-i-zhizneobespecheniya-bibliotek-podprogramm-vychisli |title=Волченскова, Надежда Ивановна, Технология многомашинной реализации и жизнеобеспечения библиотек подпрограмм вычислительной математики на языке Фортран, автореферат к диссертации, 1984 |access-date=2012-10-09 |archive-date=2012-05-03 |archive-url=https://web.archive.org/web/20120503135952/http://www.dissercat.com/content/tekhnologiya-mnogomashinnoi-realizatsii-i-zhizneobespecheniya-bibliotek-podprogramm-vychisli |deadlink=no }}</ref>.


== Библиотеки для компилируемых языков ==
== Библиотеки для компилируемых языков ==


=== Динамические библиотеки ===
=== Динамические библиотеки ===
Динамическая библиотека — файл, содержащий [[машинный код]]. Загружается в [[Оперативная память|память]] [[Процесс (информатика)|процесса]] [[Загрузчик программ|загрузчиком программ]] [[Операционная система|операционной системы]] либо при создании процесса, либо по запросу [[Рантайм|уже работающего процесса]], то есть динамически.
Динамическая библиотека — файл, содержащий [[машинный код]]. Загружается в [[Оперативная память|память]] [[Процесс (информатика)|процесса]] [[Загрузчик программ|загрузчиком программ]] [[Операционная система|операционной системы]] либо при создании процесса, либо по запросу [[Рантайм|уже работающего процесса]], то есть динамически.<ref>{{Статья|ссылка=https://elibrary.ru/item.asp?id=39136538|автор=Савельев А.М.|заглавие=ПРИМЕНЕНИЕ ДИНАМИЧЕСКОЙ БИБЛИОТЕКИ TRANLIB ДЛЯ РАСЧЕТА ТРАНСПОРТНЫХ СВОЙСТВ РЕАГИРУЮЩИХ ГАЗОВЫХ СМЕСЕЙ|год=2019|язык=русский|издание=Журнал "АВИАЦИОННЫЕ ДВИГАТЕЛИ"|тип=|месяц=|число=|том=|номер=|страницы=|issn=}}</ref>

[[Расширение имени файла|Расширения]] файлов динамических библиотек в разных [[Операционная система|ОС]].


{| class="wikitable"
{| class="wikitable"
|+ [[Расширение имени файла|Расширения]] имен файлов динамических библиотек в разных [[Операционная система|ОС]]
|-
|-
! [[Расширение имени файла|Расширение]] !! [[Операционная система|ОС]] !! Расшифровка !! Примечание
! [[Расширение имени файла|Расширение]] !! [[Операционная система|ОС]] !! Расшифровка !! Примечание
Строка 34: Строка 32:


В зависимости от назначения различают:
В зависимости от назначения различают:
* библиотеки, используемые одной программой и содержащие критические для работы программы функции. Недостаток: при отсутствии библиотеки программа не сможет работать;
* Библиотеки, используемые одной программой и содержащие критические для работы программы функции. Недостаток: при отсутствии библиотеки программа не сможет работать;
* библиотеки, используемые одной программой и содержащие дополнительные функции. Например, библиотеки [[плагин]]ов используются для расширения функциональности программы;
* Библиотеки, используемые одной программой и содержащие дополнительные функции. Например, библиотеки [[плагин]]ов используются для расширения функционала программы;
* библиотеки общего пользования ({{lang-en|shared library}}). Содержат функции, используемые несколькими программами. Могут загружаться в адресное пространство ОС ({{lang-en|system library}}) для экономии [[ОЗУ|памяти]]: одна копия библиотеки будет использоваться несколькими процессами.
* Библиотеки общего пользования ({{lang-en|shared library}}). Содержат функции, используемые несколькими программами. Могут загружаться в адресное пространство ОС ({{lang-en|system library}}) для экономии [[ОЗУ|памяти]]: одна копия библиотеки будет использоваться несколькими процессами. В силу последнего обстоятельства такие библиотеки нередко называют ''разделяемыми''.


При написании программы программисту достаточно указать [[транслятор]]у ([[компилятор]]у или [[интерпретатор]]у) путь к библиотеке и имя [[Функция (программирование)|функции]]. Ни исходный текст функции, ни её исполняемый код в состав программы не войдут.
При написании программы программисту достаточно указать [[транслятор]]у ([[компилятор]]у или [[интерпретатор]]у) путь к библиотеке и имя [[Функция (программирование)|функции]]. Ни исходный текст функции, ни её исполняемый код в состав программы не войдут.
Строка 42: Строка 40:
Достоинства:
Достоинства:
* экономия [[Оперативная память|памяти]] за счёт использования одной библиотеки несколькими [[Процесс (информатика)|процессами]];
* экономия [[Оперативная память|памяти]] за счёт использования одной библиотеки несколькими [[Процесс (информатика)|процессами]];
* возможность исправления ошибок (достаточно заменить файл библиотеки и перезапустить работающие программы).
* возможность исправления ошибок (достаточно заменить файл библиотеки и перезапустить работающие программы) без изменения кода основной программы.


Недостатки:
Недостатки:
* возможность нарушения [[Интерфейс программирования приложений|API]] (при внесении изменений в библиотеку существующие программы могут перестать работать);
* возможность нарушения [[Интерфейс программирования приложений|API]] , — при внесении изменений в библиотеку существующие программы могут перестать работать (утратят совместимость по [[Интерфейс (объектно-ориентированное программирование)|интерфейсу]]<ref>{{Статья|ссылка=https://habr.com/ru/company/mailru/blog/278561/|автор=Robert Elder|заглавие=Интерфейсы — важнейшая концепция в разработке ПО|год=2020|язык=|издание=|тип=|месяц=|число=|том=|номер=|страницы=|issn=|archivedate=2021-03-06|archiveurl=https://web.archive.org/web/20210306172035/https://habr.com/ru/company/mailru/blog/278561/}}</ref>);
* [[DLL hell|конфликт версий динамических библиотек]] (разные программы могут ожидать разные версии библиотек);
* [[DLL hell|конфликт версий динамических библиотек]], — разные программы могут нуждаться в разных версиях библиотеки;
* доступность одинаковых функций по одинаковым адресам в разных процессах (упрощает эксплуатацию уязвимостей; для решения проблемы изобретён [[:en:Position-independent code|pic]]{{ref-en}}).
* доступность одинаковых функций по одинаковым адресам в разных процессах, — упрощает эксплуатацию уязвимостей (для решения проблемы изобретён [[:en:Position-independent code|pic]]{{ref-en}}).


=== Статические библиотеки ===
=== Статические библиотеки ===
Статическая библиотека — файл с исходным кодом или [[Объектный модуль|объектный файл]], предназначенный для вставки в [[исполняемый файл|программу]] на этапе компоновки.
Статическая библиотека — [[Объектный модуль|объектный файл]] в виде файла (нередко может быть поставлен вместе с исходным кодом), код из которого выборочно или полностью вставляется в [[исполняемый файл|программу]] на этапе компоновки.


Библиотеки, распространяемые в виде исходного кода, преобразуются [[компилятор]]ом в [[Объектный модуль|объектные файлы]]. Затем [[компоновщик]] соединяет объектные файлы библиотек и объектные файлы вашей программы в один исполняемый файл.
Библиотеки, распространяемые в виде исходного кода, преобразуются [[транслятор]]ом в [[Объектный модуль|объектные файлы]]. Затем [[компоновщик]]<ref>{{Статья|ссылка=https://habr.com/ru/company/otus/blog/518634/|автор=jsmanifest|заглавие=Компоновщик в JavaScript|год=2020|язык=|издание=|тип=|месяц=|число=|том=|номер=|страницы=|issn=|archivedate=2020-09-11|archiveurl=https://web.archive.org/web/20200911060832/https://habr.com/ru/company/otus/blog/518634/}}</ref> соединяет объектные файлы библиотек и объектные файлы вашей программы в один исполняемый файл.


Например, в исходных текстах распространяются:
Например, в исходных текстах распространяются:
Строка 78: Строка 76:


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


== Библиотеки для интерпретируемых языков ==
== Библиотеки для интерпретируемых языков ==
Библиотека — файл, содержащий либо код на [[Интерпретируемый язык программирования|интерпретируемом]] языке, либо [[байт-код]] для [[Виртуальная машина|виртуальной машины]].
Библиотека — файл, содержащий либо код на [[Интерпретируемый язык программирования|интерпретируемом]] языке, либо [[байт-код]] для [[Виртуальная машина|виртуальной машины]].


Например, библиотеки для языка [[Python]] могут распространяться либо в виде файлов с исходным кодом (расширение «<code>py</code>»), либо в виде файлов с байт-кодом<ref>[https://docs.python.org/3/tutorial/modules.html#compiled-python-files Компиляция файлов python]. Документация языка [[Python]] на сайте docs.python.org.</ref> (расширение «<code>pyc</code>», буква «c» от {{lang-en|compiled}}).
Например, библиотеки для языка [[Python]] могут распространяться либо в виде файлов с исходным кодом (расширение «<code>py</code>»), либо в виде файлов с байт-кодом<ref>[https://docs.python.org/3/tutorial/modules.html#compiled-python-files Компиляция файлов python] {{Wayback|url=https://docs.python.org/3/tutorial/modules.html#compiled-python-files |date=20210206205133 }}. Документация языка [[Python]] на сайте docs.python.org.</ref> (расширение «<code>pyc</code>», буква «c» от {{lang-en|compiled}}). Одной из библиотек для языка [[Python]] является [[Tkinter]].<ref>{{Статья|ссылка=https://elibrary.ru/item.asp?id=36990557|автор=БУХАРОВ Т.А., НАФИКОВА А.Р., МИГРАНОВА Е.А.|заглавие=Обзор языка программирования PYTHON и его библиотек|год=2019|язык=русский|издание=COLLOQUIUM-JOURNAL|тип=|месяц=|число=|том=|номер=|страницы=|issn=}}</ref>


== См. также ==
== См. также ==
Строка 94: Строка 92:


== Литература ==
== Литература ==
{{книга
* {{книга
|автор = Николай Джосьютис
|автор = Николай Джосьютис
|заглавие = C++ Стандартная библиотека. Для профессионалов
|заглавие = C++ Стандартная библиотека. Для профессионалов
Строка 106: Строка 104:


{{rq|sources|refless}}
{{rq|sources|refless}}

{{Внешние ссылки}}


[[Категория:Библиотеки программ| ]]
[[Категория:Библиотеки программ| ]]

Текущая версия от 23:03, 28 марта 2024

Библиоте́ка (от англ. library) в программировании — сборник подпрограмм или объектов, используемых для разработки программного обеспечения (ПО). С точки зрения операционной системы (ОС) и прикладного ПО, библиотеки разделяются на динамические и статические.

Термин «библиотека подпрограмм», по всей видимости, одними из первых упомянули Уилкс М., Уиллер Д., Гилл С. в качестве одной из форм организации вычислений на компьютере[1][2]. Исходя из изложенного в их книге, под библиотекой понимался набор «коротких, заранее заготовленных программ для отдельных, часто встречающихся (стандартных) вычислительных операций»[3].

Библиотеки для компилируемых языков

[править | править код]

Динамические библиотеки

[править | править код]

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

Расширения имен файлов динамических библиотек в разных ОС
Расширение ОС Расшифровка Примечание
so UNIX англ. shared object
dylib Mac OS англ. dynamic library
library AmigaOS Хранятся в логическом томе Libs:
dll Microsoft Windows, OS/2 англ. dynamic link library

В зависимости от назначения различают:

  • Библиотеки, используемые одной программой и содержащие критические для работы программы функции. Недостаток: при отсутствии библиотеки программа не сможет работать;
  • Библиотеки, используемые одной программой и содержащие дополнительные функции. Например, библиотеки плагинов используются для расширения функционала программы;
  • Библиотеки общего пользования (англ. shared library). Содержат функции, используемые несколькими программами. Могут загружаться в адресное пространство ОС (англ. system library) для экономии памяти: одна копия библиотеки будет использоваться несколькими процессами. В силу последнего обстоятельства такие библиотеки нередко называют разделяемыми.

При написании программы программисту достаточно указать транслятору (компилятору или интерпретатору) путь к библиотеке и имя функции. Ни исходный текст функции, ни её исполняемый код в состав программы не войдут.

Достоинства:

  • экономия памяти за счёт использования одной библиотеки несколькими процессами;
  • возможность исправления ошибок (достаточно заменить файл библиотеки и перезапустить работающие программы) без изменения кода основной программы.

Недостатки:

  • возможность нарушения API , — при внесении изменений в библиотеку существующие программы могут перестать работать (утратят совместимость по интерфейсу[5]);
  • конфликт версий динамических библиотек, — разные программы могут нуждаться в разных версиях библиотеки;
  • доступность одинаковых функций по одинаковым адресам в разных процессах, — упрощает эксплуатацию уязвимостей (для решения проблемы изобретён pic (англ.)).

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

[править | править код]

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

Библиотеки, распространяемые в виде исходного кода, преобразуются транслятором в объектные файлы. Затем компоновщик[6] соединяет объектные файлы библиотек и объектные файлы вашей программы в один исполняемый файл.

Например, в исходных текстах распространяются:

  • библиотеки для языка Fortran;
  • библиотека Boost для языка C++.

Библиотеки, распространяемые в виде объектных файлов, уже готовы к компоновке. Компоновщик выполняет соединение объектных файлов библиотек и объектных файлов вашей программы во время создания исполняемого файла.

Расширения объектных файлов статических библиотек в разных ОС.

Расширение ОС
«a» UNIX
«lib» Microsoft Windows

Стандартные библиотеки многих компилируемых языков программирования (Fortran, Pascal, C, C++ и других) распространяются в виде объектных файлов.

Достоинства:

  • все необходимые функции включаются в один исполняемый файл.

Недостатки:

  • исполняемый файл занимает больше места на диске и в памяти, (если присоединяет код из объектных библиотечных файлов целиком, а не выборочно);
  • при обнаружении ошибок в библиотеке требуется пересборка всех программ.

Библиотеки для интерпретируемых языков

[править | править код]

Библиотека — файл, содержащий либо код на интерпретируемом языке, либо байт-код для виртуальной машины.

Например, библиотеки для языка Python могут распространяться либо в виде файлов с исходным кодом (расширение «py»), либо в виде файлов с байт-кодом[7] (расширение «pyc», буква «c» от англ. compiled). Одной из библиотек для языка Python является Tkinter.[8]

Примечания

[править | править код]
  1. Wilkes M. V., Wheeler D. J., Gill S. Preparation of programs for an electronic digital computer. — Addison-Wesley, 1951.
  2. Уилкс М., Уиллер Д., Гилл С. «Составление программ для электронных счётных машин». Издательство иностранной литературы, 1953
  3. Волченскова, Надежда Ивановна, Технология многомашинной реализации и жизнеобеспечения библиотек подпрограмм вычислительной математики на языке Фортран, автореферат к диссертации, 1984. Дата обращения: 9 октября 2012. Архивировано 3 мая 2012 года.
  4. Савельев А.М. ПРИМЕНЕНИЕ ДИНАМИЧЕСКОЙ БИБЛИОТЕКИ TRANLIB ДЛЯ РАСЧЕТА ТРАНСПОРТНЫХ СВОЙСТВ РЕАГИРУЮЩИХ ГАЗОВЫХ СМЕСЕЙ (рус.) // Журнал "АВИАЦИОННЫЕ ДВИГАТЕЛИ". — 2019.
  5. Robert Elder. Интерфейсы — важнейшая концепция в разработке ПО. — 2020. Архивировано 6 марта 2021 года.
  6. jsmanifest. Компоновщик в JavaScript. — 2020. Архивировано 11 сентября 2020 года.
  7. Компиляция файлов python Архивная копия от 6 февраля 2021 на Wayback Machine. Документация языка Python на сайте docs.python.org.
  8. БУХАРОВ Т.А., НАФИКОВА А.Р., МИГРАНОВА Е.А. Обзор языка программирования PYTHON и его библиотек (рус.) // COLLOQUIUM-JOURNAL. — 2019.

Литература

[править | править код]
  • Николай Джосьютис. C++ Стандартная библиотека. Для профессионалов = The C++ Standart Library. A Tutorial and Reference. — СПб.: Питер, 2004. — 730 с. — ISBN 5-94723-635-4.