Стандартная библиотека языка программирования: что это, зачем нужна и как определяется. Обязательные и опциональные компоненты, роль в реализации языка.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Библиотека, используемая во всех реализациях языка программирования. В программировании стандартная библиотека — это библиотека, предоставляемая во всех реализациях языка программирования. Эти библиотеки обычно описываются в спецификациях языка, однако состав библиотеки, связанной с языком, может определяться (полностью или частично) и неофициальными практиками сообщества разработчиков этого языка.
Library used in all implementations of a programming language
In computer programming, a standard library is the library made available across implementations of a programming language. These libraries are conventionally described in programming language specifications; however, contents of a language's associated library may also be determined (in part or whole) by more informal practices of a language's community.
Обзор
Стандартная библиотека языка часто воспринимается пользователями как часть самого языка, хотя разработчики могут рассматривать её как отдельное целое. Многие спецификации языков определяют базовый набор, который должен быть доступен во всех реализациях, в дополнение к другим частям, реализация которых является необязательной. Таким образом, грань между языком и его библиотеками варьируется от языка к языку. Более того, некоторые языки спроектированы таким образом, что смысл определенных синтаксических конструкций невозможно описать без обращения к основной библиотеке. Например, в Java строковый литерал определяется как экземпляр класса `java.lang.String`; аналогично, в Smalltalk анонимное функциональное выражение ("блок") создает экземпляр класса `BlockContext` библиотеки. В противоположность этому, Scheme содержит несколько согласованных подмножеств, которых достаточно для построения остальной части языка в виде библиотечных макросов, поэтому разработчики языка даже не считают нужным указывать, какие части языка должны быть реализованы как языковые конструкции, а какие – как части библиотеки.
A language's standard library is often treated as part of the language by its users, although the designers may have treated it as a separate entity. Many language specifications define a core set that must be made available in all implementations, in addition to other portions which may be optionally implemented. The line between a language and its libraries therefore differs from language to language. Indeed, some languages are designed so that the meanings of certain syntactic constructs cannot even be described without referring to the core library. For example, in Java, a string literal is defined as an instance of the java. lang. String class; similarly, in Smalltalk, an anonymous function expression (a "block") constructs an instance of the library's BlockContext class. Conversely, Scheme contains multiple coherent subsets that suffice to construct the rest of the language as library macros, and so the language designers do not even bother to say which portions of the language must be implemented as language constructs, and which must be implemented as parts of a library.
Философии
Философии проектирования стандартных библиотек сильно различаются. Например, Бьярне Страуструп, создатель C++, пишет:
Philosophies of standard library design vary widely. For example, Bjarne Stroustrup, designer of C++, writes:
Это подразумевает относительно небольшую стандартную библиотеку, содержащую только те конструкции, которые "любой программист" может обоснованно потребовать при разработке большого набора программного обеспечения. Именно эта философия лежит в основе стандартных библиотек C и C++. В отличие от этого, Гидо ван Россум, разработчик Python, придерживается гораздо более широкого взгляда на стандартную библиотеку. Python стремится предоставить простой в использовании, объектно-ориентированный язык программирования высокого уровня. В учебнике по Python он пишет:
This suggests a relatively small standard library, containing only the constructs that "every programmer" might reasonably require when building a large collection of software. This is the philosophy that is used in the C and C++ standard libraries. By contrast, Guido van Rossum, designer of Python, has embraced a much more inclusive vision of the standard library. Python attempts to offer an easy to code, object oriented, high level language. In the Python tutorial, he writes:
Ван Россум далее перечисляет библиотеки для обработки XML, XML RPC, электронных писем и локализации – функциональные возможности, которые отсутствуют в стандартной библиотеке C++. Эта другая философия часто встречается в скриптовых языках (таких как Python или Ruby) или языках, использующих виртуальную машину, например Java или языки платформы .NET. В C++ такие возможности не входят в стандартную библиотеку, а предоставляются другими библиотеками, такими как Boost.
Van Rossum goes on to list libraries for processing XML, XML RPC, email messages, and localization, facilities that the C++ standard library omits. This other philosophy is often found in scripting languages (as in Python or Ruby) or languages that use a virtual machine, such as Java or the NET Framework languages. In C++, such facilities are not part of the standard library, but instead are included in other libraries, such as Boost.