• Рефлексия в 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

              Читать дальше →
            • Вероятное будущее производства микроэлектроники: безмасочная многолучевая электронная литография от Mapper Lithography

                Кто-то вероятно уже слышал о том, что Роснано в конце 2012-го года инвестировала в компанию-разработчика оборудования электронной литографии Mapper Lithography. Что и как они делают, спасет ли это отечественную микроэлектронную промышленность — узнаем в этой статье.

                Как мы помним, производство микросхем подразумевает последовательную обработку полупроводниковой пластины через экспонированный слой фоторезиста, изображение на котором обычно формируется оптическим способом: «сканер» через уменьшающий объектив проецирует изображение фотошаблона.

                Этот подход имеет ряд недостатков: необходимость изготовления фотошаблонов для каждой новой микросхемы (опустим тут возможность группового производства) — приводит к тому, что продукты обязаны быть крупносерийными, миллионы штук, чтобы окупать стоимость фотошаблонов (до нескольких миллионов $ на каждый тип микросхемы). И с другой стороны — длина волны света ограничивает минимальные размер рисуемых элементов. Сейчас мировая промышленность уже вплотную подошла к теоретическому пределу разрешения оптической литографии: ~35nm для сканеров NA=1.35 с ArF лазерами на длине волны 193нм и ~18нм для литографии на жестком ультрафиолете EUV (однако в серийном производстве это пока не используется).

                Есть и альтернатива: экспонировать фоторезист не светом, а электронным пучком — получается электронная литография. Электронный пучок можно фокусировать в точку гораздо меньшего размера, даже 1нм не проблема, но появляются и новые проблемы.

                На фотографии — симуляция попадания электрона в электронрезист, демонстрирующая проблему с разрешением электронрезиста из-за рассеяния электронов.
                Читать дальше →
              • Пользователь пьян

                  Австралийский дизайнер Уилл Дэйбл предлагает интересную метафору, помогающую разрабатывать простые и удобные интерфейсы. Разработчику, который знает свою систему вдоль и поперек, и отдаёт работе над ней значительную часть своей жизни, очень трудно представить, как будет работать с ней обычный пользователь, чья голова забита другими вещами. Особенно, если он пробует его продукт первый раз в жизни и ещё не уверен в его полезности. Чтобы представить, что творится в голове у пользователя, Уилл Дэйбл предлагает вообразить, что пользователь пьян. Его внимание рассеянно, он легко выходит из себя, он не слишком отчётливо видит и не очень уверенно двигается — если постоянно помнить об этом, интерфейс получится чище и проще. Суть метода Дэйбл рассказывает в этом пятиминутном ролике:


                  Ключевые моменты метода:
                • Отладка Android CMake проекта по-взрослому


                    После перевода наших проектов на CMake, встал вопрос об отладке нативной части Android. Так как инструменты NDK стали неактуальны, пришлось залезть в дебри и научить Eclipse запускать удалённую отладку CDT-проекта, что называется, вручную. В идеале, чтобы это выполнялось в один клик.

                    Если вам не чужда разработка с использованием Android NDK, и вы хотите познать некоторые тонкости отладки, велкам под кат.
                    Читать дальше →
                    • +26
                    • 11,2k
                    • 6