Обновить
256K+

C++ *

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

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

C++ Дайджест №6 (16 октября – 29 октября 2023)

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели3.8K

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

Приятного чтения!

Читать далее

Проверяем YTsaurus. Доступность, надёжность, open source

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели3K

В этой статье мы расскажем вам о результатах проверки кода проекта YTsaurus статическим анализатором PVS-Studio и разберём найденные ошибки. Уже больше полугода назад YTsaurus — мощная BigData-система — стала Open Source. Её разработка и использование направлены на расширение инфраструктуры и развитие бизнеса в сфере IT и коммуникаций. Последнее время YTsaurus — частая тема для обсуждения. А судя по статистике на GitHub, проект продолжает набирать популярность. Всё это делает его интересным объектом для исследования.

Читать далее

Backend Driven UI с точки зрения бэкенда: к чему готовиться, если вы решили на него перейти

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

Многим знаком подход Backend Driven UI. С его помощью можно создавать новые страницы, запускать А/B-тесты, легко менять флоу в любое время и сразу на всех платформах. И при этом не надо долго и мучительно перевыкатывать приложение.

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

Читать далее

C# делегаты изнутри. Можно ли расширить С++ стандарт для поддержки делегатов в стиле C#

Уровень сложностиСложный
Время на прочтение13 мин
Охват и читатели7.7K

Чисто техническая статья, рассматривается тема, которая заявлена в заголовке, плюс разные практические методы, которые в этом будут полезны.

Тему предваряет обзор материалов, которые я использовал при написании своей статьи, в одном из которых есть сравнение C# делегатов с техникой которая заменяет их использование на Java, которое я тоже собираюсь проанализировать в конце.

Читать далее

C++23: четыре новых ассоциативных контейнера

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

В C++23 появились четыре новых ассоциативных контейнера: std::flat_map, std::flat_multimap, std::flat_set и std::flat_multiset, которые являются полноценной заменой упорядоченных ассоциативных контейнеров std::map, std::multimap, std::set и std::multiset. Они были добавлены в C++23 по двум причинам: расход памяти и производительность.

Читать далее

Детекция машин на мобилке в 2023. С какими проблемами мы столкнулись и как решали

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

Как мы распознавали машины с камеры мобильного телефона с помощью TensorFlow-lite, C++, Qt и что из этого вышло.

Читать далее

Как и зачем мы парсим XML

Уровень сложностиПростой
Время на прочтение15 мин
Охват и читатели20K

Большинство разработчиков рано или поздно сталкиваются с XML. Этот язык разметки настолько глубоко вошел в нашу жизнь, что сложно представить систему, в которой не используется он сам или его подмножества. Разбор XML - достаточно типовая задача, но даже в ней можно выделить несколько основных подходов. В этой статье мы хотим рассказать, зачем нам потребовалось парсить XML, какие подходы мы опробовали, а заодно продемонстрировать замеры производительности для самых популярных реализаций на C++.

Читать далее

Опечатки, нулевые указатели и коварный таб: 33 фрагмента в библиотеке GTK

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели5.2K

Использование TAB в строковом литерале


GTK – популярный фреймворк с открытым исходным кодом для создания графических интерфейсов, который интересно проверять с помощью анализатора PVS-Studio. Тем более, что предыдущую проверку мы делали около 3 лет назад, а значит, наверняка найдём в нём новые ошибки.


Очень не хотелось частично повторять введение из прошлой статьи "Выявляем опечатки в проекте GTK 4 с помощью PVS-Studio", но подозреваю, что далеко не все читатели знакомы с GTK. Поэтому вкратце: библиотека позволяет кроссплатформенно реализовывать графический пользовательский интерфейс. Полностью бесплатна и имеет открытый исходный код, лицензированный под GNU GPL, что позволяет использовать её в любых проектах (даже коммерческих).

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

Пишем свой QTableView с нуля

Уровень сложностиСложный
Время на прочтение6 мин
Охват и читатели16K

