SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Немного о Boost
Antony Polukhin
Полухин Антон
Boost libraries maintainer (DLL, LexicalCast, Any, TypeIndex, Conversion)
+ Boost.CircularBuffer, Boost.Variant
Содержание
* Вести с полей разработки
* Из Boost в C++ Standard
* Проблемы
* Полезности
* Boost онлайн
Новости
* AFIO — на доработке
* Fiber — на доработке
* Compute — в ближайшем релизе
* DLL — в ближайшем релизе
* Hana — в ближайшем релизе
Compute
// create a vector on the device
compute::vector<float> device_vector(host_vector.size(), context);
// transfer data from the host to the device
compute::copy(
host_vector.begin(), host_vector.end(), device_vector.begin(),
queue
);
// calculate the square-root of each element in-place
compute::transform(
device_vector.begin(),
device_vector.end(),
device_vector.begin(),
compute::sqrt<float>(),
queue
);
DLL
#include <boost/dll.hpp>
auto cpp11_func = boost::dll::import<int(std::string&&)>(
path_to_shared_library, "i_am_a_cpp11_function"
);
cpp11_func("Hello");
DLL
#include <boost/dll/smart_library.hpp>
dll::smart_library sm("libcpp.so");
auto ovl1 = sm.get_function<void(int)> ("overloaded");
auto ovl2 = sm.get_function<void(double)>("overloaded");
Hana
auto animals = hana::make_tuple(
Fish{"Nemo"}, Cat{"Garfield"}, Dog{"Snoopy"}
);
// Access tuple elements with operator[] instead of std::get.
Cat garfield = animals[1_c];
// Perform high level algorithms on tuples (this is like std::transform)
auto names = hana::transform(animals, [](auto a) {
return a.name;
});
В стандарт C++!
* Filesystem
* Thread
* Variant
* ASIO
* optional
* any
* string_ref→string_view
* and_/or_→
conjunction/disjunction
Проблемы в Boost
* Долго компилируется
* Большой объём бинарных файлов
Долго компилируется
Советы:
* Современный компилятор
* Spirit, GIL, Fusion в cpp файлах
Мы исправляемся:
* Уменьшение зависимостей
* Variadic templates
* Убрали поддержку старых компиляторов
Большой объём
бинарных файлов
С каждым годом лучше:
* noexcept
* variadic templates
* SCARY iterators
* -fvisibility=hidden
Советы:
RTTI on *
-fvisibility=hidden *
современный компилятор *
Полезности
Полезности
class task_type;
class work_queue {
std::deque<task_type> tasks_;
boost::mutex tasks_mutex_;
boost::condition_variable condition_variable_;
public:
void push_task(const task_type& task) {
boost::unique_lock<boost::mutex> lock(tasks_mutex_);
tasks_.push_back(task);
condition_variable_.notify_one();
}
// ...
task_type pop_task();
};
Полезности
class task_type;
class work_queue {
std::deque<task_type> tasks_;
boost::mutex tasks_mutex_;
boost::condition_variable condition_variable_;
public:
void push_task(const task_type& task) {
boost::unique_lock<boost::mutex> lock(tasks_mutex_);
tasks_.push_back(task);
lock.unlock(); // up to 2 times faster
condition_variable_.notify_one();
}
// ...
task_type pop_task();
};
Полезности
task_type pop_task() {
boost::unique_lock<boost::mutex> lock(tasks_mutex_);
while (tasks_.empty()) {
condition_variable_.wait(lock);
}
task_type ret = tasks_.front();
tasks_.pop_front();
return ret;
}
void push_task(const task_type& task) {
boost::unique_lock<boost::mutex> lock(tasks_mutex_);
tasks_.push_back(task);
lock.unlock();
condition_variable_.notify_one();
}
Полезности
#include <vector>
#include <boost/shared_ptr.hpp>
auto foo() {
std::vector< boost::shared_ptr<int> > res;
for (unsigned i = 0; i < 1000; ++i)
res.push_back(
boost::shared_ptr<int>(new int)
);
return res;
}
Полезности
#include <vector>
#include <boost/shared_ptr.hpp>
auto foo() {
std::vector< boost::shared_ptr<int> > res;
res.reserve(1000);
for (unsigned i = 0; i < 1000; ++i)
res.push_back(
boost::shared_ptr<int>(new int)
);
return res;
}
Полезности
#include <vector>
#include <boost/shared_ptr.hpp>
auto foo() {
std::vector< boost::shared_ptr<int> > res;
res.reserve(1000);
for (unsigned i = 0; i < 1000; ++i)
res.push_back(
boost::make_shared<int>()
);
return res;
}
Полезности: set<int>
Выделенная под 1 нод память 64 Byte:
|||||||| |||||||| |||||||| |||||||| |||||||| |||||||| |||||||| ||||||||
| - вспомогательные данные аллокатора
| - node's parent | - node's left / right
| - data
| - неиспользованные байты кеша
container::flat_set<int>
В одной кеш линии x86 64 Byte:
|||||||| |||||||| |||||||| |||||||| |||||||| |||||||| |||||||| ||||||||
| - вспомогательные данные аллокатора
| - data
14 int в одной кеш линии
container::small_vector
#include <vector>
std::vector<int> data;
// Usually we get less than 16 ints
data.reserve(16);
get_some_data(data);
container::small_vector
#include <boost/container/small_vector.hpp>
// Usually we get less than 16 ints
boost::small_vector<int, 16> data;
get_some_data(data);
Полезности: Predef
#if !defined(__clang__) 
&& !defined(__ICC) 
&& !defined(__INTEL_COMPILER) 
&& (defined(__GNUC__) 
|| defined(__GNUG__))
// GCC specific
#endif
Полезности: Predef
#include <boost/predef/compiler.h>
#if BOOST_COMP_GNUC
// GCC specific
#endif
Boost онлайн
Boost онлайн
Boost онлайн
http://apolukhin.github.io/Boost-Cookbook-4880OS/

