Все потоки
Поиск
Написать публикацию
Обновить
195.01

C++ *

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

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

Linux на мобилках, PDFium и как рендерить PDF в 2 раза быстрее

Время на прочтение5 мин
Количество просмотров6.7K

Привет, Хабр! В этой статье хотим рассказать о том, как мы протестировали три основные открытые библиотеки для работы с PDF-документами: Poppler, PDFium и MuPDF. Сравнили скорость рендера документов разного объёма, качество рендера, требования к технологиям разработки и условия лицензий для коммерческих продуктов на базе этих библиотек. Спойлер: победителем стала библиотека PDFium, но, как всегда, есть нюансы. Под катом обо всём по порядку.

Читать далее

Вышла Visual Studio 2022 Preview 2

Время на прочтение3 мин
Количество просмотров18K

Мы рады объявить о выпуске второй предварительной версии Visual Studio 2022! Preview 1 была первой 64-разрядной версией Visual Studio, обеспечивающей улучшенную масштабируемость. Начиная с Preview 2, мы сосредоточены на предоставлении новых возможностей в таких областях, как личная и командная продуктивность, новые разработки и постоянные инновации. В этом посте мы расскажем о нескольких новых возможностях Visual Studio 2022.

Скачать Visual Studio 2022 Preview 2.

Читать далее

Неопределенное поведение, пронесенное сквозь года

Время на прочтение8 мин
Количество просмотров6.1K

У вас бывают в разработке такие периоды, когда что-то в коде идет не так, ты ищешь баг, а потом оказывается, что за ним стоял еще один баг? Мне нравится искать баги. Это создает ощущение словно ты Шерлок Холмс и являешься главным героем в детективе, где кто-то из обширного списка на вид безобидных классов и функций вызывает неожиданное и даже неопределенное поведение программы, а ты своим зорким взглядом и экспериментами пытаешься вычислить этого мерзавца в кратчайшие сроки.

Можно выделить несколько стадий поиска бага:

• удивление (не знаю как вы, но я каждый раз как в первый раз удивляюсь когда что-то вдруг в моем коде работает не так, как ожидается);

• обвинение всех кругом в баге (коллег по проекту, github, сторонние либы, компилятор), но только не себя;

• смирение с тем, что возможно баг появился из-за меня и поиск бага: анализ выдаваемого результата, локализация ошибки, эксперименты с входными данными; в общем, все, что делает нормальный детектив, только в сфере программирования;

• если причина бага найдена быстро, то я хвалю себя за то, что нашел баг, при этом, я не напоминаю себе, что причиной бага стал тоже я, а не коллеги по проекту, не github, не сторонние либы и не компилятор;

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

Читать далее

«Двойной плюс»: биография создателя С++ Бьярне Страуструпа

Время на прочтение8 мин
Количество просмотров10K

Можно не любить язык C++, можно даже не знать о его существовании, но вот не пользоваться софтом на нём — это, наверное, получится только в пещере. C++ есть в операционных системах и браузерах, автомобилях и банкоматах, сервисах вроде YouTube и программах вроде Photoshop. Получается, всё человечество каждый день взаимодействует с тем, что когда-то создал один конкретный человек.

Ранее мы публиковали интервью, которое Бьярне Страуструп дал на нашей конференции C++ Russia. А теперь решили, что и описать биографию такого человека никогда не будет лишним.

Читать далее

Vulkan. Руководство разработчика. Рендеринг и отображение на экране

Время на прочтение14 мин
Количество просмотров8.4K


Добрый день. Я занимаюсь переводом уроков к Vulkan API с английского языка на русский (ссылка на оригинальный тьюториал — vulkan-tutorial.com).

Сегодня я бы хотела поделиться с вами переводом заключительной главы в разделе Drawing — «Rendering and presentation».

Содержание
Читать дальше →

Интеграция PVS-Studio в uVision Keil

Время на прочтение14 мин
Количество просмотров3.9K

