Обновить
295.35

C++ *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Компилируем C++ приложение для запуска в браузере

Время на прочтение4 мин
Охват и читатели2.3K

У фреймворка Android есть небольшой инструмент под названием validatekeymaps.
Это утилита для проверки синтаксиса конфигурационных файлов устройств
ввода (*.kl, *.kcm, *.idc или virtualkeys.*). В документации
предлагается собрать её самостоятельно: скачать исходники Android,
установить необходимую систему сборки и т.д. И это в почти 2023. Неужели
нельзя сделать это в вэбе, чтоб без заморочек и удобно для
пользователя? Спойлер: можно. Этим и займёмся.

Читать далее

Зачем писать на C++ в 2022 году?

Время на прочтение10 мин
Охват и читатели91K

C++ — это язык программирования, основы которого были заложены более 40 лет назад, но который по-прежнему повсеместен. В этой статье мы с вами разберемся, где и почему он используется, и порассуждаем, есть ли у него будущее.

Читать далее

Геометрические фигуры мультимедийной библиотеки SFML для разработки игр на C++

Время на прочтение3 мин
Охват и читатели20K

Перед тем как приступить к рассмотрению темы, геометрические фигуры, разберём каркас программы на С++, которая использует библиотеку SFML.

Для работы с кодом мы будем использовать Visual Studio 2022 и библиотеку SFML. Как подключить библиотеку SFML к Visual Studio 2022 вы можете узнать посмотрев видео инструкцию "Подключение библиотеки SFML C++"

Читать далее

Пишу фреймворк LDL на С++ с поддержкой старых систем

Время на прочтение6 мин
Охват и читатели6.7K

Приветствую хабравчане!

Рассказываю как разрабатываю аналог библиотеки SDL2 на С++ под лицензией boost. Мемы присутствуют:)

Loading

Как оценить реальную производительность своего кода

Время на прочтение9 мин
Охват и читатели16K

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

Продолжение серии статей про работу исключений в С++ «под капотом»

Время на прочтение3 мин
Охват и читатели3.7K

Когда я работал над своей курсовой про то, как передавать С++ исключения из ядра ОС пользовательским программам, я изучал, как работают исключения в С++ и в этом мне очень помогла эта серия статей с Хабра. Теперь я хочу дополнить некоторые мометны, которые недостают в этой серии статей.

Читать далее

Мульти-поточная загрузка и выгрузка текстур в OpenGL C++

Время на прочтение7 мин
Охват и читатели6.7K

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

Читать далее

Игровая камера: сборник приемов

Время на прочтение17 мин
Охват и читатели23K

Сегодня мы узнаем:

- можно ли считать людей, которые инвертируют оси в играх, лицами с нетрадиционной ориентацией;

- что такое фокусное расстояние объектива и для чего оно нужно;

- какой угол обзора надо делать у камер, чтобы монитор выглядел, как окно в виртуальный мир;

- как правильно фотографировать;

- и сделаем простенький симулятор дрифта.

Погнали!

Астрофото: совмещаем одиночные кадры

Время на прочтение11 мин
Охват и читатели9.4K

Одной из главных проблем при съёмке астрофотографий являются разнообразные шумы. Не буду подробно останавливаться на том, откуда они берутся и какие компоненты в них присутствуют. Об этом уже есть хорошая серия статей на Хабре, за подробностями рекомендую обратиться к ней. Здесь я только резюмирую основной способ борьбы с шумом: нужно снять несколько кадров одной и той же области неба (чем больше, тем лучше) и усреднить сигнал с соответствующих пикселей.


Но какие пиксели на разных кадрах считать соответствующими? Если бы можно было гарантировать, что объекты между кадрами не сдвинутся ни на пиксель, то всё было бы предельно ясно: просто суммируем одни и те же пиксели на матрице. Но что делать, когда слежение неидеально, или съёмка вовсе ведётся с неподвижного штатива? Тогда звёзды и другие небесные тела будут смещаться, и перед сложением кадры нужно будет правильно наложить друг на друга. Эта статья посвящена тому, как это сделать.

