Библиотека Boost - классификация часть 3

Заканчивая тему общей классификации, перед тем как перейти к собственно описанию библиотек, хотелось бы дать краткое описание каждой группы. Еще пришла в голову мысль о том, что неплохо бы библиотеки классифицировать по уровню сложности; начинать всегда лучше с простого и постепенно переходить к сложному.
Итак, пробуем.

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

Что это такое? Ни для кого не секрет, что С++ - язык весьма несовершенный. Многие вещи, которые по моему глубокому убеждению стоило бы реализовать как часть самого языка, в С++ просто отсутствуют; в результате многие программисты пытаются с разной степенью успешности реализовать их в виде библиотек.

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

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

"Математика" содержит прикладные библиотеки для работы с различными математическими сущностями. Сюда относятся всевозможные матрицы, комплексные числа, кватерионы; тригонометрические функции; всевозможная геометрия; решение различных уравнений и т.д.

"Числа" содержит библиотеки для работы с числами как таковыми; отличие от математики в том, что здесь большая ориентированность не на математические абстракции, а на собственно числа как данные: сюда относятся библиотеки для генерации случайных чисел и уникальных идентификаторов; расчет контрольных сумм различных типов (CRC, MD5 и т.д.); работа с длинной арифметикой; метаинформация о числовых типах (хотя длинные числа и метаинформацию о числовых типах я также отношу и к "эмуляции языковых фич").

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

"Коллекции" содержит различные структуры данных, такие как списки, массивы, деревья и т.д. По сути это расширение контейнеров stl.

"Структуры данных" содержит прочие структуры данных, не вошедшие в "коллекции"; граница между ними весьма условна, но она все-же есть, причем и в официальной классификации Буста тоже.

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

"Метапрограммирование" содержит различные библиотеки для разного рода метапрограммирования на шаблонах; группа достаточно сложна (пожалуй, сложнейшая часть Буста - по крайней мере для меня),

"Препроцессор" содержит библиотеки для метапрограммирования на препроцессоре, доставшемся С++ еще от Си. Да, и такое оказывается тоже возможно! Эта тема не менее сложная, и по моему убеждению, такое пересекается с эмуляцией языковых фич.

 "Кортежи" используется для эмуляции кортежей в С++ и также содержит различные вспомогательные сущности для действий, которые могли бы выполняться очень просто и естественно, будь поддержка кортежей в язык встроенной и полноценной. Я целиком отношу кортежи к "эмуляции языковых фич".

"Параллельное программирование" содержит библиотеки для многопоточного программирования. Это достаточно сложная тема.

"Строки и текст" включает в себя библиотеки для работы с текстовыми строками - начиная от уровня кодировок и заканчивая различными алгоритмами обработки строк, поиска, замены, форматирования и т.д.

"Память и сериализация" содержит реализации различных умных указателей; также сюда относится библиотека для сериализации данных, хотя возможно ее стоит отнести к отдельной группе или включить в какую-то другую.

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

"Динамический полиморфизм" состоит из библиотек для различной реализации концепций динамического (позднего) связывания и полиморфизма; в частности, сюда относятся библиотеки для работы с сигналами и слотами средствами исключительно С++, что весьма интересно - так как реализация такого функционала в Qt потребовала специального метаобъектного компилятора.

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

No comments:

Post a Comment