Как стать автором
Обновить

Magnit Tech++ Meet Up 29.11 – поговорим о C++

Блог компании Магнит C++ *Разработка под Linux *Конференции
29 ноября в 17:00 (Мск, GMT+3) пройдет бесплатный онлайн-митап для C++ разработчиков от команды POS-систем «Магнита» и JUG.RU.

Кассовая платформа «Магнита» — один из самых масштабных проектов компании. Она выдерживает 5 миллионов чеков в день, устанавливается даже на маломощное железо и способна работать даже в условиях апокалипсиса. А еще это 5 лет развития, 500 тысяч строк кода и сильнейшая команда экспертов в C++.

Проведет митап Антон Дмитриев, директор по производству JUG.RU.

На митапе спикеры из команды «Магнита» — Александр Крикунов, Дмитрий Пестеха и Дмитрий Архипов — поделятся опытом разработки на плюсах, методами и инструментами.

Антон Полухин из Yandex Go расскажет о новых стандартах языка С++. Антон — автор нескольких принятых предложений к стандарту языка и Boost-библиотек, признанный эксперт в С++.

image

Под катом – еще больше информации о докладах, а также о розыгрыше призов.
Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 2.1K
Комментарии 2

speedtest.net via C++

C++ *
Весь нижеприведенный код — выдержка из одного моего недавнего проекта, в рамках которого было необходимо определять скорость download и upload. Изобретать велосипед было неохота, посему возникло желание воспользоваться сервисом www.speedtest.net, как наиболее уважаемым и работоспособным из сервисов такого типа. Впрочем, как показала практика, он оказался вполне недружелюбным и некий велосипед таки пришлось изобрести.

Итак, добро пожаловать под кат.
Всего голосов 32: ↑26 и ↓6 +20
Просмотры 6K
Комментарии 17

Оглашены финалисты конкурса хэш-алгоритмов SHA-3

Криптография *
Национальный институт стандартов и технологии США (NIST) огласил список претендентов, которые вышли в финальную стадию конкурса по отбору стандартного хэш-алгоритма SHA-3.

Указаны название алгоритма, ссылка на официальный сайт алгоритма и один из разработчиков, от имени которого была подана заявка.

BLAKE (Jean-Philippe Aumasson)
Grøstl (Lars Ramkilde Knudsen)
JH (Hongjun Wu)
Keccak (Joan Daemen)
Skein (Брюс Шнайер)
Читать дальше →
Всего голосов 36: ↑32 и ↓4 +28
Просмотры 3.1K
Комментарии 26

«Облегчённая» реализация контейнера vector

C++ *
Из песочницы
   Шаблон vector библиотеки STL выигрывает почти по всем параметрам у обычного С++ массива. Он позволяет добавлять и удалять элементы, освобождает выделенную память при уничтожении, позволяет контролировать выход за пределы массива и т.д. Тем не менее, у него есть один недостаток – для его работы требуется дополнительная память, небольшая, но в ряде случаев существенная. Ниже рассмотрена реализация контейнера, позволяющая немного снизить затраты памяти и повысить производительность.
Читать дальше →
Всего голосов 61: ↑51 и ↓10 +41
Просмотры 15K
Комментарии 48

Доработка контейнера vector для работы с большими объемами данных

C++ *
Из песочницы
В процессе чтения статьи «Облегчённая» реализация контейнера vector вспомнился свой опыт борьбы с вектором. Собственно этим опытом я и хотел бы поделиться.

Да, при размерности массива 10000 элементов, лишний указатель в реализации элемента доставит ощутимые неудобства, но настоящая проблема памяти при использовании vector в полной мере проявляется несколько иначе.

Читать дальше →
Всего голосов 49: ↑37 и ↓12 +25
Просмотры 3.2K
Комментарии 48

Совет 23. Рассмотрите возможность замены ассоциативных контейнеров сортированными векторами

C++ *
“Даже если гарантированное логарифмическое время поиска вас устраивает, стандартные ассоциативные контейнеры не всегда являются лучшим выбором. Как ни странно, стандартные ассоциативные контейнеры по быстродействию нередко уступают банальному контейнеру vector” — C. Мейерс «Эффективное использование STL».
Многих возможно интересует практическая сторона этого совета, насколько же в действительности сортированный vector может быть быстрее ассоциативных контейнеров. Меня тоже интересовал данный вопрос и я решил провести небольшой тест и нарисовать пару графиков чтобы все встало на свои места.
Читать дальше →
Всего голосов 38: ↑34 и ↓4 +30
Просмотры 5.4K
Комментарии 39

Подсчёт числа установленных битов в файле

C++ *
Одна интересная реализация подсчёта числа установленных битов в файле. Код на языке C++ с обильным использованием STL. Если всё так хорошо, то почему это в блоге «Ненормальное программирование» (читатели настоятельно рекомендовали перенести в блог C++) спросите Вы? Сейчас увидите :)

