Перевод публикации Тита Винтерса в рабочей группе 21 (WG21) — комитета по стандартизации языка C++. Автор обсуждает важный вопрос: поддержку обратной бинарной совместимости или ABI (application binary interface).
В течение последних лет в WG21 я активно пропагандировал то, что прогресс важнее обратной совместимости. Но я сам перестаю в это верить, особенно в отношении поддержания бинарной совместимости (ABI). Читать полностью »
Рубрика «С++» - 8
Бинарная совместимость: сейчас или никогда
2019-11-02 в 16:33, admin, рубрики: abi, бинарная совместимость, Программирование, С++, стандартизацияТрактат о Pinе. Мысли о настройке и работе с пинами на С++ для микроконтроллеров (на примере CortexM)
2019-11-01 в 9:56, admin, рубрики: c++, c++17, gpio, safety-critical software, stm32, STM32F4, программирование микроконтроллеров, С++, шаблоны c++Последнее время я сильно увлекся вопросом надежности софта для микроконтроллеров, 0xd34df00d посоветовал мне сильнодействующие препараты, но к сожалению руки пока не дошли до изучения Haskell и Ivory для микроконтроллеров, да и вообще до совершенно новых подходов к разработке ПО отличных от ООП. Я лишь начал очень медленно вкуривать функциональное программирование и формальные методы.
Все мои потуги в этих направлениях это, как было сказано в комментарии ради любви к технологиям, но есть подозрение, что сейчас никто не даст мне применять такие подходы (хотя, как говориться, поживем увидим). Уж больно специфические навыки должны быть у программиста, который все это дело будет поддерживать. Полагаю, что написав однажды программу на таком языке, моя контора будет долго искать человека, который сможет принять такой код, поэтому на практике для студентов и для работы я все еще по старинке использую С++.
Продолжу развивать тему о встроенном софте для небольших микроконтроллеров в устройствах для safety critical систем.
На этот раз попробую предложить способ работы с конкретными ножками микроконтроллера, используя обертку над регистрами, которую я описал в прошлой статье Безопасный доступ к полям регистров на С++ без ущерба эффективности (на примере CortexM)
Чтобы было общее представление того о чем я хочу рассказать, приведу небольшой кусок кода:
using Led1Pin = Pin<Port<GPIOA>, 5U, PinWriteableConfigurable> ;
using Led2Pin = Pin<Port<GPIOC>, 5U, PinWriteableConfigurable> ;
using Led3Pin = Pin<Port<GPIOC>, 8U, PinWriteable> ;
using Led4Pin = Pin<Port<GPIOC>, 9U, PinWriteable> ;
using ButtonPin = Pin<Port<GPIOC>, 10U, PinReadable> ;
//Этот вызов развернется в 2 строчки
// GPIOA::BSRR::Set(32) ; // reinterpret_cast<volataile uint32_t *>(0x40020018) = 32U
// GPIOС::BSRR::Set(800) ; // reinterpret_cast<volataile uint32_t *>(0x40020818) = 800U
PinsPack<Led1Pin, Led2Pin, Led3Pin, Led4Pin>::Set() ;
//Ошибка компиляции, вывод к которому подключена кнопка настроен только на вход
ButtonPin::Set()
auto res = ButtonPin::Get() ;
Менеджмент памяти или как реже стрелять себе в ногу
2019-10-27 в 11:52, admin, рубрики: C, c++, игровые движки, игры, память, Программирование, С++Привет! В этой статье я попытаюсь рассказать, что из себя представляет менеджмент памяти в программах/приложениях с точки зрения прикладного программиста. Это не исчерпывающее руководство или мануал, а просто обзор существующих проблем и некоторых подходов к их решению.
Зачем это необходимо? Программа — это последовательность команд по обработке данных (в самом общем случае). Эти данные необходимо некоторым образом хранить, загружать, передавать и т.д. Все эти операции не происходят мгновенно, следовательно, они непосредственно влияют на скорость работы вашего конечного приложения. Умение оптимально управлять данными в процессе работы позволит вам создавать весьма нетривиальные и очень требовательные к ресурсам программы.
Замечание: основная часть материала излагается с примерами из игр/игровых движков (т.к. эта тема более интересная лично для меня), однако большую часть материала можно применить и к написанию серверов, пользовательских приложений, пакетов графики и т.д.
Невозможно все держать в памяти. Но если не успел подгрузить, то получишь мыло
Стихи про Хаскель, С++ и программистов
2019-10-13 в 9:07, admin, рубрики: haskell, ирония, ооп, С++, сатира, стихи, Читальный залПривет, не желаешь ли небольшого воскресного отдохновения? Почитай мои стихи, они поднимут тебе настроение, а некоторые и заставят задуматься.
Современный программист
Я программист, осознавший едва
Всю суть программистских контор.
Я миддл опять в мои двадцать два,
А в двадцать один был сеньор.
Дополнение
Работа идет, и, как ни крути,
Меня в ремесло посвятят.
На джуна я выйду годам к тридцати,
А в сорок пойду в детский сад.
Читать полностью »
Шпаргалка по аббревиатурам C++ и не только. Часть 1: C++
2019-10-07 в 6:17, admin, рубрики: c++, аббревиатуры, акронимы, Программирование, разработка, С++Когда-то я собеседовался на должность C++ разработчика в одну приличную и даже известную контору. Опыт у меня тогда уже кое-какой был, я даже назывался ведущим разработчиком у тогдашнего своего работодателя. Но на вопросы о том, знаком ли я такими вещами, как DRY, KISS, YAGNI, NIH, раз за разом мне приходилось отвечать «Нет».
Собеседование я с треском провалил, конечно. Но упомянутые аббревиатуры потом загуглил и запомнил. По мере чтения тематических статей и книг, подготовок к собеседованиям и просто общения с коллегами я узнавал больше новых вещей, забывал их, снова гуглил и разбирался. Пару месяцев назад кто-то из коллег небрежно упомянул в рабочем чате IIFE в контексте C++. Я, как тот дед в анекдоте, чуть с печки не свалился и опять полез в гугл.
Оптимизация портфеля облигаций с применением библиотеки ALGLIB
2019-10-05 в 17:41, admin, рубрики: alglib, c++, инвестиции, математика, облигации, С++В статье пойдет речь об опыте разработки программы для составления эффективного портфеля облигаций с точки зрения минимизации его дюрации. Возможно, я не буду оригинален и для всех, кто инвестирует в облигации вопросы определения оптимальных весов давно решены, но все же, надеюсь, описанный подход и приведенный программный код будут кому-то полезны.
Статья, ввиду наличия в ней не малого объема математики, кому-то может показаться усложненной. Но если уж Вы решили заняться инвестициями, то нужно быть готовым к тому, что в финансовой реальности часто встречается математика и еще значительно сложнее.
Исходные коды программы и пример портфеля для оптимизации выложены на GitHub.
Итак, имеем задачу сформировать эффективный портфель облигаций.
Читать полностью »
Gradle + LLVM
2019-10-02 в 16:20, admin, рубрики: c++, clang, gcc, gradle, linux, LLVM, Visual Studio, windows, Разработка под Linux, разработка под windows, С++Этот небольшой пост может оказаться полезен тем, кто хотел бы быстро начать работать с LLVM, не заморачиваясь с закачкой исходников и просторойкой фреймворка. Кто не хотел бы ковыряться в малопонятных скриптах CMake-а чтобы добиться ожидаемого результата, ну и наконец, просто для ленивых :)
Я расскажу, как сделать это изящно, буквально парой строк в билд-скрипте Gradle-а.
Читать полностью »
Константные указатели на указатели на указа…
2019-09-23 в 20:34, admin, рубрики: c++, const, С++, указателиВведение
Недавно ко мне подошли с вопросом, «что это и как этим пользоваться?», показав следующий код:
extern "C" {
void byteMaskDowngrade(byte***const byteMask, const byte *const *const && source) {
// какой-то код.
}
// некоторые фукции.
}
Этим человеком был мой коллега по работе и мы не сразу поняли, что в точности означает параметры в объявлении функции (для тех кому интересно, где вообще может понадобиться такое объявление: в криптографии).
И в упреждение возможных проблем у коллег по цеху, я решил создать данную статью, полагая её в качестве шпаргалки, а именно ответов на два вопроса:
- Как правильно писать такие вот объявления?
- И как их правильно читать?
Создаем на C++ выразительные умные указатели для удаленной памяти
2019-09-14 в 8:27, admin, рубрики: .net, c++, memory, stl, Алгоритмы, Блог компании Издательский дом «Питер», ооп, Программирование, С++, указателиПривет!
Сегодня мы публикуем перевод интересного исследования о работе с памятью и указателями в C++. Материал немного академический, но явно будет небезынтересен читателям книг Галовица и Уильямса.
Следите за рекламой!
Читать полностью »
«Скользкие» места C++17
2019-08-28 в 8:00, admin, рубрики: c++, Блог компании Playrix, Программирование, С++, стандартыВ последние годы C++ шагает вперед семимильными шагами, и угнаться за всеми тонкостями и хитросплетениями языка бывает весьма и весьма непросто. Уже не за горами новый стандарт, однако внедрение свежих веяний — процесс не самый быстрый и простой, поэтому, пока есть немного времени перед C++20, предлагаю освежить в памяти или открыть для себя некоторые особо «скользкие» места актуального на данный момент стандарта языка.
Сегодня я расскажу: почему if constexpr не является заменой макросов, каковы «внутренности» работы структурного связывания (structured binding) и его «подводные» камни и правда ли, что теперь всегда работает copy elision и можно не задумываясь писать любой return.
Если не боишься немного «испачкать» руки, копаясь во «внутренностях» языка, добро пожаловать под кат.
Читать полностью »