Я занимаюсь разработкой для встраиваемых систем (в основном, под STM32 и Миландр), в качестве основной среды я использую uVision Keil. И, поскольку пишу я на С и С++, уже долгое время меня мучает вопрос – правильно ли я пишу код? Можно ли так?


Не, он конечно компилируется, но это же С++, язык, где «program is ill-formed, no diagnostic required» — это норма.


Соответственно, на протяжении нескольких лет я донимал руководство просьбами купить нам лицензию PVS-Studio и, наконец, когда моя просьба неожиданно совпала с моментом, когда нужно было срочно потратить выделенные на закупку ПО деньги, нам ее все-таки купили!


Радости моей с одной стороны не было предела, но с другой оказалось, что не все так хорошо; сходу PVS-Studio встраивается только в Visual Studio (что порадовало отдел разработки под десктопы) и продукты от Jetbrains (CLion, Rider, Idea, Android Studio), для некоторых других систем сборки тоже предусмотрены готовые сценарии, а вот для Keil’a заявлена только поддержка компилятора – и все. А значит, нужно заниматься интеграцией. Кто будет этим заниматься? Ну, мне же больше всех надо…


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

Как я исполнил свою мечту и написал движок Диззи

Время на прочтение8 мин
Количество просмотров10K

Давным-давно, два английских школьника умудрились основать серию игр, ставшую легендарными играми для ZX-Spectrum. Да, речь про братьев Оливеров и их неподражаемого Диззи. Впервые услышал я про Диззи в начале девяностых в возрасте лет эдак девяти-десяти, когда мне рассказали, как подруга моей сестры играет в некую игру с бегающим и собирающим предметы яйцом на компьютере (!). Сам спектрум у меня появился чуть позже – в одиннадцать лет (это октябрь 1994 года), почти вместе с книжками серии «Как написать игру для ZX-Spectrum». И вот в книжке про написание игры на ассемблере была картинка из игры Dizzy-4. Увы, самой игры у меня не будет ещё год-два. Но всё-таки, в конце-концов, мне её купили, как сейчас помню, в ларьке в СПб на Балтийском вокзале. Кассета была известной многим студии “Михаил и Михаил” (MIM). Вот тогда-то я прочно запал на Диззи. Я играл в него с утра до вечера, разгадывая головоломки и собирая монеты. Много-много лет мне очень хотелось написать что-то подобное. В 1996 у меня даже получился невероятный примитив на бейсике. Много лет я методично приближался к своей цели. И вот именно сейчас, спустя 25 лет, у меня наконец-то получилось что-то более-менее играбельное. Вот о том, как написать такую игру, я и расскажу.

std::move vs. std::forward

Время на прочтение8 мин
Количество просмотров52K

Несмотря на то, что материалов на тему move-семантики и идеальной передачи в Интернете предостаточно, вопросов типа «что я должен здесь использовать: move или forward?» не становится меньше или мне просто «везет» на них. Поэтому и решено было написать эту статью. Предполагается, что читатель хотя бы немного знаком с rvalue-ссылками, move-семантикой и идеальной передачей.

Читать далее

Разработка панели индикации с помощью сдвиговых регистров IN74HC595AD

Время на прочтение7 мин
Количество просмотров5.9K

Часто при разработке радио-электронных устройств возникает необходимость выполнения климатических условий с повышенными требованиями, таких как предельно допустимые рабочие температуры -60…+70 ºC. И эти требования становятся проблемой для реализации цифровых панелей взаимодействия с пользователем. Рабочие температуры ЖК индидикаторов в пределах -20...+70 ºC , люминисцентных газоразрядных индикаторов -40..+70 ºC. Поэтому возникает необходимость организовывать панели взаимодействия с оператором-пользователем с помощью 7-сегментных цифровых индикаторов, одноцветных и двухцветных светодиодов. Для использования таких органов индикации необходимы схемотехнические и программные решения. Есть разные способы управления системой индикации. В данной статье хочу привести свой опыт использования и организации схемно-программной структуры проекта.