Читать дальше →
Всего голосов 33: ↑16 и ↓17 -1
Просмотры 3K
Комментарии 20

Недооценённые итераторы

C++ *
Речь пойдет о стандартной библиотеке шаблонов STL. Будут рассмотрены существующие типы итераторов и их классификация, а также будут предложены несколько новых обёрток над итераторами. Которые позволят в некоторых случаях избежать лямбда-выражений, которых до С++11 как бы и нет.
Читать дальше →
Всего голосов 51: ↑50 и ↓1 +49
Просмотры 29K
Комментарии 16

Достала избыточность С++

C++ *
Из песочницы
imageПривет Хабр,
Меня вводит в ступор С++. Вот просто, зависаю над монитором, смотрю в окно, попиваю чай… И начинаю жалеть за бесценно проведенные годы за изучением стандарта С++, попытками написать свой фронт-энд компилер. Эти мудреные книжки С++ In Depth. Как же я негодовал, когда не понимал кода из книги Александреску. Как записывал все постулаты Страуструпа и иже с ними. Зачем? Вот спрашиваю себя, зачем я теперь все это знаю. Более, я хочу сказать, что этот язык нещаден для гуру, не с медицинской, не с экономической точки зрения! Он не оправдывает усилий, вложенных в его изучение — раз. На практике, он экономически не выгоден — два. И нервные клетки подтвердят, что сопровождать чужой плюснутый код — бывает опасно для здоровья -три. Пусть тут будут рандомно разбросаны метафоры, пишу как есть, из опыта.
Читать дальше →
Всего голосов 403: ↑339 и ↓64 +275
Просмотры 19K
Комментарии 534

3D-печать изменит мир?

Киберпанк
«Технологии, потенциал и последствия аддитивного производства», — статью под таким заголовком опубликовали специалисты Инициативы стратегических прогнозов (Strategic Foresight Initiative). Эта организация создана для анализа потенциальных последствий долговременных глобальных трендов, революционных изменений и потрясений, которые могут произойти в мире. В последние шесть лет Инициатива стратегических прогнозов совместно с Национальным советом по разведке США публикует доклады с прогнозом долговременных трендов до 2025-2030 гг. На этот раз они обращают внимание на 3D-печать и другие способы так называемого аддитивного производства (АП, additive manufacturing).

По мнению исследователей, АП способно коренным образом изменить общество и мировую экономику. По силе воздействия это может быть сравнимо с изобретением парового двигателя, электрической лампочки, атомной энергии или микрочипа. Причём именно сейчас, по их мнению, технология «готова к взлёту», а в ближайшее десятилетие начнётся резкий рост использования 3D-печати в промышленности.
Читать дальше →
Всего голосов 49: ↑45 и ↓4 +41
Просмотры 1.2K
Комментарии 78

Работа с бинарными файлами в стиле STL

C++ *
Я хотел бы рассказать о решении одной задачи, возникшей в процессе обучения старших школьников и младшекурсников программированию. Естественно, пишу я об этом, потому что считаю, что этот опыт может быть интересен более широкой аудитории.
Читать дальше →
Всего голосов 49: ↑40 и ↓9 +31
Просмотры 26K
Комментарии 49

Тест производительности контейнеров и указателей на объекты

C++ *
Из песочницы

Вступление



В данной статье рассмотрен тест производительности заполнения (push_back) контейнеров объектами, содержащими разные типы указателей на разные типы данных. Тест комплексный, сочетающий в себе типичные задачи создания указателя на объект, копирование объекта, заполнение контейнера, освобождение выделенной под объект памяти средствами умного указателя и стандартным оператором delete. Будут протестированы три контейнера стандартной библиотеки шаблонов – vector, list, deque, три вида указателей – std::shared_ptr, std::auto_ptr и простой указатель. В качестве испытуемых типов данных (на которые будут создаваться указатели) использованы long, std::string, char, произвольный класс.

Описание теста



Исходный код написан в среде MS Visual Studio 2010, и требует от компилятора поддержку лямбда функций.
Пусть некоторый класс содержит описание указателя T на тип данных Type.
Читать дальше →
Всего голосов 27: ↑15 и ↓12 +3
Просмотры 4.1K
Комментарии 44

Обзор конференции Going Native'2012

C++ *
Недавно завершилась конференция GoingNative’2012, организованная компанией Microsoft. Она проходила 2 и 3 февраля в Редмонде, и главной темой был C++11. Мне показалось, что это замечательное событие недостаточно полно освящено, и захотел исправить ситуацию.
«C++11 feels like a new language» Bjarne Stroustrup
«We’re all learning C++11» Herb Sutter
«We broke every single book on the planet, and we broke every single programmer on the planet» Herb Sutter

