Обновить
256K+

C++ *

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

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

Как я делал компактную библиотеку для создания приложений с графическим интерфейсом на языке C++. Часть 3

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

Это третья статья из цикла статей о создании компактной кросс‑платформенной библиотеки для разработки приложений с графическим интерфейсом на языке C++ — Frenchie. Для тех, кто привык изучать исходный код самостоятельно, репозиторий с исходным кодом библиотеки можно найти по ссылке. В данном материале я продолжу рассказывать про ту часть библиотеки, которая управляет состоянием контекстного окна и отслеживает связанные с ним события.

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

Читать далее

Новости

Stream compaction на NEON. Векторизуем copy_if

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

Как разогнать copy_if на NEON в 30+ раз без единой ветки в горячем цикле — эмулируем compress инструкцию, которой в NEON нет, через table lookup и немного битовой магии.

Читать далее

Как я делал компактную библиотеку для создания приложений с графическим интерфейсом на языке C++. Часть 2

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

Это вторая статья из цикла статей о создании компактной кросс‑платформенной библиотеки для разработки приложений с графическим интерфейсом на языке C++ — Frenchie. Для тех, кто привык изучать исходный код самостоятельно, репозиторий с исходным кодом библиотеки находится по ссылке. В данном материале я расскажу, про ту часть библиотеки, которая управляет состоянием контекстного окна и отслеживает связанные с ним события - platform backend.

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

Читать далее

Unreal Engine 6 на Verse — это что-то крышесносное

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

Unreal Engine убирает блюпринты и приносит ECS и Verse!
Написал свое впечатление от первого запуска 6й версии движка.

Читать далее

Mix Hub в свой VST3-плагин: анализ конфликтов между дорожками

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

Привет, Хабр! Меня зовут Артур Валиев. Я продолжаю делать свой VST3-плагин Mix Teacher AI.

В прошлый раз я рассказывал про идею плагина: поставить его на дорожку, посмотреть уровни, пики, RMS, примерный LUFS, частотные зоны и получить простую подсказку человеческим языком.

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

Потому что в сведении часто проблема не в одной дорожке.

Кик сам по себе нормальный.
Бас сам по себе нормальный.
Вокал сам по себе нормальный.
Барабаны вроде тоже нормальные.

А вместе всё почему-то не звучит.

И вот тут начинается самая интересная часть: конфликты между дорожками.

Читать далее

OSDEV: Itanium ABI часть 1: Array Operator new Cookies

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

Приветствую!

Код тут

Реализация new cookies в соответствии с C++ Itanium ABI зависит только от osdev-libstdc

Погнали!

Mix Teacher: как я сделал VST3-плагин-помощник для сведения

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

Привет, Хабр!

Я веду свой блог и обычно пишу про кодеки и про удаленный доступ. Эта статья — немного особенная: она не только как разработчика, но и как музыканта.

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

Теперь рассказываю от имени электронного продюсера:

У меня много лет была одна постоянная проблема: цифровая громкость.

Когда я был моложе и писал музыку во FL Studio, я часто задавался вопросом: почему у меня во Fruity Loops звук такой жирный, а в других DAW — какой-то другой? Почему одни сэмплы сразу звучат «мощно», а другие теряются? Почему пресет в синтезаторе вроде бы крутой, но в миксе всё разваливается?

Со временем я понял неприятную вещь: очень часто дело не в магии DAW, не в секретном плагине и не в «аналоговом тепле». Дело в громкости, gain staging и клиппинге. В перегрузе. В том, что сигнал уже на входе почти упирается в цифровой потолок.
Сэмплы, которые мы скачиваем, часто нормализованы почти в 0 dBFS: -0.1, -0.05, иногда вообще около -0.01. Пресеты в синтезаторах могут быть перегружены ещё до того, как вы повесили первый EQ. Потом сверху добавляется компрессия, сатурация, лимитер, ещё один «улучшайзер», и внезапно микс вроде громкий, но не звучит.

Я устал постоянно вручную следить за уровнями, пиками, RMS, динамикой и частотными зонами. Поэтому начал писать свой плагин — Mix Teacher AI.

Читать далее

Паттерны доступа к данным, которые выбесят ваш процессор

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

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

Читать далее

