SlideShare ist ein Scribd-Unternehmen logo
1 von 37
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;
};

Weitere ähnliche Inhalte

Was ist angesagt?

Caching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaCaching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in Java
Andrei Pangin
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Badoo Development
 
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Ontico
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Ontico
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Ontico
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
Elena Kotina
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли..."Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
Ontico
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3
it-people
 
обзор средств разработки для вычислений Gpgpu
обзор средств разработки для вычислений Gpgpuобзор средств разработки для вычислений Gpgpu
обзор средств разработки для вычислений Gpgpu
COMAQA.BY
 

Was ist angesagt? (20)

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

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

Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Nikolay Samokhvalov
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
Alexey Tokar
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Ontico
 
Big Data - первые шаги
Big Data - первые шагиBig Data - первые шаги
Big Data - первые шаги
Anton Gorokhov
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Nikolay Samokhvalov
 

Ähnlich wie Boost.Algorithm: что, зачем и почему (20)

Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложений
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
 
Пути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияПути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обучения
 
Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL
 
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
 
Big Data - первые шаги
Big Data - первые шагиBig Data - первые шаги
Big Data - первые шаги
 
Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricks
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчика
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”
 

Mehr von corehard_by

C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
corehard_by
 
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia KazakovaC++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakova
corehard_by
 
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...
corehard_by
 

Mehr von corehard_by (20)

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