• C++20 утверждён! Чего ждать и к чему готовиться разработчикам в C++23

      На днях в Праге прошла встреча международного комитета по стандартизации C++. И-и-и-и…



      C++20 готов! Осталось поставить штампик от ISO, но это чисто формальный шаг, с которым не должно быть проблем.

      Поздравляю всех с этим замечательным событием! Concepts, Coroutines, Modules, Ranges, std::format, constexpr new и constexpr алгоритмы+vector+string, datetime, jthread, span, bit_cast и многие другие мелкие и большие нововведения.

      Что успели добавить и поправить в последний момент, что предложили разломать и что все хотят видеть в C++23 — обо всём этом под катом.
      Читать дальше →
    • Построение графиков в LaTeX/PGFPlots

      image

      Данная статья посвящена описанию работы с пакетом PGFPlots, разработанного для популярной настольной издательской системы LaTeX. Однако, если вы даже не знакомы с последней, это не повод расстраиваться и бросать чтение этой статьи, ведь, возможно, те замечательные примеры, которые будут далее приведены, и необычайная мощность и удобство PGFPlots вдохновят вас на изучение LaTeX.
      Читать дальше →
    • Популярные заблуждения про радиационную стойкость микросхем

        Примерно в каждой второй теме на Хабре, касающейся космонавтики или электроники, всплывает тема радиационной стойкости. Через новости об отечественной космонавтике красной нитью проходит тематика импортозамещения радстойкой элементной базы, но в то же самое время Элон Маск использует дешевые обычные чипы и гордится этим. А изральтяне в «Берешите» использовали радстойкий процессор и тоже гордятся этим. Да и в принципе микроэлектронная отрасль в России живет по большей части за счет госзаказа с соответствующими требованиями. Наблюдение за регулярными спорами насчет того, как надо правильно строить спутники, показывает, что подготовка участников обычно невысока, а их аргументация отягощена стереотипами, случайно услышанными вырванными из контекста фактами и знаниями, устаревшими много лет назад. Я подумал, что читать это больше нет сил, поэтому, дорогие аналитики, устраивайтесь поудобнее на своих диванах, и я начну небольшой (на самом деле большой) рассказ о самых популярных заблуждениях на тему того, что такое радиационная стойкость интегральных микросхем.


        Рисунок 1. Непременная красивая картинка про космическое излучение и хрупкую Землю.
        Читать дальше →
      • Плюс один процент автоматизации



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

          Раньше общее потребление контролировал однофазный счетчик с Modbus-интерфейсом. Следить за текущими показаниями потребления полезно, чтобы не превышать разумные лимиты и не дожидаться отключения групповых автоматов. С этой задачей он справлялся на «ура». Но гораздо интереснее следить за каждым потребителем в отдельности. Для чего и как это сделать попробую рассказать в этой статье.
          Читать дальше →
        • Обзор и сравнительное тестирование ПЭВМ «Эльбрус 401‑PC». Дополнение — вопросы и ответы

            Пожалуй, главным результатом публикации этого обзора, — помимо собственно ознакомления общественности с первыми независимыми впечатлениями от нового компьютера, — стало желание самой фирмы МЦСТ раскрыть побольше подробностей, устранить возникшие недоразумения и ответить на вопросы, поднимаемые в статье и в комментариях к ней. Некоторые из этих вопросов настолько фундаментальны, что заслуживают по отдельной статье каждый, и потому требуют серьёзной проработки. Сейчас же мы рассмотрим те из них, которые лучше всего укладываются в формат интервью.

            Вид системного блока Эльбрус 401-PC спереди и сбокуИнфа 100 %

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

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

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

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

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

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

              Читать дальше →
            • Как идентифицировать спутник на орбите

                image

                Во время поисков сигналов от российских спутников МКА-Н, был обнаружен сигнал неопознанного спутника, которого у меня нет в каталоге. Напомню аппараты МКА-Н №1 и №2 были запущены 14 июля 2017 года с космодрома Байконур и не вышли на связь. По неофициальной причине — из-за аварии с разгонным блоком «Фрегат», хотя «Роскосмос» не признаёт это. Изготовителем этих двух аппаратов является частная российская компания «Dauria Aerospace». Теперь «Роскосмос» требует со стартапа 290 миллионов рублей за неработающие космические аппараты (источник). После 3 дней поисков сигналов, они так и не были обнаружены. Зато был обнаружен другой любопытный сигнал. Этого аппарата у меня нет в каталоге, значит его надо идентифицировать и занести в свой каталог.
                Читать дальше →
              • Флаги в аргументах функций

                • Translation
                Вы когда-нибудь сталкивались с таким кодом?

                process(true, false);

                Эта функция, судя по названию, что-то обрабатывает (process). Но что означают параметры? Какой параметр здесь true, а какой false? По вызывающему коду об этом нельзя судить.

                Нам придется заглянуть в объявление функции, которое дает подсказку:

                void process(bool withValidation,
                             bool withNewEngine);

                Очевидно, автор использует два параметра типа bool как флаги (toggles). Реализация функции может быть похожа на это:

                void process(bool withValidation,
                             bool withNewEngine)
                {
                  if (withValidation)  // используется 1-й флаг
                    validate(); // % подтвердить
                 
                  do_something_toggle_independent_1
                 
                  if (withNewEngine)   // используется 2-й флаг
                    do_something_new();
                  else
                    do_something_old();
                 
                  do_something_toggle_independent_2();
                }

                Назначение флагов очевидно, поскольку каждый из них имеет осмысленное название. Проблема возникает в вызывающем коде.
                Читать дальше →
              • [DotNetBook] Stackalloc: забытая команда C#

                • Tutorial
                С этой статьей я продолжаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом. Вся книга будет доступна на GitHub (ссылка в конце статьи).

                В C# существует достаточно интересное и очень редко используемое ключевое слово stackalloc. Оно настолько редко встречается в коде (тут я даже со словом «редко» преуменьшил. Скорее, «никогда»), что найти подходящий пример его использования достаточно трудно а уж придумать тем более трудно: ведь если что-то редко используется, то и опыт работы с ним слишком мал. А все почему? Потому что для тех, кто наконец решается выяснить, что делает эта команда, stackalloc становится более пугающим чем полезным: темная сторона stackalloc — unsafe код. Тот результат, что он возвращает не является managed указателем: значение — обычный указатель на участок не защищенной памяти. Причем если по этому адресу сделать запись уже после того как метод завершил работу, вы начнете писать либо в локальные переменные некоторого метода или же вообще перетрете адрес возврата из метода, после чего приложение закончит работу с ошибкой. Однако наша задача — проникнуть в самые уголки и разобраться, что в них скрыто. И понять, в частности, что если нам дали этот инструмент, то не просто же так, чтобы мы смогли найти секретные грабли и наступить на них со всего маху. Наоборот: нам дали этот инструмент чтобы мы смогли им воспользоваться и делать поистине быстрый софт. Я, надеюсь, вдохновил вас? Тогда начнем.

                Примечание


                Глава, опубликованная на Хабре не обновляется и возможно, уже несколько устарела. А потому, прошу обратиться за более свежим текстом к оригиналу:





                Читать дальше →
              • Увеличиваем себе премию в два раза, или как взломать документы, подписанные усиленной квалифицированной подписью

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


                  Читать дальше →
                • Космическая демосцена: Вселенная умещается в 64 килобайта


                    Демосцена всегда поражала воображение. В 1994, 2004, 2017 годах разработчики снова и снова всех удивляют, превращая файл размером 64 килобайта в нечто немыслимое. Демо стало не просто асаной, из которой программист выжимает максимум возможностей своего компьютера и собственных скиллов, а превратилось в отдельный вид киберискусства.


                    Современные демки откололись от континента прочих субкультур (где-то на берегу остались представители оверклокинга) и дрейфуют в одиночестве. Они не гимн возможностей компьютерной техники, а ding an sich selbst betrachtet — метафизическая вещь в себе, которая может быть фрагментом игры, аниме или трейлером фильма-катастрофы.


                    А еще демо может быть о космосе и это, вероятно, самый подходящий формат. Чтобы исследовать пространство и воочию наблюдать космологические модели, достаточно всего 64K. Сгенерированное изображение смешивает элементы геймдизайна, кинематографа и программирования в синхронизированный аудиовизуальный коктейль, который затянет вас в процесс отрешенного созерцания межгалактических чудес.

                    Читать дальше →
                  • «Магическая константа» 0x5f3759df

                    • Translation
                    В этой статье мы поговорим о «магической» константе 0x5f3759df, лежащей в основе элегантного алгоритмического трюка для быстрого вычисления обратного квадратного корня.

                    Вот полная реализация этого алгоритма:

                    float FastInvSqrt(float x) {
                      float xhalf = 0.5f * x;
                      int i = *(int*)&x;  // представим биты float в виде целого числа
                      i = 0x5f3759df - (i >> 1);  // какого черта здесь происходит ?
                      x = *(float*)&i;
                      x = x*(1.5f-(xhalf*x*x));
                      return x;
                    }

                    Этот код вычисляет некоторое (достаточно неплохое) приближение для формулы

                    image

                    Сегодня данная реализация уже хорошо известна, и стала она такой после появления в коде игры Quake III Arena в 2005 году. Её создание когда-то приписывали Джону Кармаку, но выяснилось, что корни уходят намного дальше – к Ardent Computer, где в середине 80-ых её написал Грег Уолш. Конкретно та версия кода, которая показана выше (с забавными комментариями), действительно из кода Quake.
                    В этой статье мы попробуем разобраться с данным хаком, математически вывести эту самую константу и попробовать обобщить данный метод для вычисления произвольных степеней от -1 до 1.

                    Да, понадобится немного математики, но школьного курса будет более, чем достаточно.
                    Читать дальше →
                  • Решение разреженных СЛАУ больших размерностей средствами ManagedCuda в .NET

                    Зачастую в прикладных математических и компьютерных моделях возникает необходимость решать системы линейных алгебраических уравнений (СЛАУ). Как правило, на практике матрица в таких СЛАУ оказывается разреженной. Например, разреженные матрицы встречаются в моделях с конечно-разностными или конечно-элементными методами решения дифференциальных уравнений. Возникают сильно разреженные матрицы большой размерности при моделировании материальных и информационных потоков в крупных технологических сетях (системы газоснабжения и газораспределения, канализационные и теплоснабжающие системы, электросети и компьютерные сети и др.). Общим для технологических сетей является представление их моделей в виде графа, у которого матрица инциденций оказывается практически всегда сильно разреженной.

                    В статье будет рассказано о том, как ваш покорный слуга значительно повысил эффективность компьютерной модели расчета нестационарных течений газа в крупных системах газоснабжения произвольной конфигурации, благодаря применения библиотеки ManagedCuda и nVidia CUDA 7.0. Однако изложение будет вестись без привязки к конкретной предметной области.
                    Читать дальше →
                  • Элементы функционального программирования в C++: композиции отображений


                      Стандартная библиотека языка C++ очень неплоха. Долгие годы стандартные алгоритмы верой и правдой служат простому плюсовику!


                      Но вся отрасль бурно развивается, и язык C++ вместе с ней. Уже давно люди стали понимать, что как бы хороши ни были стандартные алгоритмы, у них есть большой недостаток: нулевая компонуемость. Иначе говоря, невозможно без дополнительных сложностей объединить в цепочку несколько алгоритмов преобразования, фильтрации, свёртки и т.д. и т.п.


                      Существует несколько вариантов решения данной проблемы. Один из них — ленивые вычисления и диапазоны — уже на подходе к стандартной библиотеке.


                      Однако, и старые добрые алгоритмы пока рано списывать со счетов.


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

                      Читать дальше →
                      • +32
                      • 11.7k
                      • 5
                    • .NET-обёртки нативных библиотек на C++/CLI

                      Предисловие переводчика


                      Данная статья представляет собой перевод главы 10 из книги Макруса Хиге (Marcus Heege) «Expert C++/CLI: .NET for Visual C++ Programmers». В этой главе разобрано создание классов-обёрток для нативных классов C++, начиная от тривиальных случаев и до поддержки иерархий и вирутальных методов нативных классов.

                      Идея этого перевода появилась после статьи «Unmanaged C++ library в .NET. Полная интеграция». Перевод занял больше времени, чем ожидалось, но, возможно, подход, показанный здесь, также будет полезен сообществу.
                      Читать дальше →
                      • +16
                      • 13.3k
                      • 2
                    • Новая SQLite ORM для C++

                      Всем привет. Пишу на Хабре впервые, не судите строго. Хочу поделиться своим опытом поиска универсальной SQLite ORM библиотеки на С++ и моей новой разработкой собственной библиотеки для работы с SQLite на C++ sqlite_orm.


                      Когда я искал ORM'ку я отталкивался от нескольких ключевых пунктов:


                      • библиотека должна иметь как CRUD, так и не CRUD
                      • должны быть гибкие условия WHERE, а не тупо WHERE id = ?
                      • должен быть функционал миграций (синхронизации схемы) на случай обновлений приложения
                      • фичи вроде ORDER BY и LIMIT тоже должны быть
                      • сериализация классов не должна быть написана в своих классах. Это очень важный пункт для меня с тех пор, как я познакомился с Java и с Android-разработкой в частности. Android-разработчики стараются придерживаться принципа единственной ответственной (single responsibility principle), что очень важно если приложение собрано из разной кучи библиотек и модулей, которые могут меняться с течением времени. И поэтому самая популярная на github SQLite ORM'ка на С++ hiberlite меня не устроила способом сериализации — класс модели должен иметь статичную функцию serialize с кодом непосредственной сериализации. Я искал такой модуль, от которого бы не зависел код моей модели данных. Ведь у меня может быть несколько сериализаторов (JSON, XML, SQLite), и по-хорошему каждый должен прилагаться к модели данных, но никак ее не менять, а иначе получится каша в коде модели.
                      Читать дальше →
                    • Тяжелое расставание с Net-Tools

                      • Tutorial

                      Не секрет, что Net-Tools пора на почетную отставку. Да, многим админам и мне в том числе, до условного рефлекса Павлова знакомы команды ifconfig, route, netstat. На первый взгляд нет причин что-то менять, а лучшее как всегда враг хорошего.




                      Давайте узнаем почему Net-Tools уже не тот и как безболезненно с него перейти на iproute2 .

                      Читать дальше →
                    • Создавая хтонических чудовищ, документируй

                        ioninja

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


                        Нижележащий текст преследует несколько целей:


                        1. Дать краткий обзор (читай — немного погундеть на тему) неудовлетворительного состояния инструментария, применимого к хтоническим чудовищам мира C/C++;
                        2. Предложить своё альтернативное решение (бесплатно-без-СМС-и-регистрации — проект некоммерческий и выложен на GitHub под MIT-лицензией);
                        3. Призвать сообщество пообщаться на тему и собрать идеи;
                        4. Пригласить присоединиться к разработке проекта на GitHub.

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



                        Читать дальше →
                      • OpenCL. Как начать

                        • Tutorial

                        Тяжелый старт


                        Всем привет! Какое-то время назад я начал копать тему с OpenCL под C#. Но наткнулся на трудности, связанные с тем, что не то, что под C#, а вообще по этой теме очень мало материала. Какую-то вводную по OpenCL можно почерпнуть здесь. Так же простой, но работающей старт OpenCL описан вот тут. Ни на йоту не хочу обидеть авторов, но все статьи, что я находил на русском (и на хабре в том числе) страдают одной и той же проблемой — очень мало примеров. Документация есть, её много и как принято для хорошей документации читается сложно. В своей статье (а если всё будет нормально, то и в цикле статей), я постараюсь поподробней описать эту область, с точки зрения человека, который начал её копать с нуля. Думаю такой подход будет полезен тем кто хочет быстро стартовать в высоко производительных вычислениях.
                        Дальше