Как я делал компактную библиотеку для создания приложений с графическим интерфейсом на языке C++. Часть 1

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

Это начало цикла статей о создании компактной кросс‑платформенной библиотеки для разработки приложений с графическим интерфейсом на языке C++ — Frenchie. Я расскажу про то, как пришел к созданию этой библиотеки, а также постараюсь максимально понятно и просто описать общие принципы её работы и архитектуру.

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

Читать далее

Быстрые и компактные структуры данных для RMQ

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

Range minimum query – это классическая задача, в этой заметке решаем статический вариант. Есть массив A[0..n-1]; нужно построить структуру данных, которая умеет быстро находить минимум и его позицию на произвольном интервале [l, r). Я собрал несколько практических наработок и сделал из них два очень компактных и быстрых варианта:

вариант с 1.05n дополнительных бит, которому иногда нужно обращаться к исходному массиву;

вариант с 2.1n дополнительных бит, который отвечает на запросы без доступа к исходному массиву.

Обе реализации очень быстры на практике: на случайных запросах по массиву размера 10^9 элементов они работают в среднем за 20–30 нс на запрос.

Для ориентира: туториал Codeforces по блочному RMQ описывает структуру, которая отрабатывает запрос за 100 нс для массивов длины 10^7 с 32-битными целыми числами, при этом используя 32n дополнительных бит.

Читать далее

Как начать программировать на C++: обзор бесплатной части курса

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

C++ — один из самых востребованных языков в мире: на нём пишут игры, операционные системы, браузеры, высоконагруженные сервисы и даже микрокод для медицинских устройств. Язык входит в тройку самых популярных по индексу TIOBE, а создать «убийцу C++» пока не удалось никому — попытки были. При этом язык это непростой — с нуля к нему бывает сложно подступиться.

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

Читать далее

Худший язык программирования всех времён /s

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

Есть на ютубе видео на пятьдесят минут с хвостиком, с гордым названием «худший язык программирования всех времён». Не удивлюсь, если вы подумаете, что оно про C++. Оно действительно про плюсы и я его смотрел где-то с полгода назад, ну как смотрел... пробежался на x2 с перемотками, мало ли что обиженный джун там наговорил, но добрый @alyokhinопять про него напомнил, и теперь я его посмотрел полностью. И знаете что самое неприятное? Если убрать интонацию обиженного джуна и оставить только аргументы, то процентов семьдесят там будет правды. Не «спорно», не «зависит от контекста», а буквально правда, которую любой разработчик, проведший с языком пару лет, подтвердит вам не задумываясь.

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

Жанр «почему C++ ужасен» на Хабре выжжен дотла и про Init-зоопарк, перегруженный static, vector названный неправильно, std::move который не move, супер медленный regex, медленный unordered_map вы всё читали раз по двадцать. Сам по себе список этих болей давно не новость, от себя добавлю, что все жалобы и примеры ниже - это следствия одного решения, и я к нему приду. Или открывайте спойлеры, там скрыта история, почему каждая часть языка получалась так, как получалась.

С++ is the best ever programming language

Direct 2D #14. Разбиение на блоки и сжатие. Оптимизация текстур

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

Здравствуйте! Продолжается серия статей по Direct2D. Теперь мы рассмотрели довольно интересную тему - оптимизацию размеров текстур и тому подобное

Читать далее

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

Как «ужать» мегаполис до размеров iPhone 4

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

Помните времена, когда трава была зеленее, мобильный интернет помегабайтным, а Apple осваивала непаханые поля смартфоно-игровых ферм? Начало 2010-х было очень интересным временем, когда мобильные студии создавали целые новые жанры, пытались перенести или адаптировать старые концепции и игры, попутно решая задачи, от которой у десктопного разработчика начинал дергаться глаз. Вот и EA решили взять культовые франшизы SimCity и The Sims со всеми их терабайтами ассетов, сложнейшей симуляцией дорог, пробок и отдельных симов, и попробовать затолкнуть это в карман.