Герб Саттер во вступительном слове посвятил конференцию Деннису Ритчи, создателю языка C, и ключевому разработчику операционной системы UNIX.

Это очень важное событие для сообщества С++, где выступали и отвечали на вопросы люди, ставшие легендами в мире C++, во многом определяющие его развитие. Доклады очень интересные, и я вынес для себя много нового. Дальше идёт обзор всех докладов и сессий вопросов и ответов.
Читать дальше →
Всего голосов 68: ↑67 и ↓1 +66
Просмотры 3.4K
Комментарии 41

Неприятная особенность std::list, о которой не все знают

C++ *
Двусвязный список — это фундаментальная структура данных, о которой все знают и повсеместно используют. Все знают почему и в каких случаях он эффективнее вектора, какие операции имеют линейную сложность, а какие — константную…

Хотя постойте, знаете ли вы какова сложность функции size ()?
«Конечно же я знаю — О(1)!», ответят многие из вас, «Что может быть проще?»

size_type  size() const                             
{
       return _size;
}


Тривиально, эффективно и безопасно, не так ли?
Я бы реализовал эту функцию именно так, большинство из вас сделали бы тоже самое.

Однако, те, кто писал реализацию GNU STL, другого мнения на этот счет.
Читать дальше →
Всего голосов 111: ↑96 и ↓15 +81
Просмотры 52K
Комментарии 92

Как правильно скопировать массив и при чем тут SFINAE

C++ *Системное программирование *Компиляторы *
Копировать элементы из одного контейнера в другой? Нет ничего проще, универсальный алгоритм помещается в 5 строк:
template<class InputIterator, class OutputIterator>
OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result) {
    while(first != last) *result++ = *first++;
    return result;
}
Возможно вы узнали реализацию std::copy с cplusplus.com. Почему же реализация std::copy из GNU STL занимает 139 строк? Давайте разберемся.
Читать дальше →
Всего голосов 54: ↑48.5 и ↓5.5 +43
Просмотры 25K
Комментарии 26

Интересная логика Random access итераторов в STL контейнерах

C++ *
Из песочницы
На курсах программирования я получил задание — написать на C++ аналог std::vector с сохранением функицонала и интерфейса, с целью сделать его хотя бы в два раза быстрее в миллион раз читабельнее. В ходе выполнения я столкнулся с тем, что Random access итераторы имеют некоторые очень странные интересные особенности, которые мне захотелось изменить. Кому интересно — добро пожаловать под кат.
Читать дальше →
Всего голосов 20: ↑4 и ↓16 -12
Просмотры 4K
Комментарии 32

Интервью с создателем C++ STL, 1995 г. Часть 1

C++ *
В последние годы, когда спрос на C++ снова растёт, интересно заглянуть в недалёкое прошлое и вспомнить, как создавалась эта классическая платформа разработки. В данном вопросе безусловно содержательными являются книги Страуструпа, вроде «Дизайна и эволюции C++». Однако, не менее интересно услышать о языке от самых первых его последователей, а иногда и полноценных соавторов. Пожалуй, наиболее известным из них является наш (в общем-то :) соотечественник Алекс Степанов, автор Стандартной библиотеки шаблонов. Интервью, приводимое далее, было взято у Алекса в 1995-м году колумнистом журнала Dr.Dobbs Элом Стивенсом. Материал будет интересен как начинающим изучать C++, так и опытным пользователям языка.

Алекс, расскажите нам что-нибудь о вашем cтоль длительном интересе к обобщённому программированию.

Я начал размышлять об обобщённом программировании в конце 70-х, когда заметил, что некоторые алгоритмы зависят не от конкретной реализации структуры данных, а лишь от небольшого числа существенных семантических свойств этой структуры. Так что я начал рассматривать самые разные алгоритмы, и обнаружил, что большинство из них могут быть абстрагированы от конкретной реализации так, что эффективность при этом не теряется. Эффективность является для меня одной из основных забот. Глупо абстрагировать алгоритм таким образом, что, когда вы его задействуете получившуюся реализацию, он становится неэффективным.
Читать дальше →
Всего голосов 47: ↑43 и ↓4 +39
Просмотры 27K
Комментарии 23

Интервью с создателем C++ STL, 1995 г. Часть 2

C++ *
Перевод
Продолжение первой части перевода интервью, взятого у создателя Стандартной библиотеки шаблонов Алекса Степанова в 1995 году. В этой части Алекс рассуждает о том, почему шаблоны устроены именно так и почему они хороши. Также описана весьма захватывающая история о том, как удалось внести STL в Стандарт.

Алекс, где и когда вы решили предложить STL как часть определения ANSI/ISO Стандарта C++?

