SlideShare a Scribd company logo
1 / 37
Boost.Algorithm
Что, зачем и почему
Александр Зайцев
2 / 37
Что попытаемся прояснить
● ЧТО это такое
● ЗАЧЕМ оно нам надо (или не надо)
● ПОЧЕМУ было бы неплохо это использовать
● Также мы узнаем, что же есть и что появится
интересного в этой библиотеке:)
3 / 37
План
● Что есть сейчас
● А что *возможно* будет потом
● (Если останется время) Немного внутренней
кухни
4 / 37
Boost.AlgorithmКоманда
● Marshall Clow – автор и мэйнтейнер, архитектор,
председатель LWG, code owner for libc++,
участник Boost Release Team, наверное что-то
ещё и просто очень хороший человек.
● Александр Зайцев – какой-то студент
● Приходящие авторы
5 / 37
6 / 37
Цель библиотеки
● Расширить функциональность <algorithm>
● Дать возможность пользователям на старых
компиляторах юзать фичи, которые им пока что
не завезли
● <algorithm> должен же откуда-то тянуть идеи :)
7 / 37
Структура библиотеки
Алгоритмы делятся на:
● C++11
● C++14
● String algo
● Search
● Other
8 / 37
C++11?Что есть из
● all_of
● any_of
● copy_if
● copy_n
● find_if_not
● iota
● is_partitioned
● is_permutation
● is_sorted
● none_of
● one_of
● partition_copy
9 / 37
C++14?Что есть из
● equal
● is_permutation
● mismatch
10 / 37
Строковые алгоритмы
● to_upper/to_lower
● trim/trim_left/trim_right
● join/join_if
● find_all/etc.
● starts_with/ends_with
● split
● replace functions
● erase functions
11 / 37
Split рукописный
12 / 37
Split приятный
13 / 37
Без категории
● clamp (C++17)
● gather
● hex
● is_palindrome
● is_partitioned_until
14 / 37
hex
hex ( "abcdef", out ) --> "616263646566"
hex ( "32", out ) --> "3332"
hex ( "abcdef", wout ) --> "006100620063006400650066"
hex ( "32", wout ) --> "00330032"
unhex ( "616263646566", out ) --> "abcdef"
unhex ( "3332", out ) --> "32"
unhex ( "616263646566", wout ) --> "616263646566" ( i.e, a 3 character string )
unhex ( "3332", wout ) --> "3233" ( U+3332, SQUARE HUARADDO )
unhex ( "3", out ) --> Error - not enough input
unhex ( "32", wout ) --> Error - not enough input
unhex ( "ACEG", out ) --> Error - non-hex input
15 / 37
Алгоритмы поиска
● Что уже есть:
– Бойер-Мур (C++17)
– Бойер-Мур-Хорспул (C++17)
– Кнут-Моррис-Пратт (нет и не будет)
16 / 37
Планы по развитию
● Оптимизация существующего поиска
● Умный boost::super_search
● Нечёткий поиск
● Добавление constexpr
● Параллельность
● ...
17 / 37
?Зачем меняем поиск
● std::search медленный (наивный алгоритм)
● Поисковые алгоритмы не стоят на месте
18 / 37
Сравнение алгоритмов
( )тесты Маршалла
Algorithm At Start Middle At End Not found
std::search 100.0 100.0 100.0 100.0
Boyer-Moore (procedural) 486.1 10.07 15.91 9.236
Boyer-Moore (object) 39.36 9.859 15.09 8.647
Boyer-Moore-Horspool (procedural) 154.2 9.111 12.12 8.113
Boyer-Moore-Horspool (object) 36.96 8.896 12.88 8.476
19 / 37
Будущие алгоритмы поиска
● Что, возможно, будет в будущем:
– Турбо Бойер-Мур
– Тюнингованый Бойер-Мур
– Быстрый поиск
– Алгоритм Райта
– -Мюссер Нишанов
– И много чего другого
20 / 37
Снова тесты
Название алгоритма Размер паттерна Размер алфавита
Shift-And [1; 4] [1; 4]
TVSBS [1; 4], (32; 256] [1; 4], [32; 128)
FJS [1; 4] [32; INF)
EBOM (4; 32] (128; INF)
SBNDM-BMH (4; 32] (128; INF)
HASHq (4; 256] [4; 32)
FSBNDM (32; 256] [32; INF)
SBNDMq (32; 256] [4; 32)
LBNDM (256; INF) (128; INF)
SSEF (256; INF) NA
21 / 37
Снова тесты
Название алгоритма Размер паттерна Размер алфавита
Shift-And [1; 4] [1; 4]
TVSBS [1; 4], (32; 256] [1; 4], [32; 128)
FJS [1; 4] [32; INF)
EBOM (4; 32] (128; INF)
SBNDM-BMH (4; 32] (128; INF)
HASHq (4; 256] [4; 32)
FSBNDM (32; 256] [32; INF)
SBNDMq (32; 256] [4; 32)
LBNDM (256; INF) (128; INF)
SSEF (256; INF) NA
22 / 37
(2)Снова тесты
23 / 37
-Мюссер Нишанов
24 / 37
boost::algorithm::super_search!
● „Умный“ выбор алгоритма поиска
● Использование множества алгоритмов
● Конечно же будет возможность использовать
алгоритмы напрямую
25 / 37
super_searchТекущий статус
● Написаны реализации некоторых алгоритмов
● Проведена часть тестов по выявлению
эффективности алгоритмов в различных случаях
(тестирование продолжается)
● Более-менее стабилизирован интерфейс (но это
не точно)
26 / 37
Нечёткий поиск
● Господин Маршалл желает видеть это
● Хочет что-то вроде agrep
● Нужно проводить очень много исследований
● Статус фичи: только общие идеи, когда появится
– очень нескоро
27 / 37
Оптимизация
существующего поиска
● Попробовать сделать КМП на двунаправленных
итераторах (сейчас RA). Перспективы – скорее
всего не будет.
● Поиграться со структурами данных, лежащих
под капотом БМ, БМХ. Перспективы – не
туманны.
28 / 37
constexpr
● Статус: есть pull request от Антона Полухина
● Маршаллу некогда посмотреть/смержить,
поэтому Boost.Algorithm пока что без constexpr
будет
29 / 37
Параллельность
● Очень хотелось бы иметь параллельные
алгоритмы „из коробки“
● Алгоритмы поиска сложно параллелятся
● Статус: идея в моей голове. Ведётся
исследование по выполнимости и
целесообразности этого в рамках Boost.Algorithm
30 / 37
Полезные ссылки
● Repo: https://github.com/boostorg/algorithm
● My profile: https://github.com/ZaMaZaN4iK
● SMART:
– https://www.dmi.unict.it/~faro/smart/
– https://github.com/smart-tool
31 / 37
std::exit (0);
Спасибо за внимание!
Вопросы?
32 / 37
33 / 37
Как придумываются фичи
● Команда списывается в IRC/почте
● Было бы неплохо, если бы <feature-X> появилась
● Спрашиваем у знакомых плюсовиков
● Спрашиваем в Boost mailing list (там игнор)
● Если отзывы положительные, пишем
34 / 37
Проблемы
● Команда очень занята другими делами
● Люди быстро „сливаются“
● Время отклика Маршалла
35 / 37
Оценка времени ожидания
Marshall Clowотклика
Способ связи Время ожидания Перспективность
способа
GitHub Неделя - INF Средняя
IRC Сутки - неделя Крайне высокая
Почта INF Надежда умирает
последней
36 / 37
Boost.Algorithm <algorithm>и
Лайфхак, как добавить что-то в <algorithm>:
● Пишем что-то годное в Boost.Algorithm
● Добиваемся, чтобы Маршалл посмотрел на это
● Вылизываем код, тесты, документацию, примеры
● Добиваемся, чтобы Маршалл посмотрел на это (2)
● Сливаемся в master ветку Boost.Algorithm
● Релизимся
● Пишем Маршаллу, что неплохо было бы это добавить в <algorithm>
● Готовим предложение в стандарт
● Добиваемся, чтобы Маршалл посмотрел на это (3)
● Маршалл соглашается и будет защищать вашу идею в Комитете
37 / 37
Немного уличной магии
template <typename T>
struct has_find_all
{
struct dummy { /* something */ };
template <typename C, typename P>
static auto test(P * p) ->
decltype(std::declval<C>().find_all(*p, *p, *p), std::true_type());
template <typename, typename>
static std::false_type test(...);
typedef decltype(test<T, dummy>(nullptr)) type;
static const bool value = std::is_same<std::true_type,
decltype(test<T, dummy>(nullptr))>::value;
};

