• Секреты auto и decltype

      Новый стандарт языка принят относительно давно и сейчас уже, наверное, нет программиста, который не слышал о новых ключевых словах auto и decltype. Но как почти с любым аспектом С++, использование этих новых инструментов не обходится без нюансов. Некоторые из них я постараюсь осветить в этой статье.
      Читать дальше →
      • +41
      • 40,7k
      • 6
    • Вы все еще кипятите и сравниваете this с нулем?

        Давным-давно в далекой-далекой галактике широко использовалась библиотека MFC, в которой у ряда классов были методы, сравнивающие this с нулем. Примерно так:

        class CWindow {
            HWND handle;
            HWND GetSafeHandle() const
            {
                 return this == 0 ? 0 : handle;
            }
        };
        

        «Это же не имеет смысла» – возразит читатель. Еще как «имеет»: этот код «позволяет» вызывать метод GetSafeHandle() через нулевой указатель CWindow*. Такой прием время от времени используется в разных проектах. Рассмотрим, почему на самом деле это плохая идея.
        Читать дальше →
      • Отказываемся от шаблонных шаблонных параметров

          Использовать шаблонные шаблонные параметры С++ довольно сложно. Хочу продемонстрировать силу boost::mpl и показать трюк, позволяющий описывать шаблоны, полностью отказавшись от шаблонных шаблонных параметров.
          Продемонстрирую проблему. Есть класс, принимающий тип объекта и тип контейнера для этого объекта.
          template <typename T, typename Container>
          struct A
          {
            typedef Container<T> type;
          };
          

          Так писать нельзя, вы должны использовать шаблонные шаблонные параметры, чтобы указать, что Container сам по себе является шаблоном.
          Читать дальше →
        • STM32+Visual Studio

            Не так давно я вновь занялся поиском IDE для STM. Keil, IAR — это, конечно, прекрасно, но да простят меня любители данных сред, они ужасны. CooCox — единственная вещь, которая напоминает о том, что мы живем в 21 веке. Но CooCoх даже рядом не стоял с моей любимой средой разработки — Visual Studio. И мне удалось найти проект, который позволит мне работать с STM в VS.

            Читать дальше →
          • Знакомство с Coarray Fortran: будем параллельны?

              Очень давно хотел написать о том, на какой стадии сейчас находится один из «прародителей» популярных сегодня языков программирования. Да, я говорю о Фортране. Попытаюсь разрушить стереотип, который существует в умах многих разработчиков – что Фортран древний язык без каких либо перспектив, и уж точно никто на нём уже не пишет. Наоборот, он очень активно эволюционирует и уже давно предлагает богатый набор различных функциональностей, закреплённых в стандартах, вполне, кстати, сопоставимых с тем же С/С++.
              От «старого» 77-го Фортрана осталось уже не так и много… в 95 стандарте мы могли вполне себе создавать свои типы данных, динамически выделять и очищать память, работать с указателями, перегружать функции и операторы и много чего ещё. По сути, от С своим набором средств он отличается несильно. Тем не менее, я не хочу пытаться сравнивать языки – это вопрос философии. Скажу только, что фортрановский компилятор Intel пользуется очень большим спросом, и, собственно, приобретается даже активнее, чем тот же С++.
              Цель же данного поста – рассказать о текущем состоянии дел. Собственно, Фортран на сегодняшний день — параллельный язык, и стал он таковым после принятия стандарта Fortran 2008, в котором появились Coarray’и.
              Читать дальше →
              • +29
              • 9,6k
              • 2
            • Почти во всех реализациях двоичного поиска и сортировки слиянием есть ошибка

              • Перевод
              Это перевод статьи Джошуа Блоха «Extra, Extra — Read All About It: Nearly All Binary Searches and Mergesorts are Broken» 2006 года.

              Я живо помню первую лекцию Джона Бентли в университете Карнеги-Меллон, на которой он попросил нас, свежеиспечённых аспирантов, написать функцию двоичного поиска. Он взял одно из решений и разобрал его на доске, и, разумеется, в нём оказалась ошибка, как и во многих других наших попытках. Этот случай стал для меня наглядной демонстрацией к его книге «Жемчужины программирования». Мораль в том, чтобы внимательно расставлять инварианты в программе.

              И вот, теперь 2006 год. Я был потрясён, узнав, что программа двоичного поиска, корректность которой Бентли доказывал формально и тестами, содержит ошибку. Не подумайте, что я придираюсь; по правде сказать, такая ошибка вполне может ускользать от тестеров десятилетиями. Более того, двоичный поиск, который я написал для JDK, тоже был багнутым лет девять. И только сейчас, когда она сломала кому-то программу, о ней сообщили в Sun.
              Читать дальше →
            • Meeting C++ 2013

              Meeting C++, Dusseldorf


              Так вышло, что у меня получилось принять участие в работе конференции, посвящённой C++. Уровень, конечно, не GoingNative: доклады были разного уровня. Как очень сильные и интересные, так и совсем пустые. Самым главным для меня была атмосфера — давно я ни с кем лично не обсуждал столько интересных тем. Это мне так понравилась, что я загорелся идеей создать в Санкт-Петербурге C++ User Group, чтобы больше общаться лично с коллегами по цеху. Но об этом как-нибудь потом, а пока о конференции. Не буду описывать и пересказывать все доклады, отмечу только наиболее интересные мне темы и темы, которые затрагивались почти в каждом докладе.
              Читать дальше →
              • +30
              • 8,5k
              • 8
            • Компактный USB HID Bootloader для ATtiny85


              Представляю вашему вниманию новый компактный Bootloader для AVR Tiny 45/85. Данный автозагрузчик распространяется под лицензией GNU GPL, как того требует лицензия V-USB. Основой для данного автозагрузчика послужил ATtiny85 USB Boot Loader от Embedded Creations и его потомок micronucleus-t85, используемый платами Digispark.
              Также как и вышеупомянутые, TinyHID Loader основан на библиотеке V-USB.

              Ключевые особенности:


              • Работает под ATtiny45 и ATtiny85
              • Компактен (2кб с базовыми функциями)
              • Расширяем (есть ряд дополнительных функций, включение которых увеличит размер)
              • Не треубет драйверов (что особенно важно под новые версии Windows)
              • Не работает с AVRdude, использует вместо этого кросплатформенное API на C#
              • Умеет обновлять сам себя

              Читать дальше →
              • +23
              • 34,9k
              • 5
            • Создаем платформер за 30 минут

              • Tutorial
              Здравствуйте! Сегодня мы будем писать платформер, используя C++, Box2D и SFML, а также редактор 2D карт для игр Tiled Map Editor.

              image

              Вот результат (карта создавалась 5 минут + во время сьемки игра тормозила + экран не так растянут — дефект Bandicam):



              Исходники и exe — внизу статьи.
              Читать дальше →
            • Не надо бояться солнечных панелей

              Искал в гугле «солнечная панель 100 Вт» и в первом десятке выдается ссылка на Хабрахабр, статья от 2011 года. В комментариях правильные вещи, но актуальностью на сегодняшний день — бред. Сегодня солнечная панель 100 Вт (на Украине) стоит до 100 долларов, контроллеры, аккумуляторы — все это не очень напряжно. Но самая большая загвоздка зеленого прогресса в том, что люди просто не понимают, что такое солнечная энергия, как правильно и по уму все реализовать, зачем это надо и вообще…

              Не в рекламных целях. Я торгую на рынке солнечными панелями и 90 человек из 100 отталкивают это новшество, как отталкивали мобильники 15 лет назад — дорого, не нужно, не выгодно, и так хорошо. Многие хотят набрать панелей по 100 долларов на 10 килоВатт и не платить за электроэнергию. Сами посчитайте — 100 Вт х10 = 1кВт * 10 = 10 кВт = 10 000 долларов. Это только на панели, без аккумуляторов и контроллеров. Аккумуляторов на час работы нагрузки в 10 кВт надо еще 12-13 шт по 100 А/ч (еще по 200 долларов каждый) и т.д. В итоге, смотрят на продавца как на идиота, выбрасывают из головы все, что им рассказываешь и в этой самой голове остается одно: «мне это не интересно». На самом деле все обстоит немного иначе.

              Зачем созданы солнечные панели? В чем смысл жизни человека? Почему мы дышим грязным воздухом? Спаси планету, освободите Вилли!

              На эти вопросы может быть множество ответов, постараюсь изложить более-менее понятно как это вижу я.
              Читать дальше →