Читать далее

Как вывести рендеринг карт на сверхзвук и не…

Время на прочтение6 мин
Количество просмотров7.5K

В данной статье я расскажу как я делал тайлер на основе openstreetmaps на С++/Qt. Задача была написать картографический модуль приложению для поисково-спасательных отрядов, которые работают в условиях недоступного интернет соединения и возможно целые сутки, поэтому требования к картографическому модулю стояли следующие:

- работа в оффлайн режиме

- насколько это возможно быстрый рендеринг определённой области на карте

- высокая энергоэффективность загрузки и отображения тайлов на карте

Читать далее

С++ на практике

Время на прочтение11 мин
Количество просмотров47K


Все мы знаем, что С++ — мощный язык, у которого много сторонников. Но чем могут быть недовольны даже сторонники? Где сталкиваешься с неудобствами и чем они вызваны? Почему в примитивном приложении могут вылезти неожиданные сложности и чего не хватает в стандартной библиотеке? А главное, что можно сделать для улучшения ситуации?


Антон Полухин (antoshkka), состоящий в комитете по стандартизации C++ и работающий в «Яндекс.Такси», рассказал обо всём этом в докладе «C++ на практике». Сам доклад появился ещё в 2019-м, и с выходом C++20 что-то изменилось, но главные тезисы и вывод остались актуальны. Поэтому теперь, готовя новую конференцию C++ Russia 2021, мы решили сделать для Хабра пост на основе этого доклада. Под катом — и текст, и видеозапись. Далее повествование идёт от лица Антона.

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

Фильтр Калмана: разбор навигационной системы БПЛА + исходный код

Время на прочтение14 мин
Количество просмотров31K

В статье я бы хотел объяснить принципиальную разницу между фильтром Калмана (ФК) и классическими фильтрами, кратко рассмотреть преимущество выбранного ФК поделиться опытом использования данного ФК в во встраиваемой системе квадрокоптера для навигации на основе инерциального и ГНСС датчиков и поделиться исходным кодом с демкой для самостоятельного изучения.

Читать далее

Оптимизация на простых типах данных. Часть №2 «Числа»

Время на прочтение8 мин
Количество просмотров6.5K
19 апреля автор курса «Алгоритмы для разработчиков» в Яндекс.Практикуме и разработчик в компании Joom Александра Воронцова провела открытый вебинар «Оптимизация на простых типах данных». У Аси за спиной 11 лет разработки, опыт олимпиадного программирования, а также работа в Яндексе с высоконагруженными проектами.

Мы подготовили расшифровку вебинара в двух частях. Первая часть — про строки и работу с ними, вторая — про числа.

Статья будет полезна разработчикам на Python и C/C++, которые хотят научиться трюкам для ускорения кода, а также программистам на других языках, которым интересны фишки, связанные с типами данных.


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

Модульное программирование в C++. Статические и динамические плагины

Время на прочтение13 мин
Количество просмотров18K

Модульное программирование в C++. Статические и динамические плагины


Плагины на С++

На тему модульности программ в С++, в Интернете, теоретических материалов много, а практических – мало. Поэтому, не найдя подходящего прототипа для собственного проекта, пришлось изобретать очередной «велосипед», из чего-то, ведь, исходить надо.

Сложность программирования, тестирования, отладки, поддержки и сопровождения программных продуктов заставляет искать пути борьбы с ней. Одним из традиционных способов является использование плагинов и сервисов с виртуальными интерфейсами. Однако доступные примеры предпочитают иметь дело с консолью, тогда как нам интересны окна и другие компоненты из арсенала GUI (графического интерфейса пользователя).
Читать дальше →

Оптимизация на простых типах данных. Часть №1 «Строки»