В кармане у пользователя тогда лежал условный iPhone 4 или 5 с уже тогда куцым бюджетом оперативной памяти в районе 100–300 МБ на всё про всё, но айфоновладельцы были "платящей" аудиторией, поэтому игровое подразделение метило в основном в них. Как не превратить смартфон в обогреватель и словить ООМ в первые минуты игры? Выкинуть честную симуляцию на помойку, превратить симов в конечные автоматы, а город сделать хитрой иллюзией из текстурных атласов и таймеров. Раскажу немного как устроены SimCity BuildIt и The Sims Mobile с инженерной изнанки, кода почти не будет, да он и не нужен тут для понимания, а еще будет немного грустинки по российскому подразделению EA, и фотки с закрытия офиса в 2016.

Читать далее

Direct2D #13. Command Lists. Запись графических команд

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

Ну что сказать… Продолжаем! Рассматриваем очередную полезную тему - Command Lists - и, как обычно, с объяснениями

Читать далее

Как уместить 26 типов виджетов, RTL и веб‑сокет в килобайты флеша ESP32 — и при чём тут ИИ

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

Каждый мой проект на ESP32 заканчивался одинаково: микроконтроллер готов, датчики читаются, реле щёлкают — а дальше надо руками писать HTML, CSS, JS и протокол поверх веб‑сокета, чтобы увидеть пару графиков в браузере. На третий раз я решил, что хватит, и сделал библиотеку RisalDash: интерфейс описывается на C++ в несколько строк, а весь фронтенд и протокол генерируются сами и отдаются самим контроллером.

Читать далее

Что лучше — C++ или C#?

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

Самым фатальным недостатком C++ является то, что он скоро умрёт. То, что C++ скоро умрёт — это истина, проверенная временем. 30 лет назад все говорили, что C++ скоро умрёт, потому что появилась Java. 20 лет назад ему пророчили скорую смерть, потому что к Джаве присоединился C#. 10 лет назад C++ должен был умереть, потому что появился Rust. 3 года назад его снова принялись хоронить, когда АНБ выпустило спорную рекомендацию «переходить на memory-safe языки» везде, где это возможно, и я думаю, что ещё через 30 лет тоже все будут говорить, что C++ скоро умрёт.

Откуда столько пессимизма? Считается, что C++ неудобен в использовании, и из-за неочевидных правил языка на нём слишком легко написать опасный и забагованный код. В этой статье я сравню C++ и C# в тех аспектах, которые определяют простоту и удобство использования — насколько легко и приятно писать на этих языках, и какой из них вызывает наименьшее количество боли.

Я не собираюсь ничего набрасывать на вентилятор или разводить холивар, а просто хочу объективно и беспристрастно ответить, наконец, на вечный вопрос: что же всё-таки лучше — C++ или C#?

Объективное и беспристрастное сравнение

Симулятор логических схем с программируемыми гейтами на Lua

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

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

Читать далее

C3D Collision Detection: быстрое выявление коллизий в 3D-сценах

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

Роман Садовников, к.т.н., программист C3D Solver, C3D Labs, рассказывает о нововведениях в модуле C3D Collision Detection.

Модуль C3D Collision Detection применяется в различных отраслях, включая авиационную и автомобильную промышленность, где он служит для управления движением беспилотных транспортных средств (рис. 1). В робототехнике модуль обеспечивает безопасное перемещение станков ЧПУ в динамичной среде, автоматизацию упаковки и предотвращение столкновений с людьми. В игровых и медицинских приложениях модуль отвечает за обработку столкновений виртуальных объектов и используется в тренажерах для обучения проведению операций. В строительстве и логистике C3D Collision Detection помогает контролировать зазоры, реализовывать 3D-проектирование и автоматизировать строительные процессы.

Читать далее

Отрежьте мне миллиард символов: как C++20, string_view и шаблонный ад могут скрывать баг годами

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

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

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

Но я хочу рассказать вам историю одного детективного расследования в недрах крупного OpenBMC-проекта (экосистема серверных платформ swtSyst). Это история о том, как безудержное желание перенести всё в compile-time (constexpr), помноженное на ультрасовременный синтаксис C++20, породило идеальный «молчаливый баг» (silent failure). Он мог бы годами жить в продакшене, успешно компилировался, не выдавал ни одного ворнинга, но полностью ломал логику работы приложения.

Если вы любите метапрограммирование, шаблоны, операторы свёртки (fold expressions) и тонкости работы с памятью в C++ — устраивайтесь поудобнее. Мы отправляемся в шаблонный ад.

Читать далее
1
23 ...