Date | Title | Description |
19.01.2025 | Операционная система в 1 000 строках кода (Часть 1) | Всем привет! В этой небольшой книге (серии статей, — прим. пер.) мы с нуля, шаг за шагом, напишем скромную ОС.
Вы можете насторожиться, услышав, что разработка ОС или ядра, в частности, их базовых функций на удивление проста. Даже система L... |
03.01.2025 | The Future of C++: Static Reflection and Its Implications | C++ is evolving. The upcoming C++26 standard promises to introduce static reflection, a feature that could revolutionize how developers interact with their code. Static reflection allows programs to observe and manipulate their own structur... |
02.01.2025 | Статическая рефлексия в C++ | Статическая рефлексия обсуждается в грядущем C++26. Wu Yongwei демонстрирует, как применять рефлексию уже сейчас, и показывает примеры того, что может быть станет возможным в C++26.
Статическая рефлексия станет важной частью генерации прогр... |
29.12.2024 | The Race for Performance: Optimizing Ring Buffers in C++ | In the world of programming, speed is king. Every millisecond counts. When it comes to data structures, the ring buffer stands out as a champion. It’s a simple yet powerful tool, especially in concurrent programming. But like any champion, ... |
28.12.2024 | Судный день: топ-10 ошибок в C и C++ проектах за 2024 год | Каждый год мы наблюдаем одинаковую картину: ошибки портят нам код, пытаясь доказать, что они здесь главные. Но сегодня настал день расправы. Давайте посмотрим, какие самые интересные баги мы нашли в этом году...Всем встать!
В течение целого... |
21.12.2024 | PVS-Studio соответствует требованиям ГОСТ Р 71207—2024 (статический анализ программного обеспечения) | Инструментальное средство PVS-Studio разрабатывается с учётом требований, предъявляемых к статическим анализаторам в ГОСТ Р 71207–2024, выявляет критические ошибки и может использоваться при разработке безопасного программного обеспечения. ... |
21.12.2024 | Оптимизация компилятора на пальцах | Почему я это написал, и как читать статью
Недавно получил от друга такое сообщение:
Знаешь, какая статья была бы реально интересна? Если бы в ней было показано, что именно происходит с твоим кодом в результате оптимизаций.
Я сразу же подума... |
16.12.2024 | Развенчиваем популярные мифы и заблуждения о компиляторах | ▍ Введение
Компиляторы всегда были окружены аурой загадочности и магии. Из-за этого многие из нас верят, что они делают то, чего они не делают, или что они не делают того, что делают1
Эта статья станет своего рода продолжением статьи о комп... |
12.12.2024 | Embracing the Future of C++: Trivial Relocation and Time Management with std::chrono | C++ is a language that evolves, like a river carving its path through rock. The introduction of new features often reshapes how developers approach problems. Two recent advancements stand out: trivial relocation in C++26 and the powerful st... |
08.12.2024 | Тривиальное перемещение и рефлексия: реализуем фичу из C++26 в библиотеке | В статье разработчик Барри Ревзин* объясняет, как можно определить и проверить свойства типов для обеспечения тривиального перемещения, разбирая нюансы эффективности, удобства и точности реализации. Основная проблема здесь в необходимости у... |
21.11.2024 | The Inactivity Reboot: A New Layer of Security in iOS 18 | In the digital age, security is paramount. With every update, tech giants like Apple strive to bolster defenses against threats. The latest addition to iOS 18, the Inactivity Reboot feature, exemplifies this commitment. This function aims t... |
20.11.2024 | Реверс-инжиниринг новой функции iOS Inactivity Reboot | В iOS 18 появилась новая функция безопасности: перезагрузка бездействия (inactivity reboot). От чего она защищает и как работает? В этом посте мы рассмотрим все подробности вплоть до расширения ядра и Secure Enclave Processor.
Безопасность ... |
19.11.2024 | Дебажим баги в дебаггере x64dbg. «Шаг с выходом» в GUI | С отладчиком нужно как-то взаимодействовать: через текстовый или графический интерфейс. В "оболочке" программы с хорошо отлаженным ядром может оказаться неприятный баг, и пользователю это вряд ли понравится. Любому разработчику не... |
10.11.2024 | Тяжелый H[header] | Всегда хотел написать о чем-нибудь легком и воздушном, как пишет например @antoshkka про userver или о том, как легко и непринужденно обернуть какую-нибудь хрень алгоритм в десяток шаблонов, полить это все std::optional и попивая кофе ждать... |
05.11.2024 | Грязные трюки C++ из userver и Boost | Привет, я Антон Полухин из Техплатформы Екома и Райдтеха Яндекса. Моя команда разрабатывает userver — современный опенсорсный асинхронный фреймворк с богатым набором абстракций для быстрого и комфортного создания микросервисов, сервисов и у... |
31.10.2024 | Игровое поле экспериментов: какие ошибки могут подстерегать программиста при создании эмулятора | Создание эмулятора для игр Xbox 360 на ПК — задача не из простых, и на каждом шагу можно столкнуться с коварными багами. Сегодня рассмотрим типичные проблемы, которые можно обнаружить при разработке, на примере проекта Xenia.Введение
Не так... |
30.10.2024 | Как Unity отказались от своих строк | В 2014 году в движке Unity набралось столько критических изменений и новинок, что "пятерка" фактически была другим движком. И хотя многие за одинаковым фасадом не особо этого и заметили, но изменения коснулись всех компонентов дви... |
29.10.2024 | The Art of Finding Errors: A Deep Dive into Static Code Analysis | In the world of software development, errors are like hidden landmines. They lurk beneath the surface, waiting to explode at the worst possible moment. Static code analysis is the flashlight that illuminates these dangers. It helps develope... |
28.10.2024 | Самая красивая ошибка, которую я нашёл с помощью PVS-Studio в 2024 году | Сразу предупреждаю, мои вкусы очень специфичны. Красота ошибки в том, что человеку её очень сложно найти. Я не верю, что её можно заметить при обзоре кода. Если только заранее знать, что она есть, и искать её целенаправленно.
Ошибку я нашёл... |
24.10.2024 | Пошаговое повышение производительности алгоритма | Недавно мне довелось работать над новым алгоритмом приближённого поиска ближайших соседей, который называется RaBitQ. Автор этого алгоритма уже предоставил достаточно скоростную реализацию на C++. Я попытался переписать этот алгоритм на Rus... |
21.10.2024 | Сложность алгоритмов и типичные ошибки в Python | Всем привет! Я расскажу, что такое сложность алгоритмов и откуда она берётся, разберу типичные заблуждения и самые частые ошибки новичков. Материал рассчитан в первую очередь на начинающих Python-разработчиков, а также на тех, у кого Python... |
14.10.2024 | Почему важно оптимизировать формат данных | Если вам нужно повысить скорость вашей программы, то первым делом логично будет вспомнить курс по структурам данных и оптимизировать алгоритмическую сложность.
Алгоритмы — важнейшая часть программы: замена «горячего» алгоритма O(n) менее сл... |
09.10.2024 | PPSSPP или всё же psp? Смотрим баги в коде из будущего | Думаю, многих из нас охватывает тёплое чувство ностальгии, когда речь идёт о PSP. Эта портативная консоль, выпущенная в 2004 году, стала настоящим прорывом для своего времени. Она подарила нам возможность наслаждаться полноценными игровыми ... |
30.09.2024 | Просто не копируй это | То, о чем я собираюсь рассказать в статье настолько тривиально, что любой, даже начинающий, разработчик уже это знает - я правда очень на это надеюсь. Тем не менее, приходящий на ревью код, показывает, что люди как делали, так и продолжают ... |
29.09.2024 | The Winamp Saga: Open Source, Licensing Woes, and a Legacy Reborn | In late September 2024, the digital world was rocked by revelations surrounding Winamp, the iconic media player that has survived the test of time. The Llama Group, the current steward of Winamp, opened its source code to the public, but no... |
27.09.2024 | std::array в С++ не медленнее массива в С | Или почему не нужно бояться того, что удобно работает.
Стойте! Уберите руки от клавиатуры, дайте человеку сказать! У этой статьи есть обоснованные причины и благая цель! В прошлой моей статье о массивах (которую необязательно читать для пон... |
11.09.2024 | std::execution принят в C++26 — пора знакомиться | Единый фреймворк асинхронности и параллелизма, возможность делить вычислительные ресурсы разными кодовыми базами без сложной интеграции, простота использования и гибкость - все это то, чего в C++ никогда не было.
В конце июня стандартный ко... |
05.09.2024 | Строки в игровых движках | Исторически потребность в строках и их использование в игровых движках было довольно ограниченое, кроме, разве что, локализации ресурсов, где была необходимость полноценной поддержки чего-то отличного от набора ASCII символов. Но, при желан... |
01.09.2024 | Симкод — современный язык ассемблера | Начну с определений.
Симкод — это последовательность симкоманд.
Симкоманда — это символьная машинная макрокоманда с Си-подобным синтаксисом.
Например, ассемблерной команде add rax, rbx соответствует симкоманда rax += rbx.
Симкод позволяет в... |
30.08.2024 | Гарри Поттер и имя типа в компайлтайм | Пытаюсь понять почему код не компилится
Пару лет назад я написал статью про получение имен элементов enum в моих любимых плюсах без использования typeid, макросов и черной магии, а то и вообще в компайлтайм. Хотя нет, немного магии там все ... |
24.08.2024 | Flutter Entertainment's Bold Move: Investing in Hyderabad's Future | In a world where technology and business services intertwine, Flutter Entertainment is making waves. The company has announced a significant investment of $3.5 million to establish a Global Capability Centre (GCC) in Hyderabad. This decisio... |
23.08.2024 | Что значит инициализировать int в C++? | Недавно я получил по почте от Сэма Джонсона этот вопрос. Вот слегка отредактированное письмо Сэма:
«Возьмём для примера этот код в локальной области видимости функции:
int a; a = 5;
Многие люди считают, что инициализация происходит в строке... |
11.08.2024 | Реализуем эффективный тупль с помощью C++26 | Свет видел много любительских реализаций std::tuple, и реализация своих велосипедов — наверное, действительно действенный способ обучения: вряд-ли можно сказать, что ты что-то по-настоящему понимаешь, если не можешь объяснить, как это что-т... |
02.08.2024 | Как поделить не деля или оптимизация деления компиляторам(и) | Если вы никогда не пробовали смотреть как код на C++ разворачивается компилятором в код Assembly – вас ждёт много сюрпризов, причём, не нужно смотреть какой-то замудренный исходный код полный templates или других сложных конструкций: рассмо... |
24.07.2024 | Фиксим баги в вашем AI или разбор ошибок в OpenVINO | Друзья-разработчики, приглашаем вас продолжить захватывающее путешествие по дебрям кода Intel OpenVINO! Вооружившись статическим анализатором аки детективы, мы разоблачим наиболее коварные, интересные ошибки и опечатки, а также их скрытые т... |
09.07.2024 | UB или не UB – вот в чём вопрос: как gcc и clang обрабатывают статически известное неопределённое поведение | Недавно у нас в команде зашла дискуссия о неопределённом поведении (UB) в C. Напомню для тех, кто не знает: если мы пишем такой код, эффект от выполнения которого (и события в процессе его выполнения) строго не определён в спецификации язык... |
26.06.2024 | Type Loopholes: решая нерешаемое. Рефлексия времени компиляции | loophole - лазейка " data-abbr="Лупхолы">Лупхолы — это техника, позволяющая манипулировать глобальным состоянием компилятора, добавляя значения и считывая их.
Эта техника позволяет решать многие задачи, некоторые из которы... |
26.06.2024 | Нативная рефлексия в C++ уже близко | Почему в 2024 году нам приходится писать каст енума к строке вручную, для каждого кастомного типа нужна своя функция логирования, а биндинги к C++ библиотеке требуют кучу повторяющегося кода?
Если Вы задавались этими, или подобными вопросам... |
26.06.2024 | Выжимаем из Go максимум производительности | Разработчики, которые используют Go, сталкиваются с задачей выжать максимальную производительность из каждой строки кода. Но что делать, если оптимизировать уже нечего, а увеличивать скорость всё равно надо?
Меня зовут Никита Галушко. Я ста... |
19.06.2024 | Ненавижу, _____, C++ массивы | Или почему мне кажется, что про них нужно знать, но не нужно использовать.Вступление
Друзья, вы помните момент, когда впервые сунули указатель на первый элемент массива в оператор sizeof, и ваш код перестал работать так, как вы задумывали? ... |
17.06.2024 | UB or not UB: дублируем элемент std::vector | В статье выясним, можно ли с точки зрения стандарта языка C++ тривиальным вызовом push_back продублировать элемент std::vector. Отвечая на простой вопрос, столкнемся с более интересными: что собой представляет внутренний мир вектора, как &q... |
14.06.2024 | Macroni: рецепт поступательного улучшения языка программирования | Хотя, Clang и используется в качестве инструмента для рефакторинга и статического анализа, у него есть серьёзный недостаток: в абстрактном синтаксическом дереве не предоставляется информации о происхождении конкретных расширений-макросов на... |
23.05.2024 | С++: освобождение ресурсов в деструкторах с использованием вспомогательных функций | В этой статье мы рассмотрим, как правильно разрушать объекты в ООП программе на языке C++, не выполняя избыточных операций. Этим мы завершим цикл публикаций, посвящённый обзору ошибок в игровом движке qdEngine.
Неудачная реализация очистки ... |
20.05.2024 | Compiler Explorer — уникальный проект для исследования компилируемого кода | Этот пост посвящён замечательному инструменту, полезному для каждого, кто интересуется компиляторами или архитектурой компьютеров. Это Compiler Explorer, который я в дальнейшем будут называть CE.
CE — потрясающий инструмент. Если вы с ним н... |
16.05.2024 | Многообразие связных списков | Связный список – классическая структура данных, которая позволяет быстрые вставки/удаления, но при этом просаживает другие операции (случайный доступ к элементу). Мы пройдёмся от базовой реализации до других возможных вариаций этой структур... |
16.04.2024 | 35+ бесплатных ресурсов для начинающих разработчиков С++ | Привет. Предположим, вы захотели начать изучать языĸ программирования C++ или, возможно, тех материалов, что уже изучили, вам недостаточно.
Я — Савва, программирую уже больше 7 лет, работаю менеджером команды наставников в Практикуме на кур... |
05.04.2024 | Как не надо проверять размер массива в С++ | Как часто вам приходится сталкиваться с конструкцией sizeof(array)/sizeof(array[0]) для определения размера массива? Очень надеюсь, что не часто, ведь на дворе уже 2024 год. В заметке поговорим о недостатках конструкции, откуда она берётся ... |
19.03.2024 | Выявление ошибок в работе с памятью в C и C++: Сравниваем Sanitizers и Valgrind | В этой статье вашему вниманию представлено сравнение двух инструментов для поиска ошибок в работе с памятью в программах, написанных на memory-unsafe (небезопасных при работе с памятью) языках — Sanitizers и Valgrind. Эти два инструмента ра... |
04.03.2024 | Проверяем Blender | Командный центр PVS-Studio: "Как быстро летит время... А ведь в этом году, второго января, Blender исполнилось 30 лет! Как будто ещё вчера мы публиковали статью с разбором ошибок... Как 8 лет назад? Надо срочно исправлять ситуацию!&quo... |
24.01.2024 | Многообразие функциональных обёрток | A polymorphic function object wrapper
В далёком 2002-ом комитет по стандартизации C++ посетил пропозал, предлагавший ввести шаблонный класс, некий обобщенный «указатель на функцию», способный работать как с простыми указателями на функции, ... |
01.01.2024 | Что не является ролью человека на планете и в космосе. Мнение | Возможно, кому-то не понравится такое сравнение, но я считаю, что так же как у внутренних органов {а также у клеток, из которых они состоят} есть своя определённая роль, есть определённая роль и у человека как вида на планете. Вот только ро... |
01.01.2024 | 11lc — инновационный компилятор для нового языка программирования | Данная статья посвящена находящемуся на стадии проектирования компилятору 11lc. В ней перечисляются наиболее яркие особенности этого компилятора.
Отсутствие скрытой неэффективности
Это свойство скорее языка программирования 11l, нежели комп... |
17.12.2023 | Тестовое в Firefly Studios или игра за час | Пару недель назад, на меня вышла HR "светлячков" и пригласила поговорить о позиции AI программера в их новую старую игру. Я был несколько удивлен, потому что знаком с парой ребят из студии и знаю, что найм у них сейчас остановлен.... |
10.12.2023 | Магия swizzle из шейдеров в C++ | В шейдере мы можем написать vec3 v0 = v1.xxy * 2, а также любую другую комбинацию x, y, z и w в зависимости от длины вектора. Я рассматриваю только размеры вектора до 4, как самые распространенные для использования. Полученный вектор может ... |
10.12.2023 | 30 лет DOOM: новый код — новые баги | Сегодня первой игре из серии DOOM исполняется ровно 30 лет! Мы не могли обойти стороной это событие и в честь этого решили посмотреть, как же выглядит код этой легендарной игры спустя годы.Предисловие
DOOM навсегда останется в истории как о... |
28.11.2023 | 64-битных переменных для банковского счёта «хватит всем»? | «640 КБ хватит всем», — предположительно Билл Гейтс, примерно 1981 год.
Мы решили, что в нашей системе управления финансовыми базами данных TigerBeetle для хранения всех финансовых сумм и балансов будут использоваться 128-битные числа, и чт... |
24.11.2023 | Выпуск среды разработки Qt Creator 12 | Вчера, 23 ноября 2023 года вышел релиз среды разработки Qt Creator 12.
Qt Creator (ранее известная под кодовым названием Greenhouse) — свободная IDE для разработки на С, C++, JavaScript и QML. Разработана Trolltech (Digia) для работы с фрей... |
05.11.2023 | Поговорим об оптимизирующих компиляторах. Сказ седьмой: борьба с проверками диапазонов | Это цикл статей об оптимизирующих компиляторах вообще и LLVM в частности. Смотри все статьи данного цикла:
SSA форма
Доминирование
Неопределённое поведение
Циклы
CSE
Цикловые инварианты
Проверки диапазонов
В этой статье мы поговорим о том, ... |
31.10.2023 | Проверяем YTsaurus. Доступность, надёжность, open source | В этой статье мы расскажем вам о результатах проверки кода проекта YTsaurus статическим анализатором PVS-Studio и разберём найденные ошибки. Уже больше полугода назад YTsaurus — мощная BigData-система — стала Open Source. Её разработка и ис... |
18.10.2023 | FreeCAD и C++ код с неопределённым поведением для медитации | Изучая код проекта с помощью статического анализатора, иногда задаёшься вопросом: "Как возникла ошибка и почему её до сих пор не заметили?" Хотите посмотреть пример? Тогда приглашаем познакомиться с этой статьёй.
Противоестественн... |
12.10.2023 | Самый быстрый поиск пути на Go без аллокаций и СМС | Алгоритмы важны. Но реализовать их можно очень по-разному.
При одном и том же алгоритме, оптимизированная библиотека будет в тысячу раз быстрее наивной.
Любите оптимизации, специализированные структуры данных и трюки с битами? Тогда скорее ... |
16.08.2023 | Lua FFI
«Мишка сверху весь из плюша, интересно что внутри?» | Под катом описание довольно примитивного FFI для Lua под Win_x64.
Но который, тем не менее, позволяет делать:
local ffi = require ("ffi") local msg = ffi("user32.dll", "MessageBoxA") msg(0, "Message",... |
13.08.2023 | Поговорим об оптимизирующих компиляторах. Сказ пятый: удаление общих подвыражений | Это цикл статей об оптимизирующих компиляторах вообще и LLVM в частности. Смотри все статьи данного цикла:
SSA форма
Доминирование
Неопределённое поведение
Циклы
CSE
В этой статье мы поговорим о классе оптимизаций, которые позволяют избегат... |
07.08.2023 | Правильный if для ускорения работы | Поводом для размышления по этой теме послужил пост где поясняется на примерах два разных пути работы условного оператора if. Приводится генерируемый ассемблер где показано, что в одном случае после кода сравнения идет блок с кодом положител... |
13.07.2023 | Команда AArch64, о которой вам нужно знать | Сегодня я бы хотел поговорить о недооценённой особенности архитектуры набора команд AArch64. На неё часто не обращают внимания, но её активно используют компиляторы. Это хорошая короткая история о том, как Arm стал лучше и «ещё более CISC» ... |
10.07.2023 | Почему язык C никогда не помешает вам совершать ошибки | Короткий ответ: потому что мы так сказали.
:)
... Что?
Ладно, признаю, для статьи это неприемлемо короткий ответ, и мои провокационные слова требуют пояснений.
Изначально проведение конференции Комитета по С было запланировано во Фрайбурге ... |
30.06.2023 | Атомики в Go: особенности внутренней реализации | Атомики в Go - это один из методов синхронизации горутин. Они находятся в пакете стандартной библиотеки sync/atomic. Некоторые статьи сравнивают atomics с mutex, так как это примитивы синхронизации низкого уровня. Они предоставляют бенчмарк... |
28.06.2023 | Подводные камни С++. Решаем загадки неопределённого поведения, ч. 1 | Изучение и понимание неопределённого поведения — важный шаг для разработчика C++, поскольку undefined behavior бывает источником серьёзных ошибок и проблем в программах. UB может проявляться в разных аспектах языка, включая операции с памят... |
20.06.2023 | Модули C++20 и GCC11 | Введение
Одним из главных нововведений стандарта C++20 является добавление модулей. Модули призваны радикально изменить структуру кодовых баз C++ и, возможно, сигнализируют о грядущей кончине заголовков (но, скорее всего, не на моем веку). ... |
14.06.2023 | 60 антипаттернов для С++ программиста, часть 5 (совет 21 — 25) | Перед вами обновлённая коллекция вредных советов для C++ программистов, которая превратилась в целую электронную книгу. Всего их 60, и каждый сопровождается пояснением, почему на самом деле ему не стоит следовать. Всё будет одновременно и в... |
14.06.2023 | Оптимизируем декодирование u128 из base62 | В предыдущей статье мы рассмотрели кодирование u128 в base62, теперь реализуем и оптимизируем обратную операцию декодирования u128 из base62, это может понадобиться, например, для более компактного хранения в памяти или в базе данных.
Чтобы... |
14.06.2023 | Поговорим об оптимизирующих компиляторах. Сказ третий: неопределённое поведение и оптимизации | Это цикл статей об оптимизирующих компиляторах вообще и LLVM в частности. Смотри все статьи данного цикла:
SSA форма
Доминирование
Неопределённое поведение
Вообще-то, третья статья данного цикла должна была рассказывать о конкретных оптимиз... |
09.06.2023 | 60 антипаттернов для С++ программиста, часть 3 (совет 11 — 15) | Перед вами обновлённая коллекция вредных советов для C++ программистов, которая превратилась в целую электронную книгу. Всего их 60, и каждый сопровождается пояснением, почему на самом деле ему не стоит следовать. Всё будет одновременно и в... |
07.06.2023 | 60 антипаттернов для С++ программиста, часть 2 (совет 6 — 10) | Перед вами обновлённая коллекция вредных советов для C++ программистов, которая превратилась в целую электронную книгу. Всего их 60, и каждый сопровождается пояснением, почему на самом деле ему не стоит следовать. Всё будет одновременно и в... |
05.06.2023 | Оптимизируем кодирование u128 в base62 | В процессе работы над своим приложением для заметок, когда я дошел до сохранения данных в базу данных я стал использовать для идентификации записей uuid4 идентификаторы, которые обычно выглядят примерно так, когда представлены в виде строки... |
05.06.2023 | 60 антипаттернов для С++ программиста, часть 1 (совет 1 — 5) | Перед вами обновлённая коллекция вредных советов для C++ программистов, которая превратилась в целую электронную книгу. Всего их 60, и каждый сопровождается пояснением, почему на самом деле ему не стоит следовать. Всё будет одновременно и в... |
29.05.2023 | Как IndVarSimplification применяет математику в вашем коде | Хочу поделиться своей историей расследования одной довольно необычной компиляторной оптимизации. Необычна она в том плане, что для нее производятся довольно нетривиальные математические вычисления. Приступим!Чем я пользовался
Есть такой зам... |
29.04.2023 | О разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования | Цель настоящей статьи - изучить лямбда функции: чем они отличаются от обычных функций и изучить, как они реализованы в С++, Python 3 и Java.
На протяжении этой статьи я буду использовать godbolt.org, чтобы компилировать код и изучать машинн... |
03.04.2023 | Три причины передавать std::string_view по значению | Передавать std::string_view по значению – идиоматично. Давайте разберемся, почему.
Начну с небольшой предыстории. В C++ по умолчанию все передается по значению. Когда мы пишем Widget w, мы получаем совершенно новый объект Widget. Копировани... |
16.03.2023 | Краткий обзор нововведений C++23: deducing this | Документ «deducing this», принятый в последний стандарт C++, вводит новый, третий тип методов классов, сочетающий в себе свойства двух уже существующих: нестатических и статических, открывающий перед нами новые горизонты:
Дедупликация больш... |
07.02.2023 | Тонкости C++: итак, вы объявили класс… | Во время работы наша команда постоянно сталкивается с некоторыми особенностями языка, которые могут быть неизвестны рядовому C++ программисту. В этой статье мы расскажем о том, как работает, казалось бы, обыденная вещь – forward-декларации ... |
19.01.2023 | Кодогенератор Waffle++ для C++ | Список пасхалок: https://clck.ru/33J7ck
Кодогенератор это программа, которая на основе исходного кода или какого-нибудь файла настроек генерирует вспомогательный код, который потом компилируется вместе с исходным кодом. Это нужно, чтобы не ... |
30.12.2022 | Алгоритмы диапазонов C++20 — сортировка, множества, обновления C++23 и прочее | Эта статья — третья и последняя в мини-серии об алгоритмах диапазонов. Мы рассмотрим некоторые алгоритмы сортировки, поиска и другие, а также познакомимся с готовящимися крутыми улучшениями этих алгоритмов в версии C++23. Поехали! Подробнос... |
29.12.2022 | Алгоритмы диапазонов C++20 — 11 модифицирующих операций | В предыдущей статье серии «Диапазоны» я рассмотрел основы и некоторые немодифицирующие операции. Сегодня пришло время таких алгоритмов, как transform, copy, generate, shuffle и многих других… даже rotate. Подробности — к старту курса по раз... |
20.12.2022 | Алгоритмы диапазонов C++20 — 7 немодифицирующих операций
Прежде чем мы начнём
1. all_of, any_of, none_of
2. for_each
3. count_if
4. find_if
5. find_first_of
6. mismatch
7. search
Заключение... | Библиотека Ranges для C++20 предлагает альтернативы для большинства алгоритмов. На этот раз я хочу показать вам десять немодифицирующих операций. Мы сравним их со «старой» стандартной версией и увидим их преимущества и ограничения.
Подробно... |
07.12.2022 | Использование final для повышения производительности в C++ | Динамический полиморфизм (виртуальные функции) занимает центральное место в объектно-ориентированном программировании (ООП). При правильном использовании он способствует созданию входных точек в существующей кодовой базе, с помощью которых ... |
06.12.2022 | Пишем мультиметоды из Lisp в С++ | Что и главное зачем мы собираемся делать?
Начнём с примера, допустим у нас есть интерфейс Animal, который поддерживают классы Cat, Dog, и Frog.
И мы хотим определить операцию interact(взаимодействие) между двумя Animal.
void interact(Cat, D... |
01.12.2022 | Как устроена работа thread_local переменных: разбираемся и добавляем поддержку в учебную ОС | Эта статья написана по мотивам моей курсовой работы, основной смысл которой описан здесь. В процессе работы над ней мне понадобилось добавить в учебной ОС, над которой я работал, поддержку thread_local переменных, о чём я и хочу здесь расск... |
21.11.2022 | Как оценить реальную производительность своего кода | Код, который мы пишем, и который будет исполнен процессором, — две разные вещи. На уровне ассемблера существует миллион вариантов, в каком виде интерпретировать и запустить высокоуровневые команды. Более того, современные компиляторы сильно... |
13.10.2022 | Есть ли жизнь без RTTI: пишем свой dynamic_cast | В современном С++ осталось не так много вещей, которые не подходят под парадигму "Не плати за то, что не используешь". Одна из них – dynamic_cast. В рамках данной статьи мы разберёмся, что с ним не так, а когда поймём – попробуем ... |
01.10.2022 | Лямбды в C++. Как это работает | Рассмотрим такой пример кода:
void f(int i) { auto g = [i](auto j) { return i + j; }; g = [i](auto j) { return i - j; }; g(1); }
При компиляции возникнет ошибка в строке g = [i](auto j).
Почему так происходит?
Дело в том, что лямбды в C++ —... |
16.09.2022 | Упрощаем код с помощью if constexpr и концептов C++17/C++20 | До C++17 у нас было несколько довольно неэлегантных способов написать static if (if, который работает во время компиляции). Например, мы можем использовать статическую диспетчеризацию или SFINAE. К счастью, ситуация изменилась к лучшему, ве... |
07.09.2022 | Пользовательские типы и std::format в C++20 | std::format — очень полезное (и серьезное) нововведение C++20, позволяющее нам форматировать текст в строки удобным и эффективным образом. Оно привносит в язык форматирование в стиле Python в сочетании с безопасностью и простотой использова... |
29.08.2022 | Приёмы высокоуровневой векторизации на примере Card Raytracer | Хочу рассказать о том, как занимался оптимизацией card raytracer - минимального рейтрейсера, код которого умещается на визитке.
Точнее, это развёрнутая для лучшей читабельности версия, которая в форумной ветке
использовалась как тест скорос... |
19.08.2022 | Знакомимся с дата-ориентированным проектированием на примере Rust | James McMurray
В этом посте мы исследуем основные концепции «Data-Oriented Design» (далее «дата-ориентированное проектирование» на языке Rust.
Весь исходный код для этого поста выложен на Github.
Что такое дата-ориентированное проектировани... |
27.07.2022 | Почему в С++ массивы нужно удалять через delete[] | Заметка рассчитана на начинающих C++ программистов, которым стало интересно, почему везде твердят, что нужно использовать delete[] для массивов, но вместо внятного объяснения – просто прикрываются магическим "undefined behavior". ... |
28.06.2022 | Тем, кто учится программировать и решил написать вопрос на Stack Overflow: «Почему код не работает?» | На сайте Stack Overflow много вопросов от людей, ещё только изучающих языки программирования. Лайфхак: ответы на многие эти вопросы можно получить сразу, запустив анализатор кода. Получится быстрее.
Эту заметку меня побудила написать дискус... |
19.06.2022 | Holy C++ | В этой статье постараюсь затронуть все вещи, которые можно без зазрения совести выкинуть из С++ не потеряв ничего(кроме боли), уменьшить стандарт, нагрузку на создателей компиляторов, студентов изучающих язык и мемосоздавательный потенциал ... |
16.06.2022 | Проверяем эмулятор GPCS4, или сможем ли когда-нибудь поиграть в «Bloodborne» на PC | Эмулятор – это приложение, способное имитировать запуск программы, предназначенной для одной платформы, на другой. Примером эмулятора является GPCS4, предназначенный для запуска игр для PS4 на PC. Недавно состоялся первый релиз GPCS4, и мы ... |
13.06.2022 | Во что вам обойдется конкурентная обработка. Иерархия проблем | Конкурентность сложно как следует наладить, как минимум, тем из нас, кому не повезло писать на языках, непосредственно открывающих нутро конкурентного аппаратного обеспечения: речь о потоках и разделяемой памяти. Не менее сложно организоват... |