More Related Content

PDF
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
PPTX
Применение фреймворка GStreamer в системе видеонаблюдения
PPTX
Asynchrony and coroutines
PDF
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
PDF
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
PDF
Парсим CSS
PDF
Hunting for a C++ package manager
PDF
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Применение фреймворка GStreamer в системе видеонаблюдения
Asynchrony and coroutines
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Парсим CSS
Hunting for a C++ package manager
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС

What's hot (20)

PPTX
Mysql vs postgresql
PPT
CUDA Course 2010 at MSU
PDF
Caching data outside Java Heap and using Shared Memory in Java
PDF
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
PDF
Профилирование кода на C/C++ в *nix системах
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
PDF
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
PPTX
Михаил Щербаков "WinDbg сотоварищи"
PDF
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
PDF
Android: Как написать приложение, которое не тормозит
PDF
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
PDF
Олег Бартунов и Иван Панченко
PDF
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
PPTX
WinDbg со товарищи
PDF
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
PDF
Константин Осипов
PDF
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
PDF
ekbpy'2012 - Михаил Коробов - Python 3
PDF
Базы данных. Введение
PDF
обзор средств разработки для вычислений Gpgpu
Mysql vs postgresql
CUDA Course 2010 at MSU
Caching data outside Java Heap and using Shared Memory in Java
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Профилирование кода на C/C++ в *nix системах
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Михаил Щербаков "WinDbg сотоварищи"
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Android: Как написать приложение, которое не тормозит
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
Олег Бартунов и Иван Панченко
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
WinDbg со товарищи
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Константин Осипов
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
ekbpy'2012 - Михаил Коробов - Python 3
Базы данных. Введение
обзор средств разработки для вычислений Gpgpu
Ad

