С/С++ Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для C/C++-разработчика Сотрудничество, реклама: @devmangx Менеджер: @Spiral_Yuri РКН: https://clck.ru/3Foc4d
Ko'proq ko'rsatish📈 Telegram kanali С/С++ Portal | Программирование analitikasi
С/С++ Portal | Программирование (@cpportal) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 15 302 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 8 539-o'rinni va Rossiya mintaqasida 43 756-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 15 302 obunachiga ega bo‘ldi.
17 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -219 ga, so‘nggi 24 soatda esa -4 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 13.04% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 8.31% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 996 marta ko‘riladi; birinchi sutkada odatda 1 272 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 15 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent linux, ядро, c++, процессор, указатель kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Присоединяйтесь к нашему каналу и погрузитесь в мир для C/C++-разработчика
Сотрудничество, реклама: @devmangx
Менеджер: @Spiral_Yuri
РКН: https://clck.ru/3Foc4d”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 18 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
Ma'lumot yuklanmoqda...
| Sana | Obunachilarni jalb qilish | Esdaliklar | Kanallar | |
| 17 Iyun | 0 | |||
| 16 Iyun | 0 | |||
| 15 Iyun | 0 | |||
| 14 Iyun | 0 | |||
| 13 Iyun | 0 | |||
| 12 Iyun | 0 | |||
| 11 Iyun | +5 | |||
| 10 Iyun | 0 | |||
| 09 Iyun | 0 | |||
| 08 Iyun | 0 | |||
| 07 Iyun | 0 | |||
| 06 Iyun | 0 | |||
| 05 Iyun | +1 | |||
| 04 Iyun | +3 | |||
| 03 Iyun | +1 | |||
| 02 Iyun | 0 | |||
| 01 Iyun | 0 |
| 2 | Если вы ещё не знакомы с этим, обязательно загляните в техническую и архитектурную документацию SQLite — там разобрано огромное количество впечатляющих инженерных деталей. Достаточно просто посмотреть на список тем, которые она охватывает.
[https://sqlite.org/docs.html]
👉 @Cpportal | 1 225 |
| 3 | В C++ появился новый оператор:
^^
В комитете его называют cat-ears operator («оператор кошачьих ушек»).
Именно через него в язык приходит рефлексия — одно из крупнейших изменений в C++ со времён появления шаблонов.
C++26 приносит в язык compile-time reflection (P2996).
Оператор ^^ позволяет превратить любую сущность — тип, функцию или элемент перечисления — в compile-time представление (mirror), которое можно анализировать и преобразовывать во время компиляции.
enum → строка? Одна функция.
JSON-сериализация? Без макросов, генераторов кода и километров шаблонов.
Автор предложения — Barry Revzin и ещё шесть соавторов.
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p2996r13.html
https://wg21.org/
👉 @Cpportal | 1 563 |
| 4 | Предсказание ветвлений, переименование регистров, спекулятивное выполнение, буферы записи, трансляция μops.
Огромная часть сложности современных процессоров нужна для поддержки простой иллюзии: будто инструкции выполняются строго по порядку, по одной за раз, именно так, как это описывает ISA.
Ты пишешь код под x86. Процессор переводит его во что-то другое и дальше работает уже с этим.
👉 @Cpportal | 1 486 |
| 5 | Ещё одно распространённое заблуждение о C — многие думают, что строки обязательно нужно писать в кавычках. https://godbolt.org/z/qcWc4j3q3
#include <stdio.h>
#define puts(x...) puts(%:x)
int main() {
puts(Hello, world!);
}
👉 @Cpportal | 1 562 |
| 6 | std::expected из C++23 может оказаться одним из самых практичных нововведений в языке за последние годы.
Он даёт структурированный способ обработки ошибок без использования исключений и выходных параметров.
Вызывающий код не может случайно проигнорировать возможность ошибки, при этом здесь нет управления потоком выполнения через исключения.
👉 @Cpportal | 1 679 |
| 7 | Стандартный макрос min(a, b) может вернуть неверный результат, если один аргумент знаковый (signed), а другой беззнаковый (unsigned).
Во время сравнения оба значения приводятся к unsigned, поэтому отрицательные числа превращаются в огромные положительные значения.
В ядре Linux макрос min() защищает от такой ошибки: он выполняет проверку типов и превращает подобные случаи в ошибку компиляции.
👉 @Cpportal | 1 751 |
| 8 | В C есть оператор «идёт к», которого так и не добавили в стандарт.
Выглядит как оператор, но на самом деле им не является.
Компилятор интерпретирует его как:
(x--) > 0
Сначала выполняется постдекремент, затем результат сравнивается с нулём.
👉 @Cpportal | 1 815 |
| 9 | Один геймер превратил GTA Online с 6-минутной загрузкой в игру с секундной загрузкой за один уикенд.
Rockstar терпел эту проблему почти 7 лет.
t0st разобрал игру на уровне реверса и выявил два узких места:
Один парсер каждый шаг вызывал strlen() на оставшихся 10 МБ JSON, повторяя лишнюю работу.
Другая функция делала почти 2 миллиарда проверок дубликатов на 63 000 уникальных предметов, хотя в этом не было необходимости.
// bug 1 - ChakraCore sscanf implementation
// github.com/chakra-core/ChakraCore/blob/master/pal/src/safecrt/sscanf.c
int sscanf(const char *string, const char *format, ...) {
size_t count = strlen(string); // scans the whole string before parsing starts
return input_s_l(..., string, count, ...);
}
// bug 2 - from t0st's decompilation notes
char __fastcall netcat_insert_dedupe(
uint64_t catalog,
uint64_t *key,
uint64_t *item
) {
uint64_t not_a_hashmap = catalog + 88;
if (!(*(uint8_t(__fastcall**)(uint64_t*))(item + 48))(item))
return 0;
array_find_and_insert(not_a_hashmap, key, &item); // linear search on every insert
}
То же самое игра, те же данные — всего несколько строк кода решают разницу между минутами и секундами.
t0st решил проблему максимально просто:
Для парсера JSON он не переписывал весь движок, а просто «повесил» хук на strlen() и кешировал результат, чтобы не пересчитывать его каждый раз. Для проверки дубликатов он заметил, что элементы уже уникальные, и пропустил проверку полностью.
// fix 1 - cache strlen results for very large strings
size_t strlen_cacher(char *str) {
static char *start, *end;
if (start && str >= start && str <= end)
return end - str;
size_t len = __builtin_strlen(str);
if (len > 20000) {
start = str;
end = str + len;
}
return len;
}
// fix 2 - skip the duplicate lookup entirely
char __fastcall netcat_insert_dedupe_hooked(
uint64_t catalog,
uint64_t *key,
uint64_t *item
) {
uint64_t not_a_hashmap = catalog + 88;
if (!(*(uint8_t(__fastcall**)(uint64_t*))(item + 48))(item))
return 0;
netcat_insert_direct(not_a_hashmap, key, &item); // bypass the scan
}
В итоге загрузка GTA Online упала с ~6 минут до менее чем 2 минут.
t0st позже сказал, что исправление выглядело как задача, которую один разработчик мог бы сделать меньше чем за день.
Rockstar выплатили ему $10,000 через программу bug bounty.
👉 @Cpportal | 1 744 |
| 10 | В исходниках Nginx HTTP-парсер реализован как ручная конечная машина с примерно 25 состояниями.
Каждый байт запроса обрабатывается по одному, с одной трансформацией состояния за символ.
Весь HTTP/1.1 request line проходит через этот парсер в один проход, без промежуточных буферизаций или повторного анализа.
Это классический подход для высокопроизводительных C-серверов: минимальные аллокации, предсказуемое поведение и высокая скорость.
👉 @Cpportal | 1 795 |
| 11 | PID'ы переиспользуются. pidfd — нет.
Если вызвать kill() для PID, который ты сохранил 20 минут назад, есть шанс отправить сигнал уже совершенно другому процессу.
pidfd — это стабильный дескриптор конкретного процесса. Он остаётся привязанным именно к нему, даже если его PID позже будет переиспользован системой.
Одна из тех фич Linux, после знакомства с которыми возникает только один вопрос: почему я не знал об этом раньше?
👉 @Cpportal | 1 885 |
| 12 | Этот обычный на вид C-код содержит серьёзную уязвимость: она может повредить память и привести к эксплуатации.
Такой паттерн находили в OpenSSH в 2002 году, libtiff и куче других проектов.
Сможете сказать, в чём проблема, если код запускается на 32-битной системе?
Именно этот кусок кода стал причиной уязвимости OpenSSH (CVE-2002-0640).
nresp = packet_get_int();
if (nresp > 0) {
response = xmalloc(nresp * sizeof(char *));
for (i = 0; i < nresp; i++)
response[i] = packet_get_string(NULL);
}
Через неё атакующие могли ломать кучу, выполнять свой код на сервере и получать над ним контроль.
👉 @Cpportal | 2 118 |
| 13 | Бинарный поиск, который вы заучили, скорее всего реализован с ошибкой.
Джон Бентли опубликовал реализацию бинарного поиска в Programming Pearls после того, как доказал её корректность и протестировал.
Ошибка оставалась незамеченной почти 20 лет.
Позже Джошуа Блох обнаружил ту же самую ошибку в реализации бинарного поиска, которую написал для JDK.
Исследование 1988 года показало, что корректная реализация бинарного поиска была только в 5 из 20 учебников.
Ошибка проявляется только на массивах размером 2³⁰ элементов и больше.
Проблема возникает при вычислении середины диапазона.
mid = (low + high) / 2
На очень больших массивах такое выражение может вызвать переполнение.
Исправление простое:
mid = low + (high - low) / 2
В C переполнение приводит к выходу за границы массива с непредсказуемыми последствиями.
В Java это заканчивается исключением ArrayIndexOutOfBoundsException.
Та же ошибка затронула Merge Sort и множество других алгоритмов класса «разделяй и властвуй».
Эта ошибка была и в ядре Linux — в kallsyms.c.
Вегард Носсум исправил её, а Линус Торвальдс одобрил патч.
Исправление сводилось к замене:
mid = (low + high) / 2;
на:
mid = low + (high - low) / 2;
Джошуа Блох завершил свою статью фразой, которая остаётся актуальной и сегодня:
«Трудно правильно написать даже самый маленький фрагмент кода, а весь наш мир работает на больших и сложных программных системах».
👉 @Cpportal | 2 250 |
| 14 | Ищем Senior Rendering Engineer (C++) в команду 3D-карты 2ГИС
Мы делаем карту более реалистичной: работаем над рельефом, дорогами, развязками, тоннелями, анимациями и графическими эффектами.
Внутри — собственный 3D-движок на C+20 (500k строк кода), современные графические API (Vulkan, Metal, OpenGL), шейдеры, сложные алгоритмы и задачи производительности.
Будет интересно, если вам нравится компьютерная графика, низкоуровневая разработка и создание продукта, который ежедневно используют миллионы людей.
Удалённо из РФ или из офисов 2ГИС. ДМС, обучение, конференции и возможность напрямую влиять на развитие 3D-карты.
Подробнее
Другие инженерные инсайты от 2ГИС → в Telegram-канале RnD | 1 509 |
| 15 | Вышел бесплатный гайд по Vim.
Внутри:
→ история Vim
→ настройка и кастомизация
→ плагины
→ основные команды для повседневной работы
https://freecodecamp.org/news/mastering-vim-your-guide-to-efficient-text-editing/
👉 @Cpportal | 1 931 |
| 16 | Одна из самых недооценённых анонсированных на WWDC фич — Container Machines. Она позволяет запускать на Mac лёгкое и постоянное Linux-окружение, в котором домашний каталог пользователя и репозитории автоматически монтируются внутрь контейнера.
По сути, разработчики получают Linux-среду, тесно интегрированную с macOS, без необходимости вручную настраивать виртуальные машины или сложную инфраструктуру контейнеров.🍎🐧
https://github.com/apple/container/blob/main/docs/container-machine.md
👉 @Cpportal | 2 090 |
| 17 | Забавный факт: решето Эратосфена позволяет найти все простые числа примерно до 8 миллионов, используя всего около 1 МБ памяти.
Один бит хранит информацию об одном числе, а внутренний цикл помечает составные числа с помощью битовых операций.
Этот же подход используется в генераторах простых чисел и при выборе размеров хеш-таблиц.
Если пост был полезен как и всегда - ставь like 🫢
👉 @Cpportal | 2 241 |
| 18 | Только что наткнулся на довольно безумную штуку — Linux прямо в браузере.
✓ Без установки и настройки, всё работает через WebAssembly
✓ Из коробки доступны Python, C, C++, Vim, cURL и другие инструменты
✓ Есть доступ в интернет, так что можно ставить дополнительные пакеты
Потыкать можно здесь: webvm.io
Честно, не ожидал, что это будет работать настолько хорошо.
👉 @Cpportal | 2 214 |
| 19 | Этот алгоритм подсчёта установленных битов был опубликован ещё в 1957 году.
Он считает все 64 бита параллельно с помощью арифметики над битовыми масками, вместо того чтобы проходить по каждому биту в цикле.
Когда инструкция POPCNT недоступна, ядро Linux использует ту же идею в функции __sw_hweight64.
👉 @Cpportal | 2 249 |
| 20 | Я читал исходники SQLite и нашёл интересную вещь.
DELETE на самом деле не уменьшает размер файла базы данных.
Удалённые страницы попадают во внутренний freelist прямо внутри файла.
Новые INSERT сначала переиспользуют эти свободные страницы, а уже потом снова увеличивают базу.
Сам файл уменьшается только после VACUUM.
Можно удалить всё из базы на 1 ГБ, а файл всё равно останется 1 ГБ, пока вы его не сожмёте.
👉 @Cpportal | 2 258 |
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
