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

What's hot (20)

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

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

PPTX
С одним плюсом (Андрей Аксёнов)
Unigine Corp.
 
PDF
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
OdessaJS Conf
 
PDF
(Не)чёткий поиск
corehard_by
 
PDF
Cpp0x Introduction
Fedor Vompe
 
PDF
Основы С++ (массивы, указатели). Задачи с массивами
Olga Maksimenkova
 
PDF
TechTrain 2019 - (Не)адекватное техническое интервью
Anton Arhipov
 
PDF
Поисковая технология "Спектр". Андрей Плахов, Яндекс
yaevents
 
PDF
Запуск клуба "Поисковые системы"
dbarashev
 
PDF
Догнать и перегнать boost::lexical_cast
Roman Orlov
 
PDF
Как стандарт C++0x поможет в борьбе с 64-битными ошибками
Tatyanazaxarova
 
PPTX
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
corehard_by
 
PDF
Devclub 01/2017 - (Не)адекватное Java-интервью
Anton Arhipov
 
PPTX
Мастер класс по алгоритмам. Часть 1
Pavel Egorov
 
PDF
Объектно-ориентированное программирование. Лекции 9 и 10
Dima Dzuba
 
PDF
C++ осень 2013 лекция 7
Technopark
 
PPTX
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
corehard_by
 
PDF
Библиотека Boost с нуля на примере Boost.DLL
Platonov Sergey
 
PDF
C++ STL & Qt. Занятие 11.
Igor Shkulipa
 
PPT
Хочу все сжать / Андрей Аксенов (Sphinx)
Ontico
 
PDF
C++ for real_programmers
daemon025
 
С одним плюсом (Андрей Аксёнов)
Unigine Corp.
 
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
OdessaJS Conf
 
(Не)чёткий поиск
corehard_by
 
Cpp0x Introduction
Fedor Vompe
 
Основы С++ (массивы, указатели). Задачи с массивами
Olga Maksimenkova
 
TechTrain 2019 - (Не)адекватное техническое интервью
Anton Arhipov
 
Поисковая технология "Спектр". Андрей Плахов, Яндекс
yaevents
 
Запуск клуба "Поисковые системы"
dbarashev
 
Догнать и перегнать boost::lexical_cast
Roman Orlov
 
Как стандарт C++0x поможет в борьбе с 64-битными ошибками
Tatyanazaxarova
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
corehard_by
 
Devclub 01/2017 - (Не)адекватное Java-интервью
Anton Arhipov
 
Мастер класс по алгоритмам. Часть 1
Pavel Egorov
 
Объектно-ориентированное программирование. Лекции 9 и 10
Dima Dzuba
 
C++ осень 2013 лекция 7
Technopark
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
corehard_by
 
Библиотека Boost с нуля на примере Boost.DLL
Platonov Sergey
 
C++ STL & Qt. Занятие 11.
Igor Shkulipa
 
Хочу все сжать / Андрей Аксенов (Sphinx)
Ontico
 
C++ for real_programmers
daemon025
 
Ad

More from corehard_by (20)

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

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; };