В течение лета 1993 г., Эндрю Кёниг посещал Стэнфорд для преподавания курса C++. Я показал ему кое-что из наших материалов, и, я думаю, он был искренне захвачен увиденным. Он организовал приглашение для меня в качестве докладчика на ноябрьской встрече Комитета по Стандарту C++ в Сан-Хосе. Я прочитал доклад, обозначенный как «Наука программирования на C++». Моя речь была скорее теоретическая. Основная позиция заключалась в том, что существуют фундаментальные законы, которые связывают очень примитивные операции, такие как конструкторы, присваивание и равенство. C++ как язык не навязывает никаких ограничений. Вы можете определить собственный оператор равенства для того, чтобы выполнить умножение. Но равенство должно быть равенством, и оно должно быть рефлексивной операцией. A должно быть равно A. Оно должно быть симметричным. Если A равно B, то B равно A. A должно быть транзитивным. Обычные математические аксиомы. Равенство присуще другим операциям. Имеются аксиомы, связывающие конструктор и равенство. Если вы конструируете объект с копирующим конструктором из другого объекта, то два объекта должны быть равны. C++ не обязывает к этому, но это один из основных законов, которому мы должны подчиниться. Присваивание должно создавать одинаковые объекты. Т.о., я представил группу аксиом, которые связаны с этими основными операциями. Я немного говорил об аксиомах итераторов и показал некоторые обобщенные алгоритмы, обрабатывающие итераторы. Это была двухчасовая лекция и, я думаю, весьма сухая. Однако она была очень хорошо принята. В то время я не думал об использовании этой штуки в качестве части стандарта, т.к. обычно воспринималось, что это была некая продвинутая техника программирования, которая не стала бы широко использоваться в «реальном мире». Я думал, что у практичных людей не было никакого интереса к любой из этих работ.
Читать дальше →
Всего голосов 51: ↑48 и ↓3 +45
Просмотры 16K
Комментарии 9

Интервью с создателем C++ STL, 1995 г. Часть 3

C++ *
Перевод
Завершающая часть перевода интервью (первая часть, вторая часть), взятого у создателя Стандартной библиотеки шаблонов Алекса Степанова в 1995 году. Здесь Алекс рассказывает о том, почему в шаблонах не включена поддержка персистентности и серилазизации, о будущем библиотеки и о связи ООП и обобщённого программирования.

Алекс, STL не реализует объектную модель персистентности (постоянного хранения) объектов. Map и Multimap являются особенно хорошими кандидатами для постоянного хранения контейнеров как инвертированных индексов в базах данных постоянного хранения объектов. Скажите, работали ли Вы в этом направлении или же Вы можете хотя бы прокомментировать реализации этой идеи?

Это обстоятельство отмечалось многими. STL не реализует персистентность по уважительной причине. STL настолько велика, насколько можно было себе представить в то время. Я не думаю, что любой больший набор компонентов прошёл бы через Комитет по стандартам. Но персистентность является тем, о чём думали некоторые люди тогда. При проектировании STL и особенно во время проектирования компонента-распределителя, Бьярн отметил, что распределители, которые инкапсулируют памяти модели, могут быть использованы для инкапсуляции модели постоянной памяти. Прозрение принадлежит Бьярну, и это важное и интересное прозрение. Несколько компаний, разрабатывающие объектные базы данных, рассматривают эту идею. В октябре 1994 года я посетил встречу Группы по системам управления объектными базами данных. Я выступил с докладом по STL, и после был большой интерес к тому, чтобы сделать контейнеры с их развивающимся интерфейсом соответствующими STL. Они не рассматривали распределители как таковые. Некоторые из членов группы, однако, пытались выяснить, могут ли распределители быть использованы для реализации персистентности. Я ожидаю, что в течение следующего года появятся хранилища объектов с STL-совместимыми интерфейсами, которые будут вписываться в рамки STL.
Читать дальше →
Всего голосов 31: ↑30 и ↓1 +29
Просмотры 11K
Комментарии 3

Сравнение C++ Standard и Boost

Open source *C++ *Системное программирование *
Перевод
Должно ли C++ сообщество придерживаться стандарта или отойти от него, чтобы создавать лучшие вещи с Boost?


Погодите, не та библиотека.

В марте 2011 года комитет ISO C++ утвердил финальную версию черновика новейшего стандарта C++. Языка, который официально был стандартизирован в августе того же года и стал известен как C++ 11. Теперь, по прошествии 2 лет, мы можем оглянуться назад и посмотреть на некоторые проблемы, затронувшие язык(аж с момента принятия первого международного стандарта в 1998 году) и сравнить его финальный вариант с популярной C++ библиотекой Boost.

Читать далее
Всего голосов 86: ↑60 и ↓26 +34
Просмотры 96K
Комментарии 76