• Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 4.1

      Продолжаем приключения.

      Краткое содержание предыдущих частей


      Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.

      Были реализованы static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. Включена своя реализация nullptr, которая подбирается на этапе компиляции.

      Настало время type_traits и всей этой «особой шаблонной магии».

      Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:

      Коммиты и конструктивная критика приветствуются

      Погрузимся же в мир «шаблонной магии» C++.
      Читать дальше →
      • +15
      • 2,5k
      • 1
    • Learn OpenGL. Урок 5.6 – Parallax Mapping

      • Перевод
      • Tutorial
      OGL3

      Parallax Mapping


      Техника текстурирования Parallax Mapping по своему эффекту несколько схожа с Normal Mapping’ом, но основана на другом принципе. Схожесть в том, что, как и Normal Mapping, данная техника значительно увеличивает визуальную сложность и детализацию поверхности с нанесенной текстурой заодно создавая правдоподобную иллюзия наличия на поверхности перепадов высот. Parallax Mapping отлично работает в связке с Normal Mapping для создания весьма достоверных результатов: описываемая техника передает эффект рельефа гораздо лучше Normal Mapping, а Normal Mapping дополняет его для правдоподобной имитации динамического освещения. Parallax Mapping вряд ли можно считать техникой, прямо относящейся к методам имитации освещения, но все же я выбрал этот раздел для его рассмотрения, поскольку метод является логическим развитием идей Normal Mapping. Также отмечу, что для разбора этой статьи требуется хорошее понимание алгоритма работы Normal Mapping, в особенности понятия касательного пространства или tangent space.
      Читать дальше →
      • +19
      • 2,1k
      • 9
    • Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 3

        Продолжаем приключения.

        Краткое содержание предыдущих частей


        Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.

        Были реализованы static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. На этом описание core.h почти закончено, но оно было бы не полным без nullptr.

        Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:

        Коммиты и конструктивная критика приветствуются

        Итак, продолжим.
        Читать дальше →
      • Указатели C как лингвистический парадокс

          Недавно один знакомый, которого я знаю через совсем не программистские круги, попросил помочь ему с лабораторной по C++. В коде было примерно следующее:

          void do_something(MyObj *input[], int count)
          {
              MyObj **copy = new MyObj*[count];
              for (int i = 0; i < count; ++i)
                  *copy[i] = *input[i];
              ...
          }

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

          Лет десять назад на одном форуме была загадана детская, вроде, загадка:
          Для чего еду обеда
          Людоедоедоеда
          Пригласила на обед
          Людоедоедовед?
          Я хочу показать, что эта загадка имеет самое прямое отношение к C/C++, поскольку тема указателей легко может быть разобрана по аналогии.
          Читать дальше →
        • Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 2

            Да - да, вот с этим девизом я и ринулся в бой.

            Краткое содержание предыдущих частей


            Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.

            Помимо стандартных заголовочных файлов type_traits, thread, mutex, chrono так же были добавлены nullptr.h реализующий std::nullptr_t и core.h куда были вынесены макросы, относящиеся к компиляторозависимому функционалу, а так же расширяющие стандартную библиотеку.

            Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:

            Коммиты и конструктивная критика приветствуются
            Читать дальше →
          • Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Введение

            Да - да, вот с этим девизом я и ринулся в бой.

            Вместо предисловия


            Пожалуй с этой картинки должно начинаться любое повествование о boost, Loki, самостоятельных, да и так же поставляемых с компиляторами реализациях стандартной библиотеки C++.

            Да-да, и если вы думали что разработчики стандартной библиотеки для того же g++, clang, Visual Studio или, прости господи, C++ Builder (бывший Borland, а нынешний Embarcadero) — гуру, что не городят костылей, не ломают стандарт под свой компилятор и не пишут велосипедов, то, скорее всего, вы не так активно используете стандартную библиотеку C++ как вам казалось.

            Статья написана как рассказ, и содержит много «воды» и отступлений, но я надеюсь, что мой опыт и получившийся код будет полезен тем, кто столкнулся с похожими проблемами при разработке на C++, особенно на старых компиляторах. Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:

            https://github.com/oktonion/stdex (коммиты и конструктивная критика приветствуются)

            А теперь, обо всем по порядку.
            Читать дальше →
          • Ой, у вас баннер убежал!

            Ну. И что?
            Реклама
          • Clang. Часть 1: введение

            • Перевод
            • Tutorial

            Что такое Clang?


            Я провёл последние несколько месяцев, работая с Clang, фронтендом LLVM. Clang умеет парсить и анализировать любой исходный код на языках семейства С (C, C++, ObjectiveC, и т.п....) и имеет удивительную модульную структуру, которая делает его простым в использовании.


            Если вы ищете статический анализатор кода, я настоятельно рекомендую Clang, он существенно превосходит другие статические анализаторы (такие, как CIL...) и хорошо документирован. Также список рассылки Clang очень активен и полезен, если вы застряли на чём-то.

            Лично я использую Clang для статического анализа драйверов ввода-вывода ядра Linux, включая драйвера камеры и драйвера DRM графической карты. Код ядра, особенно код драйвера, может быть очень сложным и трудным для анализа, но Clang позволяет нам легко поддерживать его. Давайте посмотрим, что можно сделать с его помощью.
            Читать дальше →
          • Amazon Lumberyard: крик души


              Игры — одни из самых массовых продуктов среди программного обеспечения. Это огромная индустрия, в которой появился новый игровой движок — Amazon Lumberyard. Проект ещё находится в статусе беты и у него есть время, чтобы исправить ошибки, повысить качество кода. Разработчикам движка предстоит проделать много работы, чтобы в ближайшее время не разочаровать миллионы игроманов и разработчиков игр.
              Читать дальше →
            • Shrimp: масштабируем и раздаем по HTTP картинки на современном C++ посредством ImageMagic++, SObjectizer и RESTinio



                Предисловие


                Наша небольшая команда занимается развитием двух OpenSource инструментов для C++разработчиков — акторного фреймворка SObjectizer и встраиваемого HTTP-сервера RESTinio. При этом мы регулярно сталкиваемся с парой нетривиальных вопросов:

                • какие фичи добавлять в библиотеку, а какие оставлять «за бортом»?
                • как наглядно показывать «идеологически правильные» способы использования библиотеки?

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

                Но до нас доходит информация далеко не о всех проблемах и сложностях, с которыми сталкиваются пользователи. И не всегда мы можем использовать полученную информацию и, особенно, примеры кода, в своих публичных материалах.

                Поэтому иногда мы сами для себя выдумываем небольшие задачки, решая которые мы вынужденно превращаемся из разработчиков инструментов в пользователей. Это позволяет нам взглянуть на собственные инструменты другими глазами и самим понять, что хорошо, что не очень, чего не хватает, а чего слишком много.

                Сегодня мы хотим рассказать как раз об одной такой «небольшой» задачке, в которой естественным образом объединились SObjectizer и RESTinio.

                Масштабирование и раздача картинок. Почему именно это?


                В качестве небольшой демо-задачи для самих себя мы выбрали HTTP-сервер, который раздает по запросам отмасштабированные картинки. Вы складываете изображения в какой-то каталог, запускаете HTTP-сервер, делаете к нему запрос вида:
                Читать дальше →
              • С++20 на подходе! Встреча в Рапперсвил-Йона

                  В начале июня в городе Рапперсвил-Йона завершилась встреча международной рабочей группы WG21 по стандартизации C++.

                  Вот что вас ждёт под катом:
                  • Контракты и друзья
                  • Концепты (без друзей)
                  • __has_cpp_attribute(unlikely)
                  • bit_cast<my_stuff>(some_array)
                  • contains, shift_left, shift_right, ispow2, ceil2… и старые алгоритмы под новым соусом
                  • atomic_ref
                  • Что нового можно писать в шаблонах и чем это полезно
                  • constexpr virtual foo()
                  • Parallelism 2, Reflection и Executors TS

                  Также будет бонус: минисекция для экспертов:

                  • user-declared virtual destructor не влияет на тривиальность типа
                  • Куда можно будет засунуть восклицательный знак и чем это может быть полезно
                  • constexpr std::regex mail_regex(R"((?:(?:[^<>()\[\].,;:\s@\"]+(?:\.[^<>()\[\].,;:\s@\"]+)*)|\".+\")@(?:(?:[^<>()\[\].,;:\s@\"]+\.)+[^<>()\[\].,;:\s@\"]{2,}))")

                  Добро пожаловать под кат
                Самое читаемое