Similar to Boost.Algorithm: что, зачем и почему (20)

PPTX
С одним плюсом (Андрей Аксёнов)
PDF
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
PDF
(Не)чёткий поиск
PDF
Cpp0x Introduction
PDF
Основы С++ (массивы, указатели). Задачи с массивами
PDF
TechTrain 2019 - (Не)адекватное техническое интервью
PDF
Поисковая технология "Спектр". Андрей Плахов, Яндекс
PDF
Запуск клуба "Поисковые системы"
PDF
Догнать и перегнать boost::lexical_cast
PDF
Как стандарт C++0x поможет в борьбе с 64-битными ошибками
PPTX
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
PDF
Devclub 01/2017 - (Не)адекватное Java-интервью
PPTX
Мастер класс по алгоритмам. Часть 1
PDF
Объектно-ориентированное программирование. Лекции 9 и 10
PDF
C++ осень 2013 лекция 7
PPTX
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
PDF
Библиотека Boost с нуля на примере Boost.DLL
PDF
C++ STL & Qt. Занятие 11.
PPT
Хочу все сжать / Андрей Аксенов (Sphinx)
PDF
книга с++
С одним плюсом (Андрей Аксёнов)
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
(Не)чёткий поиск
Cpp0x Introduction
Основы С++ (массивы, указатели). Задачи с массивами
TechTrain 2019 - (Не)адекватное техническое интервью
Поисковая технология "Спектр". Андрей Плахов, Яндекс
Запуск клуба "Поисковые системы"
Догнать и перегнать boost::lexical_cast
Как стандарт C++0x поможет в борьбе с 64-битными ошибками
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
Devclub 01/2017 - (Не)адекватное Java-интервью
Мастер класс по алгоритмам. Часть 1
Объектно-ориентированное программирование. Лекции 9 и 10
C++ осень 2013 лекция 7
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
Библиотека Boost с нуля на примере Boost.DLL
C++ STL & Qt. Занятие 11.
Хочу все сжать / Андрей Аксенов (Sphinx)
книга с++
Ad

More from corehard_by (20)

PPTX
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
PPTX
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
PDF
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
PPTX
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
PPTX
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
PPTX
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
PPTX
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
PPTX
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
PDF
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
PPTX
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
PPTX
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
PDF
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
PDF
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
PDF
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
PDF
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
PPTX
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
PDF
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
PDF
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
PDF
Статичный SQL в С++14. Евгений Захаров ➠ CoreHard Autumn 2019
PPTX
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...
C++ CoreHard Autumn 2018. Что должен знать каждый C++ программист или Как про...
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотников
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титов
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филонов
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukić
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019
Автоматизируй это. Кирилл Тихонов ➠ CoreHard Autumn 2019
Статичный SQL в С++14. Евгений Захаров ➠ CoreHard Autumn 2019
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019

