C++ Academy
По всем вопросам- @workakkk РКН: clck.ru/3FmxJF #VRHSZ
Ko'proq ko'rsatish📈 Telegram kanali C++ Academy analitikasi
C++ Academy (@cpluspluc) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 15 619 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 8 322-o'rinni va Rossiya mintaqasida 42 738-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 15 619 obunachiga ega bo‘ldi.
30 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -105 ga, so‘nggi 24 soatda esa -3 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 16.86% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 7.52% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 2 634 marta ko‘riladi; birinchi sutkada odatda 1 175 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 18 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent c++, github, linux, api, архитектура kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“По всем вопросам- @workakkk
РКН: clck.ru/3FmxJF
#VRHSZ”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 01 Iyul, 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.
std::atomic появились wait() и notify_one().
Это удобная штука для случаев, когда поток должен просто дождаться изменения атомарного значения без mutex, condition_variable и ручного busy waiting.
Раньше для такого обычно оборачивали OS-level примитивы вроде futex или pthread_cond.
Теперь можно писать прямо так:
#include <atomic>
#include <thread>
std::atomic<bool> ready{false};
void waiter() {
ready.wait(false, std::memory_order_acquire);
}
void notifier() {
ready.store(true, std::memory_order_release);
ready.notify_one();
}
Что здесь происходит:
wait(false) блокирует поток, пока ready остаётся false.
Другой поток делает store(true) и будит ожидающего через notify_one().
Главное отличие от обычного цикла проверки - поток не крутится впустую и не жрёт CPU.
Это не полная замена condition_variable.
Для сложных predicates, очередей и нескольких условий condition_variable всё ещё нужен.
Но для простого флага, состояния или lightweight-синхронизации std::atomic::wait часто даёт более чистый и быстрый код.
C++20 тихо добавил одну из самых полезных низкоуровневых фич для concurrent programming.`a³ + b³ = c³`
Её доказал Эндрю Уайлс в 1995 году - спустя 358 лет после формулировки.
Но затем Джон Регер показал забавный пример: цикл, скомпилированный через gcc -O2, мог напечатать:
Fermat's Last Theorem has been disproved
В коде происходило signed integer overflow - переполнение знакового int. А в C это undefined behavior.
Для компилятора это значит: «такого не должно происходить». Поэтому оптимизатор имеет право строить предположения, которые человеку кажутся абсурдными.
В итоге: программа выглядит так, будто нашла контрпример к великой теореме, хотя на деле просто попала в UB.
C не опроверг Ферма.
C просто напомнил, что undefined behavior - это не ошибка выполнения, а разрешение компилятору делать почти всё что угодно.stdout - это просто файловый дескриптор 1.
И из-за этого можно поймать очень неприятный эффект: если закрыть stdout, следующий открытый файл может получить тот же дескриптор 1.
То есть код вроде этого:
close(1);
FILE *f = fopen("output.txt", "w");
printf("hello\n");
Может записать printf не в терминал, а прямо в output.txt.
Потому что система обычно выдаёт минимальный свободный файловый дескриптор. Закрыл 1 - значит он снова свободен. Открыл файл - он может стать новым stdout.
Мелочь, но именно из таких мелочей и состоит настоящее понимание UNIX.
#include <stdckdint.h>
И функции вроде ckd_mul:
#include <stdckdint.h>
#include <stdint.h>
#include <stdio.h>
int main(void) {
int32_t price = 500000;
int32_t qty = 8000;
int32_t total;
if (ckd_mul(&total, price, qty)) {
puts("overflow caught, not shipped");
return 1;
}
printf("total: %d\n", total);
}
Смысл простой: если результат помещается в тип, он записывается в total.
Если произошло переполнение, функция возвращает true.
Это особенно полезно в коде, где числа приходят извне:
• размеры буферов
• цены и количества
• индексы
• длины массивов
• расчёт памяти
• сетевые пакеты
• парсеры бинарных форматов
Раньше такие проверки часто писали руками, и там легко ошибиться на границах типа.
Теперь стандартная библиотека даёт нормальный способ сказать: «умножь, но не дай мне случайно получить мусор из-за overflow».
Маленькое изменение в стандарте, но для системного кода очень приятное.2^30 элементов и больше.
Проблема возникает при вычислении середины:
mid = (low + high) / 2;
На очень больших массивах low + high может вызвать переполнение.
Правильнее писать так:
mid = low + (high - low) / 2;
В C такое переполнение может привести к выходу за границы массива и непредсказуемому поведению. В Java это обычно заканчивается ArrayIndexOutOfBoundsException.
Та же ошибка затрагивала mergesort и огромное количество других алгоритмов «разделяй и властвуй».
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