Читать далее

Stm32 + USB на шаблонах C++. Продолжение'. Делаем MSC

Время на прочтение12 мин
Охват и читатели7.5K

В продолжение темы применения современного C++, а именно шаблонов, в программировании микроконтроллеров рассматриваю реализацию еще одного популярного класса USB - Mass Storage, а также вопрос создания композитного устройства.

Читать далее

KPHP спустя 2 года

Время на прочтение7 мин
Охват и читатели18K

Ровно два года назад — в ту же самую дату и в то же самое время — я опубликовал статью «ВКонтакте снова выкладывает KPHP».

Сегодня рассказываю, куда мы продвинулись за эти два года: про язык, рантайм, использование KPHP вне ВКонтакте, другие open-source проекты и февраль 2022-го.

Читать далее

Какую модель памяти следует использовать в языке Rust?

Время на прочтение10 мин
Охват и читатели9.9K
image

В этой статье рассматривается несколько альтернативных моделей памяти для языка Rust. Надеюсь, эта дискуссия будет ценна всему сообществу Rust – но, в конце концов, это их язык, поэтому и выбор модели памяти тоже за ними.

Эта дискуссия ведется с позиций принятой в Rust безбоязненной конкурентности. Затравкой для нее послужили различные обсуждения, которые я наблюдал и в которых сам участвовал, работая над этой серией статей. Разумеется, мнения у разных членов сообщества тоже разнятся, люди могут обоснованно отстаивать разные варианты решений. Те, кто меня знают, понимают, что эти точки зрения серьезно расходятся с моей. Однако, моя точка зрения продиктована тем, что я давно работаю в условиях максимально возможной производительности, масштабируемости, молниеносного отклика, энергоэффективности, устойчивости и многого другого. В таких условиях определенная перестраховка – выбор не только мудрый, но и жизненно необходимый. В авиации есть примета, что есть пилоты отважные, а есть старые, но отважные пилоты до старости не доживают.

Тем не менее, я рассчитываю, что мой более чем тридцатилетний опыт работы с конкурентностью и моя работа над моделью памяти в C/C++ (безотносительно memory_order_consume), а также моя роль ведущего специалиста по поддержке модели памяти ядра (LKMM) послужат хорошей отправной точкой, чтобы высказаться о более прозаических задачах, решение которых, я уверен, стремятся поддержать в сообществе Rust.
Читать дальше →

Найти и уничтожить: как Clickhouse удаляет собственный код из памяти и переключается на использование Huge Pages

Время на прочтение8 мин
Охват и читатели9.6K

В Clickhouse есть интересный код: при вызове одной функции происходит перевод области памяти исполняемого кода программы на использование Huge Pages. В процессе весь код программы копируется на новое место, память, использовавшаяся изначально для кода программы возвращается ОС, а потом запрашивается снова. Эта статья основана на соответствующей части доклада с Я.Субботника.

Сначала мы посмотрим, что такое виртуальная память и TLB, потом перейдём собственно к Clickhouse, посмотрим, почему там пришла идея делать такие махинации с бинарником в памяти, а в конце посмотрим, как это всё реализовано.

Читать далее

Ближайшие события

Релиз языка программирования NewLang 0.3

Время на прочтение9 мин
Охват и читатели7.3K
image

NewLang — это язык программирования высокого уровня общего назначения. Основной особенностью языка является простой, логичный и не противоречивый синтаксис, который основан на строгой системе грамматических правил. За счет использования макросов, синтаксис языка легко расширяется до более привычного вида на основе ключевых слов.


NewLang находится в процессе активного развития. Это третий публичный релиз в который добавлены новые существенные возможности по сравнению с предыдущей версией.

Читать дальше →

Правка чужого кода

Время на прочтение6 мин
Охват и читатели20K
Всегда приятно, когда удаётся сделать мир чуточку лучше.