Время на прочтение12 мин
Количество просмотров8.1K
19 апреля автор курса «Алгоритмы для разработчиков» в Яндекс.Практикуме и разработчик в компании Joom Александра Воронцова провела открытый вебинар «Оптимизация на простых типах данных». У Аси за спиной 11 лет разработки, опыт олимпиадного программирования, а также работа в Яндексе с высоконагруженными проектами.

Мы подготовили расшифровку вебинара в двух частях. Первая часть — про строки и работу с ними, вторая — про числа.

Статья будет полезна разработчикам на Python и C/C++, которые хотят научиться трюкам для ускорения кода, а также программистам на других языках, которым интересны фишки, связанные с типами данных.


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

Да, опять онлайн: анонс восьми осенних конференций от JUG Ru Group

Время на прочтение4 мин
Количество просмотров1.7K


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


  • Heisenbug (тестирование): 5-7 октября
  • SmartData (data engineering): 11-14 октября
  • DotNext (.NET): 18-21 октября
  • Joker (Java): 25-28 октября
  • HolyJS (JavaScript): 2-5 ноября
  • DevOops (девопс): 8-11 ноября
  • C++ Russia (C++): 15-18 ноября
  • Mobius (мобильная разработка): 22-25 ноября

Под катом — ответы на главные вопросы. Почему снова онлайн? Что там будет? Есть ли абонемент на весь сезон? Можно ли выступить с докладом? Что известно о программе и как меняется цена билетов?

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

Сканирование кода C++ с помощью GitHub Actions

Время на прочтение2 мин
Количество просмотров3.3K

В прошлом году GitHub выпустил фичу сканирования кода, которая позволяет разработчикам добавлять проверки безопасности в свою среду CI/CD и в целом в рабочую среду. В этом посте демонстрируются основы использования CodeQL, механизма анализа, лежащего в основе сканирования кода, в связке с GitHub Actions.

Читать далее

Один день из жизни разработчика PVS-Studio, или как я отлаживал диагностику, оказавшуюся внимательнее трёх программистов

Время на прочтение3 мин
Количество просмотров5.2K

Главное предназначение статических анализаторов – найти те ошибки, которые остались незамеченными разработчиком. И недавно команда PVS-Studio снова столкнулась с интересным примером мощи этой методики.

Читать далее

Использование coroutines из С++20 в связке с NRF52832 и GTest

Время на прочтение29 мин
Количество просмотров9.3K

Появилась идея в домашнем проекте попробовать использовать сопрограммы из С++20 на маленькой железке. В качестве модуля для экспериментов был выбран E73 NRF52832. Из инструментария, который использовался в процессе разработки- arm-gcc-gnu-none-eabi 10.2, MSVC для проверки идей и прогона тестов на Windows-платформе. Изначально было в планах продемонстрировать на чем-то концепцию и как именно их можно было применять. Была идея адаптирования примера в виде мигания светодиодом, но он был слишком простой. Необходимо было придумать что-то более сложное и более полезное, что ли. Таким образом появилась идея переписать драйвер дисплея и пары фрагментов SPI-FLASH в проекте-долгострое.

Читать далее

Онлайн-конференция KasperskyOS Night: доклады о нестандартных задачах

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

Во всём мире найдётся немного компаний, разрабатывающих свою ОС с нуля (то есть не просто вариант Linux). Поэтому у каждой из них есть что рассказать: там занимаются задачами, с которыми обычный прикладной разработчик не сталкивается. Слушать их рассказы можно и из теоретического интереса («а как у вас всё внутри устроено?»), и из практического: «а как писать приложения под вашу ОС и что это мне даст?»

В России такой компанией стала «Лаборатория Касперского», где работают над безопасной системой KasperskyOS. Своим опытом команда делится на онлайн-конференции KasperskyOS Night, в предыдущий раз она проходила зимой, а 7-8 июля грядёт летняя версия. Поэтому в этом тексте «два в одном»: сначала видеозаписи зимних выступлений, а затем полная программа нового мероприятия.

Читать далее

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