Boost.Algorithm: что, зачем и почему

  • 1. 1 / 37 Boost.Algorithm Что, зачем и почему Александр Зайцев
  • 2. 2 / 37 Что попытаемся прояснить ● ЧТО это такое ● ЗАЧЕМ оно нам надо (или не надо) ● ПОЧЕМУ было бы неплохо это использовать ● Также мы узнаем, что же есть и что появится интересного в этой библиотеке:)
  • 3. 3 / 37 План ● Что есть сейчас ● А что *возможно* будет потом ● (Если останется время) Немного внутренней кухни
  • 4. 4 / 37 Boost.AlgorithmКоманда ● Marshall Clow – автор и мэйнтейнер, архитектор, председатель LWG, code owner for libc++, участник Boost Release Team, наверное что-то ещё и просто очень хороший человек. ● Александр Зайцев – какой-то студент ● Приходящие авторы
  • 6. 6 / 37 Цель библиотеки ● Расширить функциональность <algorithm> ● Дать возможность пользователям на старых компиляторах юзать фичи, которые им пока что не завезли ● <algorithm> должен же откуда-то тянуть идеи :)
  • 7. 7 / 37 Структура библиотеки Алгоритмы делятся на: ● C++11 ● C++14 ● String algo ● Search ● Other
  • 8. 8 / 37 C++11?Что есть из ● all_of ● any_of ● copy_if ● copy_n ● find_if_not ● iota ● is_partitioned ● is_permutation ● is_sorted ● none_of ● one_of ● partition_copy
  • 9. 9 / 37 C++14?Что есть из ● equal ● is_permutation ● mismatch
  • 10. 10 / 37 Строковые алгоритмы ● to_upper/to_lower ● trim/trim_left/trim_right ● join/join_if ● find_all/etc. ● starts_with/ends_with ● split ● replace functions ● erase functions
  • 11. 11 / 37 Split рукописный
  • 12. 12 / 37 Split приятный
  • 13. 13 / 37 Без категории ● clamp (C++17) ● gather ● hex ● is_palindrome ● is_partitioned_until
  • 14. 14 / 37 hex hex ( "abcdef", out ) --> "616263646566" hex ( "32", out ) --> "3332" hex ( "abcdef", wout ) --> "006100620063006400650066" hex ( "32", wout ) --> "00330032" unhex ( "616263646566", out ) --> "abcdef" unhex ( "3332", out ) --> "32" unhex ( "616263646566", wout ) --> "616263646566" ( i.e, a 3 character string ) unhex ( "3332", wout ) --> "3233" ( U+3332, SQUARE HUARADDO ) unhex ( "3", out ) --> Error - not enough input unhex ( "32", wout ) --> Error - not enough input unhex ( "ACEG", out ) --> Error - non-hex input
  • 15. 15 / 37 Алгоритмы поиска ● Что уже есть: – Бойер-Мур (C++17) – Бойер-Мур-Хорспул (C++17) – Кнут-Моррис-Пратт (нет и не будет)
  • 16. 16 / 37 Планы по развитию ● Оптимизация существующего поиска ● Умный boost::super_search ● Нечёткий поиск ● Добавление constexpr ● Параллельность ● ...
  • 17. 17 / 37 ?Зачем меняем поиск ● std::search медленный (наивный алгоритм) ● Поисковые алгоритмы не стоят на месте
  • 18. 18 / 37 Сравнение алгоритмов ( )тесты Маршалла Algorithm At Start Middle At End Not found std::search 100.0 100.0 100.0 100.0 Boyer-Moore (procedural) 486.1 10.07 15.91 9.236 Boyer-Moore (object) 39.36 9.859 15.09 8.647 Boyer-Moore-Horspool (procedural) 154.2 9.111 12.12 8.113 Boyer-Moore-Horspool (object) 36.96 8.896 12.88 8.476
  • 19. 19 / 37 Будущие алгоритмы поиска ● Что, возможно, будет в будущем: – Турбо Бойер-Мур – Тюнингованый Бойер-Мур – Быстрый поиск – Алгоритм Райта – -Мюссер Нишанов – И много чего другого
  • 20. 20 / 37 Снова тесты Название алгоритма Размер паттерна Размер алфавита Shift-And [1; 4] [1; 4] TVSBS [1; 4], (32; 256] [1; 4], [32; 128) FJS [1; 4] [32; INF) EBOM (4; 32] (128; INF) SBNDM-BMH (4; 32] (128; INF) HASHq (4; 256] [4; 32) FSBNDM (32; 256] [32; INF) SBNDMq (32; 256] [4; 32) LBNDM (256; INF) (128; INF) SSEF (256; INF) NA
  • 21. 21 / 37 Снова тесты Название алгоритма Размер паттерна Размер алфавита Shift-And [1; 4] [1; 4] TVSBS [1; 4], (32; 256] [1; 4], [32; 128) FJS [1; 4] [32; INF) EBOM (4; 32] (128; INF) SBNDM-BMH (4; 32] (128; INF) HASHq (4; 256] [4; 32) FSBNDM (32; 256] [32; INF) SBNDMq (32; 256] [4; 32) LBNDM (256; INF) (128; INF) SSEF (256; INF) NA
  • 22. 22 / 37 (2)Снова тесты
  • 23. 23 / 37 -Мюссер Нишанов
  • 24. 24 / 37 boost::algorithm::super_search! ● „Умный“ выбор алгоритма поиска ● Использование множества алгоритмов ● Конечно же будет возможность использовать алгоритмы напрямую
  • 25. 25 / 37 super_searchТекущий статус ● Написаны реализации некоторых алгоритмов ● Проведена часть тестов по выявлению эффективности алгоритмов в различных случаях (тестирование продолжается) ● Более-менее стабилизирован интерфейс (но это не точно)
  • 26. 26 / 37 Нечёткий поиск ● Господин Маршалл желает видеть это ● Хочет что-то вроде agrep ● Нужно проводить очень много исследований ● Статус фичи: только общие идеи, когда появится – очень нескоро
  • 27. 27 / 37 Оптимизация существующего поиска ● Попробовать сделать КМП на двунаправленных итераторах (сейчас RA). Перспективы – скорее всего не будет. ● Поиграться со структурами данных, лежащих под капотом БМ, БМХ. Перспективы – не туманны.
  • 28. 28 / 37 constexpr ● Статус: есть pull request от Антона Полухина ● Маршаллу некогда посмотреть/смержить, поэтому Boost.Algorithm пока что без constexpr будет
  • 29. 29 / 37 Параллельность ● Очень хотелось бы иметь параллельные алгоритмы „из коробки“ ● Алгоритмы поиска сложно параллелятся ● Статус: идея в моей голове. Ведётся исследование по выполнимости и целесообразности этого в рамках Boost.Algorithm
  • 30. 30 / 37 Полезные ссылки ● Repo: https://github.com/boostorg/algorithm ● My profile: https://github.com/ZaMaZaN4iK ● SMART: – https://www.dmi.unict.it/~faro/smart/ – https://github.com/smart-tool
  • 31. 31 / 37 std::exit (0); Спасибо за внимание! Вопросы?
  • 33. 33 / 37 Как придумываются фичи ● Команда списывается в IRC/почте ● Было бы неплохо, если бы <feature-X> появилась ● Спрашиваем у знакомых плюсовиков ● Спрашиваем в Boost mailing list (там игнор) ● Если отзывы положительные, пишем
  • 34. 34 / 37 Проблемы ● Команда очень занята другими делами ● Люди быстро „сливаются“ ● Время отклика Маршалла
  • 35. 35 / 37 Оценка времени ожидания Marshall Clowотклика Способ связи Время ожидания Перспективность способа GitHub Неделя - INF Средняя IRC Сутки - неделя Крайне высокая Почта INF Надежда умирает последней
  • 36. 36 / 37 Boost.Algorithm <algorithm>и Лайфхак, как добавить что-то в <algorithm>: ● Пишем что-то годное в Boost.Algorithm ● Добиваемся, чтобы Маршалл посмотрел на это ● Вылизываем код, тесты, документацию, примеры ● Добиваемся, чтобы Маршалл посмотрел на это (2) ● Сливаемся в master ветку Boost.Algorithm ● Релизимся ● Пишем Маршаллу, что неплохо было бы это добавить в <algorithm> ● Готовим предложение в стандарт ● Добиваемся, чтобы Маршалл посмотрел на это (3) ● Маршалл соглашается и будет защищать вашу идею в Комитете
  • 37. 37 / 37 Немного уличной магии template <typename T> struct has_find_all { struct dummy { /* something */ }; template <typename C, typename P> static auto test(P * p) -> decltype(std::declval<C>().find_all(*p, *p, *p), std::true_type()); template <typename, typename> static std::false_type test(...); typedef decltype(test<T, dummy>(nullptr)) type; static const bool value = std::is_same<std::true_type, decltype(test<T, dummy>(nullptr))>::value; };