Итак жил был фреймворк Qt и последние 10 лет ничего в нем не менялось. И захотел один чел написать свой QTableView с нужным ему функционалом, а именно захотелось ему выводить ячейки в несколько рядов (по горизонтали) в одной строке. Ещё ему хотелось растягивать одну из ячеек по ширине двух других.

Искал, искал чел готовый пример в интернете и не находил. И вот однажды подумал он посмотреть как сделан внутри сам QTableView и стало плохо ему от количества строк кода, не одна тысяча там.

Читать далее

Инженерный калькулятор на C++. Часть 1: Токенизатор математических выражений

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели24K

Всем привет! Сегодня хочу поделиться опытом написания консольного инженерного калькулятора, который может посчитать выражение вроде (log2(18)/3.14)*sqrt(0.1*10^(-3)/0.02)

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

Читать далее

Как и почему я писал для Флиппера на Си-с-классами

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели13K
Мой Флиппер дошёл до меня больше полугода назад, но что-то под него написать я собрался только сейчас. Его API рассчитаны на язык С — а у меня с ним опыта не очень много. Но проблем с тулингом не возникло — у Флиппера есть своя система сборки, которая скачала мне нужный тулчейн и сгенерировала настройки для IDE.

А для написания кода я решил использовать всё же не C, а C++ — точнее, даже «Си-с-классами». На мой взгляд, затуманенный языками более высокого уровня, такой подход получился удобнее, чем писать на чистом C. Результат можно увидеть в моём репозитории, а в этой статье я попытаюсь описать, какие конкретные фичи языка я использовал, и как именно они мне помогли.

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

Проклятые Земли. Изменяем движок игры! Подробности + ПРИМЕР реверсинга движка

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

Статья о том, как реверс-инжиниринг и разбор форматов могут не только расширить старую любимую игрушку, но и сделать из неё абсолютный шедевр, который будет смотреться уже в новом свете. Обзор уникальных фишек игры Проклятые Земли, исправление её лёгких недостатков и разбор форматов.

Наверняка многие играли в Проклятые Земли и аддоны к ним лет 15, а то и все 23 года назад. При всех достоинствах этой игры, её графика считается устаревшей, а некоторые моменты уж очень спорно реализованы. Я покажу на своём примере как можно сделать любимую игру лучше.

Читать далее

Психический симулятор или Triumvirate of Hearts

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели2.4K

Решил вот поделится своей игрой и своими исследованиями в области психологии.

В RPG играх (например S.T.A.L.K.E.R.) есть система отношения созданная специально для взаимодействия c NPC. И тут я подумал: а что если использовать эту систему, чтобы построить полноценный психический симулятор, где можно манипулировать людьми для достижения определённого результата. В качестве простого примера я выбрал любовные треугольники: в них мужчины (или женщины) конкурируют за возлюбленн(ой/ого) и используют различные методы для расположения к себе своего партнёра. Меня они всегда интересовали потому, что это своего рода испытания для людей и почему бы не сделать игру-стратегию по ним (спасибо нейросети за гениальное название!)

Узнать больше

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

Как устроен PassMark. Воспроизводим тесты из машинного кода

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели9.2K

На сегодняшний день существуют сотни программ для оценки производительности вычислительных устройств, но абсолютным лидером среди них несомненно является PassMark - "Industry standard benchmarking since 1998", - как его позиционирует сам разработчик, и вдобавок предоставляющего обширную публичную базу оценок производительности разнообразных устройств по всему миру для возможности их сравнения между собой. Все это делает PassMark выбором №1 для всех, кто не только желает оценить производительность своего устройства, но и сравнить его с любым другим устройством в мире.

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

Читать далее

[sobjectizer] Релиз версии 5.8.1: реализация пожеланий пользователей и исправление недочетов

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели1.2K

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

