Какие библиотеки boost обсуждаются для включения в C++17?

Для типичных потребностей программирования C++11 стал важной вехой — мы заменили 95% кода Boost стандартной библиотекой.

Но каково текущее состояние его библиотек, которые еще не включены в стандартную библиотеку?

Я начал задаваться вопросом из-за необходимости Signals2 и Lockfree.


person DuckQueen    schedule 04.06.2015    source источник


Ответы (4)


Я не буду повторять то, что уже было сделано по сети, алгоритмам, файловой системе, вариантам и прочему. Тем не менее, я могу обсудить вашу точку зрения о signal2 и немного больше.

Boost.Signals2

Boost.Signals2 был предложен в прошлом N2086 для включения в TR2. На самом деле это была скорее смесь между Boost.Signals2 и libsigc++. Судя по тому, что я читал, люди были весьма благосклонны к включению сигналов в стандарт, но над статьей требовалось больше работы, и эта работа так и не была завершена [нужна ссылка].

Теперь нужно проделать еще больше работы, чтобы адаптировать документ так, чтобы он подходил для C++17, но если кто-то готов выполнить эту задачу, сигналы, вероятно, все еще могут быть хорошими кандидатами для включения.

Boost.Контейнер

Не поймите меня неправильно, Boost.Container имеет не предлагалось для включения в C++17 в целом. Однако библиотека действительно оказывает некоторое влияние на некоторые предложения. Вот почему:

  • N4510 предлагает, чтобы некоторые стандартные контейнеры могут содержать неполные типы, поэтому у вас могут быть «рекурсивные» типы. Вот минимальный пример прямо из бумаги:

    struct Entry
    {
        std::list<Entry> messages;
        // ...
    };
    

    В документе только предлагается, чтобы std::vector, std::list и std::forward_list имели эти требования, чтобы библиотеки GCC, Clang и MSVC были совместимы со стандартом C++ 17 из коробки, и призывает их реализовывать другие стандартные контейнеры, чтобы они также могли соответствовать идиома. Этот тип рекурсивных контейнеров на самом деле является одним из первых улучшений, внесенных Boost.Container по сравнению со стандартными библиотечными контейнерами.

  • N4526 обсуждает проблемы игры промышленности и встраиваемой промышленности о C++ и его стандартной библиотеке. Среди прочего, в нем отмечается, что многие люди на самом деле просто ждут, когда кто-нибудь напишет документ, предлагающий включение boost::flat_map и boost::flat_set из Boost.Container в стандартную библиотеку. Хотя она может быть вообще не написана или, по крайней мере, не вовремя для C++17, хорошо написанная статья может быть принята. Обновление: P0038 фактически предлагает рассмотреть возможность включения плоских контейнеров в стандартную библиотеку.

Boost.Алгоритм

Хотя эта библиотека довольно новая (2012 г., Boost 1.50), она помогла сформировать некоторые новые алгоритмы, которые были включены в TS Library Fundamentals и/или в C++17:

  • N4536 и P0025 предлагает стандартизировать функцию clamp для фиксации значения между пара граничных значений. В предложениях упоминается функция clamp из Boost.Algorithm как источник вдохновения для дизайна.

  • N3905 и последующие документы, направленные на исправление Ошибка проектирования предлагает стандартизировать новые алгоритмы поиска, в первую очередь алгоритмы поиска строк Бойера-Мура и Бойера-Мура-Хорспула, которые жили в Boost.Algorithm с момента его создания.

Разное

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

  • Он не попал в C++14, но std::optional, вдохновленный Boost.Optional, должен без проблем попасть в C++17.

  • Специальные математические функции были объединены в C++17. Эти функции были частью TR1, и Boost.Math включает их уже много лет.

  • std::not_fn был объединен с C++17 и уже жил в Boost для годы.

  • P0013 предлагает добавить метафункции and_ , or_ и not_ в стандартную библиотеку и ссылается на Boost.MPL как на одну из стандартных библиотек, в которой такие функции уже давно реализованы. Обновление: принято в C++17 как std::conjunction, std::disjunction и std::negation.

  • P0033 указывает, что std::enable_shared_from_this задано слабо и рекомендует стандартизировать то же поведение, что и версия утилиты Boost. Он также предлагает стандартизировать boost::weak_from_this для полноты семейства.

  • Многие из предлагаемых функций параллелизма уже есть в Boost (std::barrier, std::latch...). Однако следует отметить, что они были реализованы в Boost, поскольку были предложены для включения в стандартную библиотеку. На этот раз это сработало наоборот. Это также касается некоторых модификаций других уже существующих классов.

person Morwenn    schedule 05.06.2015

any и variant вызвали большой интерес, а поисковый материал из Boost.Algorithm находится в TS Library Fundamentals.

Насколько я знаю, никто не предлагал Signals2 или Lockfree.

person Marshall Clow    schedule 04.06.2015

сетевая библиотека, в значительной степени основанная на boost.asio,
библиотека файловой системы, основанная на boost.filesystem

person David Haim    schedule 04.06.2015

Я не знаю, будет ли сделано это предложение для C++17, но range-v3 (во многом основанный на диапазоне повышения) предлагается для включения в стандарт C++.

person Viktor Sehr    schedule 08.06.2015