Стандартна бібліотека
У програмуванні стандартна бібліотека (англ. standard library) — це бібліотека, що доступна в усіх реалізаціях даної мови програмування. Зміст такої бібліотеки зазвичай описано в специфікації мови, однак також він може частково або повністю визначатися більш неформальними практиками програмістів, що користуються нею.
Зазвичай користувачі мови програмування вважають стандартну бібліотеку її частиною, хоча можливо, що розробники ставилися до неї як до окремого об'єкту. В багатьох мовах специфікацією визначається базовий функціонал, який повинен бути присутній в усіх реалізаціях, в доповненні до інших можливостей, реалізація яких необов'язкова. Таким чином, межа між мовою програмування та її бібліотеками індивідуальна для кожної мови. Дійсно — деякі мови розроблено таким чином, що значення певних синтаксичних конструкцій навіть не може бути описано без посилань до стандартної бібліотеки. Наприклад, в Java рядковий літерал[en] визначається як екземпляр класу java.lang.String; аналогічно в Smalltalk анонімний функціональний вираз («блок») створює BlockContext — екземпляр класу стандартної бібліотеки. З іншого боку, Scheme містить декілька когерентних підмножин, яких досить для того, щоб побудувати решту мови як макрос бібліотеки, і тому розробникам мови навіть не потрібно вказувати, які частини мови повинно бути реалізовано в вигляді мовних конструкцій, а які — у вигляді складу стандартної бібліотеки.
Стандартні бібліотеки, як правило, включають в себе визначення для часто використовуваних алгоритмів, структур даних та механізмів введення-виведення. Залежно від обмежень конкретної мови стандартна бібліотека може складатися з:
Більшість стандартних бібліотек включають в себе визначення принаймні таких найчастіше використовуваних інструментів як:
- Алгоритми (такі як алгоритми сортування)
- Структури даних (наприклад, списки, дерева, хеш-таблиці тощо)
- Взаємодія з відповідною платформою (введення-виведення, системні виклики та ін.)
Погляди на основні принципи проектування стандартної бібліотеки дуже різняться. Наприклад, Б'ярн Страуструп, розробник C++, пише:
Що повинно бути в стандартній бібліотеці C++? Одним ідеалом була б змога для програміста знайти у ній будь-який цікавий, необхідний та у певній мірі загальний клас, функцію, шаблон тощо. Проте питання було не «Що повинно бути в якійсь бібліотеці?», а «Що повинно бути в стандартній бібліотеці?» Відповідь «Усе!» є розумним першим наближенням відповіді на перше питання, але не на останнє. Стандартна бібліотека — це щось, що повинен забезпечувати кожен розробник кожної реалізації, на що міг би розраховувати кожен програміст.[1] |
Це передбачає відносно невелику стандартну бібліотеку, яка містить тільки конструкції, які «кожен програміст» міг би розумно вимагати при розробці складної програми. Цей підхід використовується в стандартних бібліотеках C та C++.
На противагу цьому, Гвідо ван Россум, розробник Python, має набагато ширше бачення стандартної бібліотеки; в навчальному посібнику з Python він пише:
Python дотримується принципу «разом з батарейками». Це найкраще помітно в складних та стійких можливостях його великих пакетів.[2] |
Ван Россум перераховує бібліотеки для обробки XML, XML-RPC, роботи з електронною поштою та локалізації — засоби, які стандартна бібліотека C++ не включає. Цей підхід часто зустрічається в скриптових мовах (таких як в Python або Ruby) або в мовах, які використовують віртуальну машину (наприклад, Java або .NET Framework). У C++ такі інструменти не є частиною стандартної бібліотеки, але замість того присутні в інших бібліотеках (таких як Boost).