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

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

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

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

Ответы

Ответ 1

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

Boost.Signals2

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

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

Boost.Container

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

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

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

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

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

Boost.Algorithm

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

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

  • N3905 и последующие документы, направленные на исправление ошибки дизайна, предполагают стандартизацию новых алгоритмов поиска, в первую очередь Boyer-Moore и алгоритмы поиска строк Boyer-Moore-Horspool, которые жили в Boost.Algorithm с момента его создания.

Разное

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

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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