• C++ велосипедостроение для профессионалов

      Классы, которые люди самостоятельно пишут, а потом копируют из одного проекта в другой, хотя они уже есть в стандартных библиотеках, в простонародье называются велосипедами. Первый вопрос, который возникает при встрече с таким «велосипедом» — зачем люди переписывают что-то заново? Вариантов может быть несколько.

      • Некоторые делают это для самообучения: берут класс стандартной библиотеки, пишут его сами с нуля, сравнивают то, что получилось, с тем, что есть в стандартной библиотеке — в процессе узнают для себя что-то новое.
      • Некоторые проекты имеют особое требования к коду. В embedded-разработке принято работать без RTTI и без exception, поэтому части стандартной библиотеки, которые используют RTTI и exception, необходимо переписать без них.
      • Редко, но бывает, когда велосипед пишут, потому что могут написать лучше, чем в стандартной библиотеке. Как правило, такие нововведения рано или поздно попадают в стандартную библиотеку.
      • Другим только кажется, что они могут написать лучше, и таких людей больше. Но в процессе они обучаются, выясняют для себя что-то новое и что-то интересное открывают.
      • Могут быть другие причины.

      Сегодня мы не будем говорить о том, что велосипеды — это плохо, это не обязательно так. Мы поговорим о том, что действительно плохо:

      • бездумно переносить устаревшие технологии 20-30-летней давности в современные проекты;
      • пользоваться «вредными» бенчмарками и оптимизациями.

      А также затронем «вредные» советы, обсудим новейшие практики программирования (C++ 11 и позднее), подумаем, что делать с «идеальным» велосипедом.

      Читать дальше →
    • C++ конференции в апреле

        Всем привет!
        Сегодня я хотел бы рассказать сразу о двух предстоящих конференциях. Обе конференции организованны C++ сообществами: C++ Russia в Санкт-Петербурге и CoreHard Spring в Минске.

        Санкт-Петербург



        Читать дальше →
      • Конференция C++ Russia 2018

          Всем привет! Я надеюсь, вы успели соскучиться по плюсовым докладам и общению с коллегами, потому что очередная конференция C++ Russia уже не за горами. В этом году конференция снова пройдёт в городе трёх революций.

          Конференция состоится 19-21 апреля в Санкт-Петербурге. 19 апреля — день мастер-классов, 20-21 — основная программа. Jon Kalb открывает первый день конференции. Темы докладов конференции: память, краш-репорты, асинхронность, software transactional memory, reflective metaprogramming, ranges, акторы, Herb Sutter.

          Подробности под катом.
          Читать дальше →
        • Рефлексия в C++14

          Данная статья является расшифровкой (с небольшими правками) доклада Антона antoshkka Полухина — “Немного магии для C++14”.

          Я тут недавно ковырялся с C++ и случайно открыл пару новых приемов метапрограммирования, которые позволяют делать рефлексию в C++14. Пара мотивационных примеров. Вот у вас есть какая-то POD структура, в ней какие-то поля:

          struct complicated_struct {
              int i;
              short s;
              double d;
              unsigned u;
          };
          

          Количество полей и их имена не имеют значение, важно то, что с этой структуры мы можем написать следующий кусочек кода:

          #include <iostream>
          #include "magic_get.hpp"
          
          struct complicated_struct { /* … */ };
          
          int main() {
              using namespace pod_ops;
              complicated_struct s {1, 2, 3.0, 4};
              std::cout << "s == " << s << std::endl; // Compile time error?
          }
          

          Функция main, в ней создаем переменную нашей структуры, как-то ее инициализируем через aggregate инициализацию, а потом эту переменную пытаемся вывести в std::cout. И в этот момент у нас, по идее, должна быть ошибка компиляции: мы не определили оператор вывода в поток для нашей структуры, компилятор не знает как все это скомпилировать и вывести. Однако, оно скомпилируется и выведет содержимое структуры:

          antoshkka@home:~$ ./test
          s == {1, 2, 3.0, 4}

          Читать дальше →
        • Как Яндекс создавал курс по C++, или Почему нам всё пришлось переписать

            В Яндексе C++ — один из основных языков, на нём написан наш поиск. Его развитие нам настолько важно, что больше года назад по инициативе Яндекса была создана российская рабочая группа по стандартизации «плюсов». Через неё у всех разработчиков русскоязычного пространства есть возможность влиять на развитие языка.



            Недавно Физтех, Яндекс и ШАД запустили ещё один курс на платформе Coursera — «Основы разработки на C++: белый пояс». Он посвящён знакомству с С++. Я расскажу, для кого этот курс, как мы его готовили, что получилось в итоге и каковы наши дальнейшие планы.

            Как всё началось, было выброшено и началось снова


            Онлайн-специализацию из пяти курсов по С++ мы задумали прошлым летом. Сначала сочиняли программу потихоньку, потом активнее, и в октябре начали снимать видео.

            Читать дальше →
          • Как я писал предложение к стандарту С++

              Это будет история младшего разработчика из Яндекс.Паспорта о появлении предложения в стандарт С++, разработанного в соавторстве с Антоном antoshkka Полухиным. Как часто бывает в жизни, что-то новое началось с боли, а точнее — с желания её прекратить.


              Жила-была библиотека у меня на поддержке. Всё у неё было хорошо: собиралась под Linux, работала, не падала. Однажды пришли люди с просьбой (требованием) собрать её под Windows. Почему бы и нет? Но с первого раза не получилось. Корнем зла оказалась рукописная криптография, которая в какой-то момент умножала два 64-битных целых числа. Для сохранения результата такого умножения потребуется число на 128 бит, и в библиотеке использовался тип __int128. Он прекрасен: имеет естественный интерфейс, поддерживается несколькими компиляторами (gcc, clang), работает без аллокации памяти, но главное — он есть.

              Читать дальше →
            • С++17 и С++2a: новости со встречи ISO в Иссакуа

                В начале ноября в американском городе Иссакуа завершилась встреча международной рабочей группы WG21 по стандартизации C++ в которой участвовали сотрудники Яндекса. На встрече «полировали» C++17, обсуждали Ranges, Coroutines, Reflections, контракты и многое другое.

                Заседания, как обычно, занимали целый день + решено было сократить обеденный перерыв на полчаса, чтобы успеть побольше поработать над C++17.

                Несмотря на то, что основное время было посвящено разбору недочётов черновика C++17, несколько интересных и свежих идей успели обсудить, и даже привнести в стандарт то, о чём нас просили на cpp-proposals@yandex-team.ru.
                Подробности
              • Онлайн-компиляция на статическом сайте, рецепт для начинающих

                • Tutorial

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

                Для приготовления простого сайта вам понадобится:
                • репозиторий на GitHub — 1 штука
                • готовый html шаблон, для придания приятного вида — 1 штука
                • кусочек свежего компилирущегося C++ кода — минимум 1 строка кода
                • готовые javascript соусы из магазина — ~500Kb
                • картинки и анимашки по вкусу

                Меняйте любые компоненты, экспериментируйте и готовьте свои сайты для любимого языка!
                Приступить
              • Автоматизация OpenOffice: Начало

                  По работе мне необходимо было разработать механизм загрузки и выгрузки данных из Excel используя свободные механизмы работающие под разными ОС.
                  Т.к. необходимо было, чтобы сервис работал под Linux, то механизм взаимодействия через OLE не подходил.
                  Для реализации был выбран OpenOffice с прямым доступом к API через C++.

                  Open Office api на Linux

                  Документация оказалась весьма скудная, а примеров работы не через OLE почти не было. Так что я решил объединить все мои исследования в одной статье на хабре.

                  Примерный план статьи:
                  1. Начало работы с API OpenOffice через C++
                    1.1. Генерация заголовочных файлов
                    1.2. Генерация файла типов RDB
                    1.3. Настройка Visual Studiо 2008
                    1.4. Собираем динамическую DLL
                  2. Повторное использование DLL в своей программе
                    2.1. Пример небольшой программы по выгрузке данных

                  В принципе, если возможностей DLL достаточно, то повторять действия п. 1 не обязательно.

                  Читать дальше →
                • Потрясающая коллекция бесплатных шрифтов за 2014 год

                    Привет, Хабр! Многие уже знают о моей страсти к попытке собрать самое лучше, что может быть полезно для веб-разработчиков или веб дизайнеров. И шрифты — не исключение. Программное обеспечение для работы со шрифтами постоянно развивается. Количество дизайнеров желающих опробовать себя в типографике растет с каждый днем. А сегодня я хочу представить вам их наработки — 30 потрясающих бесплатных шрифтов, которые мне удалось собрать за последний год.

                    Polar



                    Polar

                    Читать дальше →