Для одного проекта мне понадобился просмотрщик памяти в DOS. В идеале хотелось бы иметь редактор памяти, чтобы в нём был поиск по ключевым словам, перемещение к заданному адресу. Но для старта мне было бы достаточно хотя бы возможность просмотра всего мегабайта доступной «нижней» памяти.

Старожилы знают, что в комплекте с различными версиями ДОС шли дополнительные утилиты, и среди них была «замечательная» утилита debug, которая убога чуть более, чем полностью. Ещё во времена моей молодости эта утилита вызывала у меня самые противоречивые чувства, то сейчас и подавно. Пользоваться ей без успокоительных очень сложно, с другой стороны, хорошо, что она есть. Но мне возможностей и удобства этой утилиты не хватало, поэтому пришлось искать другой подходящий инструмент. После длительного гугления наткнулся на исходники утилиты RAM View.

К сожалению, исполняемого файла найти не удалось, только исходные коды под Borland C++ 3.1, и как впоследствии оказалось, сама программа содержала ошибки.

Всё это вылилось в интересный квест по поиску старого компилятора, исправления ошибок в программе 25-летней давности и создания запроса на слияние.
Читать дальше →

Имя enum'a C++ в рантайме

Время на прочтение10 мин
Охват и читатели9K

Получение имени типа, не важно это структура или перечисление, в C++ — проблема. То, что тривиально известно компилятору на этапе парсинга исходников, не получится перевести в человеко-читаемый вид в рантайме. Можно использовать std::type_info::name, который не является переносимым решением, потому что зависит от реализации манглинга в компиляторе. Некоторые компиляторы (например, MSVC, IBM, Oracle) создают "удобное" имя типа, а вот gcc и clang, возвращают искаженное имя, котороe можно преобразовать в удобочитаемую форму с помощью дополнительных функций, например abi::__cxa_demangle. Чтобы вся эта магия работала нужно подключить RTTI, который тоже не всегда доступен, а иногда и вообще-то вреден, потому что сжирает драгоценную производительность, но можно сделать по другому.

follow the white rabbit

Оптимизируем дерево отрезков, делаем из него куст o_O

Время на прочтение5 мин
Охват и читатели4.3K

Многие знакомы с алгоритмами дерева отрезков и корневой декомпозиции. Однако, не многие задаются вопросом о том, почему они устроены именно так, как они устроены :), и нельзя ли немного изменив их получить выигрыш во времени работы или затрачиваемой памяти. Одно из таких изменений я бы и хотел рассмотреть в этой статье, ведь я сам только недавно задумался об этом, хотя знаком с этими алгоритмами уже более 4 лет.

Математика говорит, что это невозможно, но нам всё равно!

Расширять сознание

Как мы баг в PVS-Studio искали или 278 Гигабайтов логов

Время на прочтение11 мин
Охват и читатели5.8K

Предлагаем вашему вниманию интересную историю о поиске бага внутри анализатора PVS-Studio. Да, мы тоже допускаем ошибки, но мы готовы засучить рукава и залезть в самую глубину "кроличьей норы".


1005_StoriesFromSupport_ru/image1.png


Небольшое предисловие


Наш коллега уже рассказывал про нашу техническую поддержку. Но всегда интересно послушать какие-то истории, и они у нас есть.


Если хочется программистской жести, то можете сразу переходить к следующему разделу. Если же хочется в целом познакомиться, как мы работаем, то продолжайте читать :). Также вы можете посмотреть юмористический доклад о поддержке С++ программистов.

Читать дальше →

Пастильда: Независимое Beta-Тестирование (16+)

Время на прочтение6 мин
Охват и читатели4.9K

Решил купить себе Pastild(у). Это аппаратный хранитель паролей и одновременно USB Flash(ка). Также понравилась возможность съёмной SD карты. Идея аппаратного менеджера паролей, который не требует отдельного USB просто великолепная!

Какие же впечатления от использования Пастильды (User experience)?

Читать далее

Примеры ошибок, которые может обнаружить PVS-Studio в коде LLVM 15.0

Время на прочтение20 мин
Охват и читатели3.9K

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

Читать дальше →

Вклад авторов