Библиотека (программирование): различия между версиями
[непроверенная версия] | [отпатрулированная версия] |
Добавлена информация о интерфейсе и компоновщике |
Sigwald (обсуждение | вклад) отклонены последние 6 изменений от 80.94.171.236, Alex NB OT, 149.27.77.180, Рейму Хакурей, 213.59.158.168 и 188.124.242.208 Метка: ручная отмена |
||
(не показано 26 промежуточных версий 18 участников) | |||
Строка 2: | Строка 2: | ||
{{Значения|Библиотека (значения)}} |
{{Значения|Библиотека (значения)}} |
||
'''Библиоте́ка''' (от {{lang-en|library}}) в [[программирование|программировании]] — сборник [[подпрограмма|подпрограмм]] или [[объект (программирование)|объектов]], используемых для разработки [[программное обеспечение|программного обеспечения]] (ПО). |
'''Библиоте́ка''' (от {{lang-en|library}}) в [[программирование|программировании]] — сборник [[подпрограмма|подпрограмм]] или [[объект (программирование)|объектов]], используемых для разработки [[программное обеспечение|программного обеспечения]] (ПО).<!-- В некоторых [[язык программирования|языках программирования]] (например, в [[Python]]) то же, что и [[модуль (программирование)|модуль]], в некоторых — несколько модулей.--> С точки зрения [[операционная система|операционной системы]] (ОС) и прикладного [[программное обеспечение|ПО]], библиотеки разделяются на динамические и статические. |
||
⚫ | |||
В некоторых [[язык программирования|языках программирования]] (например, в [[Python]]) то же, что и [[модуль (программирование)|модуль]], в некоторых — несколько модулей. С точки зрения [[операционная система|операционной системы]] (ОС) и прикладного [[программное обеспечение|ПО]], библиотеки разделяются на динамические и статические. |
|||
⚫ | |||
|автор = 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> |
}}</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" |
||
Строка 45: | Строка 43: | ||
Недостатки: |
Недостатки: |
||
* возможность нарушения [[Интерфейс программирования приложений|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}}). |
||
=== Статические библиотеки === |
=== Статические библиотеки === |
||
Статическая библиотека — |
Статическая библиотека — [[Объектный модуль|объектный файл]] в виде файла (нередко может быть поставлен вместе с исходным кодом), код из которого выборочно или полностью вставляется в [[исполняемый файл|программу]] на этапе компоновки. |
||
Библиотеки, распространяемые в виде исходного кода, преобразуются [[транслятор]]ом в [[Объектный модуль|объектные файлы]]. Затем [[компоновщик]]<ref>{{Статья|ссылка=https://habr.com/ru/company/otus/blog/518634/|автор=jsmanifest|заглавие=Компоновщик в JavaScript|год=2020|язык=|издание=|тип=|месяц=|число=|том=|номер=|страницы=|issn=}}</ref> соединяет |
Библиотеки, распространяемые в виде исходного кода, преобразуются [[транслятор]]ом в [[Объектный модуль|объектные файлы]]. Затем [[компоновщик]]<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> соединяет объектные файлы библиотек и объектные файлы вашей программы в один исполняемый файл. |
||
Например, в исходных текстах распространяются: |
Например, в исходных текстах распространяются: |
||
Строка 72: | Строка 70: | ||
|} |
|} |
||
Стандартные библиотеки многих компилируемых языков программирования ([[Fortran]], [[Pascal]], [[Си (язык программирования)|C]], [[C++]] и других) распространяются в виде объектных файлов. |
Стандартные библиотеки многих компилируемых языков программирования ([[Fortran]], [[Pascal]], [[Си (язык программирования)|C]], [[C++]] и других) распространяются в виде объектных файлов. |
||
Достоинства: |
Достоинства: |
||
Строка 78: | Строка 76: | ||
Недостатки: |
Недостатки: |
||
* исполняемый файл занимает больше места на [[Постоянное запоминающее устройство|диске]] и в [[Оперативная память|памяти]], (если присоединяет код из объектных библиотечных файлов целиком а не выборочно); |
* исполняемый файл занимает больше места на [[Постоянное запоминающее устройство|диске]] и в [[Оперативная память|памяти]], (если присоединяет код из объектных библиотечных файлов целиком, а не выборочно); |
||
* при обнаружении ошибок в библиотеке требуется пересборка всех программ. |
* при обнаружении ошибок в библиотеке требуется пересборка всех программ. |
||
Строка 84: | Строка 82: | ||
Библиотека — файл, содержащий либо код на [[Интерпретируемый язык программирования|интерпретируемом]] языке, либо [[байт-код]] для [[Виртуальная машина|виртуальной машины]]. |
Библиотека — файл, содержащий либо код на [[Интерпретируемый язык программирования|интерпретируемом]] языке, либо [[байт-код]] для [[Виртуальная машина|виртуальной машины]]. |
||
Например, библиотеки для языка [[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] соединяет объектные файлы библиотек и объектные файлы вашей программы в один исполняемый файл.
Например, в исходных текстах распространяются:
Библиотеки, распространяемые в виде объектных файлов, уже готовы к компоновке. Компоновщик выполняет соединение объектных файлов библиотек и объектных файлов вашей программы во время создания исполняемого файла.
Расширения объектных файлов статических библиотек в разных ОС.
Расширение | ОС |
---|---|
«a » |
UNIX |
«lib » |
Microsoft Windows |
Стандартные библиотеки многих компилируемых языков программирования (Fortran, Pascal, C, C++ и других) распространяются в виде объектных файлов.
Достоинства:
- все необходимые функции включаются в один исполняемый файл.
Недостатки:
- исполняемый файл занимает больше места на диске и в памяти, (если присоединяет код из объектных библиотечных файлов целиком, а не выборочно);
- при обнаружении ошибок в библиотеке требуется пересборка всех программ.
Библиотеки для интерпретируемых языков
[править | править код]Библиотека — файл, содержащий либо код на интерпретируемом языке, либо байт-код для виртуальной машины.
Например, библиотеки для языка Python могут распространяться либо в виде файлов с исходным кодом (расширение «py
»), либо в виде файлов с байт-кодом[7] (расширение «pyc
», буква «c» от англ. compiled). Одной из библиотек для языка Python является Tkinter.[8]
См. также
[править | править код]Примечания
[править | править код]- ↑ Wilkes M. V., Wheeler D. J., Gill S. Preparation of programs for an electronic digital computer. — Addison-Wesley, 1951.
- ↑ Уилкс М., Уиллер Д., Гилл С. «Составление программ для электронных счётных машин». Издательство иностранной литературы, 1953
- ↑ Волченскова, Надежда Ивановна, Технология многомашинной реализации и жизнеобеспечения библиотек подпрограмм вычислительной математики на языке Фортран, автореферат к диссертации, 1984 . Дата обращения: 9 октября 2012. Архивировано 3 мая 2012 года.
- ↑ Савельев А.М. ПРИМЕНЕНИЕ ДИНАМИЧЕСКОЙ БИБЛИОТЕКИ TRANLIB ДЛЯ РАСЧЕТА ТРАНСПОРТНЫХ СВОЙСТВ РЕАГИРУЮЩИХ ГАЗОВЫХ СМЕСЕЙ (рус.) // Журнал "АВИАЦИОННЫЕ ДВИГАТЕЛИ". — 2019.
- ↑ Robert Elder. Интерфейсы — важнейшая концепция в разработке ПО. — 2020. Архивировано 6 марта 2021 года.
- ↑ jsmanifest. Компоновщик в JavaScript. — 2020. Архивировано 11 сентября 2020 года.
- ↑ Компиляция файлов python Архивная копия от 6 февраля 2021 на Wayback Machine. Документация языка Python на сайте docs.python.org.
- ↑ БУХАРОВ Т.А., НАФИКОВА А.Р., МИГРАНОВА Е.А. Обзор языка программирования PYTHON и его библиотек (рус.) // COLLOQUIUM-JOURNAL. — 2019.
Литература
[править | править код]- Николай Джосьютис. C++ Стандартная библиотека. Для профессионалов = The C++ Standart Library. A Tutorial and Reference. — СПб.: Питер, 2004. — 730 с. — ISBN 5-94723-635-4.
Для улучшения этой статьи желательно:
|