- PVSM.RU - https://www.pvsm.ru -
Так вышло, что у меня получилось принять участие в работе конференции [1], посвящённой C++. Уровень, конечно, не GoingNative: доклады были разного уровня. Как очень сильные и интересные, так и совсем пустые. Самым главным для меня была атмосфера — давно я ни с кем лично не обсуждал столько интересных тем. Это мне так понравилась, что я загорелся идеей создать в Санкт-Петербурге C++ User Group, чтобы больше общаться лично с коллегами по цеху. Но об этом как-нибудь потом, а пока о конференции. Не буду описывать и пересказывать все доклады, отмечу только наиболее интересные мне темы и темы, которые затрагивались почти в каждом докладе.
Сама по себе move-семантика, думаю, всем знакома. Беглый поиск даёт несколько постов на Хабре (1 [2], 2 [3], 3 [4]). Почти каждый докладчик выжимал из неё что-то своё. Из интересного, Эрик Ниблер порассуждал о том, как теперь лучше передавать параметры функциям и что из них возвращать. С учётом sink-аргументов и того, что компилятор может опознать rvalue, получилась замечательная сводная табличка1 [5].
Параметры | Рекомендации для C++11 |
---|---|
Входные: маленькие и sink значения все остальные |
Передаём по значению const ref |
Выходные | Передаём по значению |
Входные/Выходные | Используем stateful algorithm object2 [6] |
Кроме общих слов, вроде «асинхронность начинается с дизайна» в основном звучали жалобы: ведь асинхронного ввода/вывода в языке до сих пор нет. Понятно, что асинхронная программа при синхронном вводе/выводе теряет всякий смысл. Поэтому были разговоры о будущих стандартах, об std::async и std::future, но, к сожалению, пока асинхронность в C++ скорее мертва, чем жива. Можно использовать много разных хороших библиотек или платформозависимых решений, но язык как стоял на этом месте, так и стоит.
Согласно заявлениям универсальная асинхронная модель будет включена только в C++17. Пока можно познакомится с её описанием здесь [7].
Что же конкретно нам можно использовать в ожидании этого рая на земле? Ничего нового!
Всё также печально как с асинхронностью (если не хуже). Представитель WG21/SG4 [8] (исследовательская группа в комитете по стандартизации, занимающаяся сетью) привел их роадмап на ближайшие годы:
Лично меня очень угнетает, что HTTP в стандарте появится раньше чем сокеты. Если я правильно понимаю, это связано с тем, что востребованность HTTP значительно выше.
Как только говорим о повышении производительности, сразу в разговор врываются голоса: «Как мне правильно масштабировать приложение на несколько ядер?» и «Как мне оптимизировать приложение под embedded?». Если Вы думаете, что C++ и embedded это нонсенс, то вот список документов для ознакомления:
В аспекте же C++11 обе проблемы могут рассмотрены с общих позиций.
Кстати, по поводу std::shared_ptr. В обзоре Going Native'2012 [10] есть упоминание того, почему стоит использовать std::make_shared вместо конструктора std::shared_ptr:
auto sp1 = make_shared<T>( args ); // 1 allocation, 24 bytes overhead shared_ptr<T> sp2( new T( args ) ); // 2 allocations, 40 bytes overhead
Райнер Гримм не поленился сравнить производительность разных подходов, включая обычные указатели, std::shared_ptr и std::unique_ptr.3 [11]
auto st = std::chrono::system_clock::now();
for (long long i=0 ; i < 100000000; ++i){
int* tmp(new int(i));
delete tmp;
// std::unique_ptr<int> tmp(new int(i));
// std::shared_ptr<int> tmp(new int(i));
// std::shared_ptr<int> tmp= std::make_shared<int>(i);
}
std::chrono::duration<double> dur=std::chrono::system_clock::now() - st();
std::cout << dur.count();
Получил такую сравнительную таблицу.
pointer type | real hardware | virtualization |
---|---|---|
native | 3.0 sec. | 5.7 sec. |
std::unique_ptr | 2.9 sec. | 5.7 sec. |
std::shared_ptr | 6.0 sec. | 11.8 sec. |
std::make_shared | 6.5 sec. |
Автор: sermp
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/konferentsiya/49053
Ссылки в тексте:
[1] конференции: http://meetingcpp.com/index.php/mcpp2013.html
[2] 1: http://habrahabr.ru/post/140578/
[3] 2: http://habrahabr.ru/post/174019/
[4] 3: http://habrahabr.ru/post/140699/
[5] 1: #1
[6] 2: #2
[7] здесь: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3747.pdf
[8] WG21/SG4: https://github.com/SG4/draft/wiki
[9] Technical Report on C++ Performance: http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf
[10] обзоре Going Native'2012: http://habrahabr.ru/post/139064/
[11] 3: #4
[12] Eric Niebler, C++11 and No-Compromise Library Design: http://meetingcpp.com/tl_files/2013/talks/Keynote-cxx11-library-design-ericniebler.pdf
[13] Out Parameters, Move Semantics, and Stateful Algorithms: http://ericniebler.com/2013/10/13/out-parameters-vs-move-semantics/
[14] Rainer Grimm, Embedded Programming with C++11: http://meetingcpp.com/tl_files/2013/talks/EmbeddedC++11%20-%20RainerGrimm.pdf
[15] Источник: http://habrahabr.ru/post/203310/
Нажмите здесь для печати.