Mais conteúdo relacionado

Mais procurados

Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
victor-yastrebov
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Dima Dzuba
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
Eugeniy Tyumentcev
 

Mais procurados (20)

Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++Павел Беликов, Как избежать ошибок, используя современный C++
Павел Беликов, Как избежать ошибок, используя современный C++
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптер
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типов
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон ПолухинC++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухин
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Как за час сделать недельную работу
Как за час сделать недельную работуКак за час сделать недельную работу
Как за час сделать недельную работу
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
 

Destaque

Destaque (17)

Дмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI векеДмитрий Нестерук, Паттерны проектирования в XXI веке
Дмитрий Нестерук, Паттерны проектирования в XXI веке
 
EEON103 Хичээл 8
EEON103 Хичээл 8EEON103 Хичээл 8
EEON103 Хичээл 8
 
Institute for Sustainable Technology
Institute for Sustainable TechnologyInstitute for Sustainable Technology
Institute for Sustainable Technology
 
Indonesia Domestic Vehicle Sales by Segment August 2015
Indonesia Domestic Vehicle Sales by Segment August 2015Indonesia Domestic Vehicle Sales by Segment August 2015
Indonesia Domestic Vehicle Sales by Segment August 2015
 
Thought Leadership B2B Marketing
Thought Leadership B2B MarketingThought Leadership B2B Marketing
Thought Leadership B2B Marketing
 
Thailand Domestic Vehicle Sales by Segment 2015-12
Thailand Domestic Vehicle Sales by Segment 2015-12Thailand Domestic Vehicle Sales by Segment 2015-12
Thailand Domestic Vehicle Sales by Segment 2015-12
 
"Солонгос хэлний орчуулгын онол" Хичээл-7
 "Солонгос хэлний орчуулгын онол" Хичээл-7 "Солонгос хэлний орчуулгын онол" Хичээл-7
"Солонгос хэлний орчуулгын онол" Хичээл-7
 
Unit tests final
Unit tests finalUnit tests final
Unit tests final
 
Дмитрий Кашицын, Вывод типов в динамических и не очень языках I
Дмитрий Кашицын, Вывод типов в динамических и не очень языках IДмитрий Кашицын, Вывод типов в динамических и не очень языках I
Дмитрий Кашицын, Вывод типов в динамических и не очень языках I
 
2015-00 Automotive Indonesia Car Population
2015-00 Automotive Indonesia Car Population2015-00 Automotive Indonesia Car Population
2015-00 Automotive Indonesia Car Population
 
2016-06 Thailand Car Sales PPV June 2016
2016-06 Thailand Car Sales PPV June 20162016-06 Thailand Car Sales PPV June 2016
2016-06 Thailand Car Sales PPV June 2016
 
Дмитрий Демчук. Кроссплатформенный краш-репорт
Дмитрий Демчук. Кроссплатформенный краш-репортДмитрий Демчук. Кроссплатформенный краш-репорт
Дмитрий Демчук. Кроссплатформенный краш-репорт
 
Modal verbs буюу баймж үйл үгс
Modal verbs буюу баймж үйл үгсModal verbs буюу баймж үйл үгс
Modal verbs буюу баймж үйл үгс
 
Михаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STLМихаил Матросов, Повседневный С++: boost и STL
Михаил Матросов, Повседневный С++: boost и STL
 
Indonesia Automotive Statistics December 2015
Indonesia Automotive Statistics December 2015Indonesia Automotive Statistics December 2015
Indonesia Automotive Statistics December 2015
 
Thailand Automotive Sales Statistics by Segment February 2016
Thailand Automotive Sales Statistics by Segment February 2016Thailand Automotive Sales Statistics by Segment February 2016
Thailand Automotive Sales Statistics by Segment February 2016
 
Платоны үзэл санаа
Платоны үзэл санааПлатоны үзэл санаа
Платоны үзэл санаа
 

Semelhante a Антон Полухин, Немного о Boost

DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
Dmitry Soshnikov
 
Observable как атом приложения
Observable как атом приложенияObservable как атом приложения
Observable как атом приложения
Artem Bey
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
phpdevby
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Mikhail Kurnosov
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
tyomo4ka
 

Semelhante a Антон Полухин, Немного о Boost (20)

Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммы
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
Иван Пузыревский — Введение в асинхронное программирование
Иван Пузыревский — Введение в асинхронное программированиеИван Пузыревский — Введение в асинхронное программирование
Иван Пузыревский — Введение в асинхронное программирование
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
 
Asynchrony and coroutines
Asynchrony and coroutinesAsynchrony and coroutines
Asynchrony and coroutines
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
Observable как атом приложения
Observable как атом приложенияObservable как атом приложения
Observable как атом приложения
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
Yii: миграции и инсталляции
Yii: миграции и инсталляцииYii: миграции и инсталляции
Yii: миграции и инсталляции
 
Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
 
Экскурсия по Flutter SDK
Экскурсия по Flutter SDKЭкскурсия по Flutter SDK
Экскурсия по Flutter SDK
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 

Mais de Sergey Platonov

Mais de Sergey Platonov (18)

Антон Бикинеев, Reflection in C++Next
Антон Бикинеев,  Reflection in C++NextАнтон Бикинеев,  Reflection in C++Next
Антон Бикинеев, Reflection in C++Next
 
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itEvgeniy Muralev, Mark Vince, Working with the compiler, not against it
Evgeniy Muralev, Mark Vince, Working with the compiler, not against it
 
Василий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексиейВасилий Сорокин, Простой REST сервер на Qt с рефлексией
Василий Сорокин, Простой REST сервер на Qt с рефлексией
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
 
Антон Бикинеев, Writing good std::future&lt; C++ >
Антон Бикинеев, Writing good std::future&lt; C++ >Антон Бикинеев, Writing good std::future&lt; C++ >
Антон Бикинеев, Writing good std::future&lt; C++ >
 
Павел Филонов, Разделяй и управляй вместе с Conan.io
Павел Филонов, Разделяй и управляй вместе с Conan.ioПавел Филонов, Разделяй и управляй вместе с Conan.io
Павел Филонов, Разделяй и управляй вместе с Conan.io
 
Антон Полухин. C++17
Антон Полухин. C++17Антон Полухин. C++17
Антон Полухин. C++17
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
 
Алексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhereАлексей Кутумов, Coroutines everywhere
Алексей Кутумов, Coroutines everywhere
 
Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...Dori Exterman, Considerations for choosing the parallel computing strategy th...
Dori Exterman, Considerations for choosing the parallel computing strategy th...
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
 
Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++Антон Нонко, Классические строки в C++
Антон Нонко, Классические строки в C++
 
Алексей Кутумов, Вектор с нуля
Алексей Кутумов, Вектор с нуляАлексей Кутумов, Вектор с нуля
Алексей Кутумов, Вектор с нуля
 
Kirk Shoop, Reactive programming in C++
Kirk Shoop, Reactive programming in C++Kirk Shoop, Reactive programming in C++
Kirk Shoop, Reactive programming in C++
 
Илья Шишков, Принципы создания тестируемого кода
Илья Шишков, Принципы создания тестируемого кодаИлья Шишков, Принципы создания тестируемого кода
Илья Шишков, Принципы создания тестируемого кода
 
Антон Наумович, Система автоматической крэш-аналитики своими средствами
Антон Наумович, Система автоматической крэш-аналитики своими средствамиАнтон Наумович, Система автоматической крэш-аналитики своими средствами
Антон Наумович, Система автоматической крэш-аналитики своими средствами
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кода
 

Антон Полухин, Немного о Boost