Для тех же, кто ни разу не слышал про SObjectizer, очень кратко: это относительно небольшой C++17 фреймворк, который позволяет использовать в С++ программах такие подходы, как Actor Model, Publish-Subscribe и Communicating Sequential Processes (CSP). Основная идея, лежащая в основе SObjectizer, — это построение приложения из мелких сущностей-агентов, которые взаимодействуют между собой через обмен сообщениями. SObjectizer при этом берет на себя ответственность за:

доставку сообщений агентам-получателям внутри одного процесса;

управление рабочими нитями, на которых агенты обрабатывают адресованные им сообщения;

механизм таймеров (в виде отложенных и периодических сообщений);

возможности настройки параметров работы перечисленных выше механизмов.

Составить впечатление о этом инструменте можно ознакомившись вот с этой обзорной статьей.

Читать далее

Показываем видео в терминале

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели19K

Приветствую, сегодня я опробую OpenCV, библиотеку для работы с видео, на примере простой задачи - символами ASCII вывести видеоролик в терминал.

Те, кто ей пользовались, могут сказать, что я забиваю дрелью гвозди - создана она для работы с алгоритмами компьютерного зрения.

Читать далее

FreeCAD и C++ код с неопределённым поведением для медитации

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели6.1K

PVS-Studio, FreeCAD, неопределённое поведение, C++


Изучая код проекта с помощью статического анализатора, иногда задаёшься вопросом: "Как возникла ошибка и почему её до сих пор не заметили?" Хотите посмотреть пример? Тогда приглашаем познакомиться с этой статьёй.

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

Опыт создания UI библиотеки на C++

Уровень сложностиСредний
Время на прочтение21 мин
Охват и читатели20K

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

Наш основной проект (видео мессенджер) использовал WTL для Windows и GTKmm для Linux. Поддержки мака не было. Огромной неприятностью было тащить два идентичных клиента, которые, по идее, должны делать все строго одно и тоже. Разумеется, это никогда не получалось. От мысли что надо бы сделать ещё один нативный клиент для мака начинался нервный тик...

На резонный вопрос - почему сразу делалось не на Qt могу лишь ответить, что это связано с, так скажем, гурманскими предпочтениями и, отчасти, с любовью к монолитным exe. Да и не требовалось на старте ничего кроме винды.

В течении шести лет жизни с двумя кодовыми базами одного и того же, неспешно подбирались легковесные UI библиотеки написанные хотя бы в стиле C++11.

Надо сказать, что мы активно используем boost и всей душой, как можем, его любим...

В 2021 году видимо Гугл работал плохо или звёзды так сошлись, но не нашлось ничего стоящего. Все что попадалось - основанные на рендеринге html проекты и обертка над wxWidgets. Сейчас то мы знаем про lvgl, да...

wxWidgets не плох, но хотелось своего рисования, без окошек под кнопки, поля ввода и списки, boost/bsd подобной лицензией, максимально лаконичной, и в идеале работающей от Windows XP / CentOS 6 на стандартном GDI / X11 до Vulcan на современных машинах.

В итоге, все же было принято волевое решение сделать минимальный UI фреймворк для этого проекта, и сразу выпускать его в Open Source под лицензией boost. 

Читать далее

Как рисуется карта в Фараоне

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели14K

В свободное время я восстанавливаю старенькую, но довольно известную игру Pharaoh. Это ситибилдер, выпущенный в прошлом веке и разработанный Impressions Games. Технология рендеринга в этой игре была значительным достижением для своего времени и способствовала созданию впечатляющей атмосферы Древнего Египта, которая погружает игрока в проработанное окружение, удивляет вниманием к мелким деталям и передает богатство и разнообразие древнеегипетских пейзажей. В этой статье я опишу алгоритм отрисовки города, зданий, объектов, анимации и формат карты оригинальной игры.

Городу нужно больше рабочих...

C++ Дайджест №5 (2 октября – 15 октября 2023)

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели3.4K

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

Приятного чтения!

Читать далее