C++ Academy
15.5K subscribers
844 photos
143 videos
1 file
760 links
По всем вопросам- @workakkk

РКН: clck.ru/3FmxJF

#VRHSZ
Download Telegram
🌍🚀 Эффективная библиотека для работы с часовыми поясами

vtz предлагает высокую производительность и простой API для обработки временных данных. Она значительно быстрее конкурентов, обеспечивая до 60 раз более быстрые преобразования часовых поясов и парсинг временных меток, что делает её идеальным выбором для приложений с высокими требованиями к скорости и масштабируемости.

🚀Основные моменты:
- 30-60x быстрее преобразования часовых поясов.
- Эффективный алгоритм с блочной таблицей для быстрого поиска.
- Совместимость с std::chrono::time_zone.
- Оптимизирована для работы с большими объемами данных.

📌 GitHub: https://github.com/voladynamics/vtz

#cpp
🔥6👍2
🌟 Быстрая библиотека JSON: Glaze

Glaze — это одна из самых быстрых библиотек для работы с JSON и другими форматами, обеспечивающая высокую производительность и простоту интерфейса. Она поддерживает множество форматов, включая JSON, CBOR, YAML и другие, с акцентом на компиляцию времени и рефлексию.

🚀Основные моменты:
- Поддержка C++23 и C++26 с рефлексией для удобной работы с данными
- Высокая производительность: быстрая сериализация и десериализация
- Заголовочная библиотека без зависимости от RTTI и исключений
- Совместимость с современными компиляторами и стандартами

📌 GitHub: https://github.com/stephenberry/glaze

#cpp
10👍2
Data-Parallel Types: алгоритмы (C++26)

Библиотека «data-parallel types» для SIMD-векторов (пространство имён std::experimental, алиас stdx) предоставляет четыре специальных алгоритма: `min, max, minmax и clamp.

min, max, minmax

- min(a, b) и max(a, b) принимают два SIMD-вектора и возвращают вектор покомпонентных минимумов/максимумов.
- minmax(a, b) возвращает пару SIMD-векторов: первый — покомпонентные минимумы, второй — максимумы.
- Автор отмечает, что строка stdx::minmax(a, b) у него не компилировалась ни в GCC, ни в Clang (на момент публикации).

clamp

- stdx::clamp(v, lo, hi) применяет std::clamp к каждому элементу SIMD-вектора: значения ниже lo поднимаются до нижней границы, выше hi — опускаются до верхней.
- Показаны два примера: ограничение к диапазону INT8_MIN..INT8_MAX и к 0..UINT8_MAX; на выводах видно, как выходящие за пределы элементы прижимаются к границам.

Итог

- Для SIMD-векторов доступны привычные «минимумы/максимумы» и покомпонентный clamp.
- minmax задуман как удобный возврат пары (min/max), но в текущих компиляторах может не собираться.
- Дальше автор планирует разбирать новые возможности C++26 (в частности, контракты).

https://www.modernescpp.com/index.php/data-parallel-types-algorithms/

#cpp #programming
👍74🔥1
🧩 C++ обертка для PCRE2

pcre2cpp - это объектно-ориентированная обертка для библиотеки PCRE2, обеспечивающая удобный интерфейс для работы с регулярными выражениями. Поддерживает C++17 и C++20, упрощая процесс сопоставления и захвата результатов.

🚀 Основные моменты:
- Объектно-ориентированный интерфейс для PCRE2 10.47
- Совместимость с C++17 и C++20
- Удобное сопоставление регулярных выражений
- Встроенное захватывание результатов

📌 GitHub: https://github.com/MAIPA01/pcre2cpp

#cpp
👍3🔥32
Media is too big
VIEW IN TELEGRAM
Веселье с type erasure: делаем обертку с семантикой значения для полиморфных типов
Павел Новиков

Цель доклада — познакомить с подноготной базовой реализации type erasure (т.н. «стирание типов») в C++, а также придать уверенности при возможном взаимодействии с подобным кодом.

Используя реализацию обертки с семантикой значения в качестве примера, мы посмотрели на то, как работает type erasure, похожий на std::any.

В отличие от повсеместно используемой семантики указателя или ссылки, в данном случае обертка с семантикой значения позволяет нам обращаться с полиморфными объектами со «стертыми типами» как с обычными значениями: перемещать их, копировать, присваивать новые значения, при этом всей головной болью владения (ownership) и клонирования объекта исходного типа займётся реализация «за кулисами».

источник

#cpp #programming
3🔥2😁1
This media is not supported in your browser
VIEW IN TELEGRAM
🐦 Flappy Bird на Си: Вес APK < 100 Килобайт! 🚀

В сентябре 2024 года, увидев Flappy Bird на C# в дискорд-канале Raylib, я решил попробовать реализовать эту игру на Си для Android с весом APK менее 100 КБ. 🚀

Идея казалась безумной, но спортивный интерес взял верх. 💪

https://github.com/VadimBoev/FlappyBird

#cpp #programming
👍85🔥3
🧩 userver 3.0 — крупное обновление C++ фреймворка от Яндекса для highload-сервисов

Яндекс Go выпустил новую версию open source-фреймворка userver, который используется для разработки высоконагруженных и отказоустойчивых систем промышленного масштаба. В релиз вошло более 2500 улучшений.

🚀 Основные моменты:
- Chaotic — генерация boilerplate-кода по схемам данных
- userver easy — быстрый старт микросервисов с возможностью дальнейшего масштабирования
- Снижение потребления RAM и CPU в production-сценариях
- Асинхронная архитектура для высоконагруженных сервисов
- Используется в реальных сервисах Яндекса: Go, Еда, Лавка и других
- Open source и доступен сообществу на GitHub

📌 GitHub https://github.com/userver-framework

#cpp
12🔥8👍4
🎨 FusionUI: современная библиотека UI на C++23

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

🚀Основные моменты:
- Декларативные виджеты с типобезопасными стилями
- Поддержка анимаций и переходов
- Отсутствие глобального состояния для изоляции приложений
- Легкая интеграция с Vulkan и SDL3
- Кроссплатформенная: Windows, macOS, Linux

📌 GitHub: https://github.com/neilmewada/FusionUI

#cpp
👍172🔥2😁1
⚙️ clap: современный парсер аргументов командной строки для C++26

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

🚀Основные моменты:
- Поддержка значений по умолчанию и необязательных аргументов
- Краткие аргументы и комбинированные флаги
- Аннотации для описаний полей
- Автоматическое преобразование имен в kebab-case
- Простота использования с рефлексией

📌 GitHub: https://github.com/nathan-baggs/clap

#cpp
🔥8👍21
🚁Высокопроизводительная библиотека H.A.L.O. для автономных дронов

H.A.L.O. Aegis Omniverse - это библиотека на C++20, предназначенная для навигации и защиты автономных спасательных дронов в сложных условиях. Она сочетает в себе передовые методы поиска пути и тактическое избегание препятствий с реакцией менее чем за наносекунду.

🚀 Основные моменты:
- Высокая производительность с использованием JPS+ для навигации.
- 10-слойная система защиты для мгновенного реагирования.
- Оптимизация под ARM NEON и SSE4 для максимальной скорости.
- Открытый исходный код для гуманитарных миссий.

📌 GitHub: https://github.com/Nguyenidkskibidi/halo-aegis-core

#cpp
🔥10👍5🤔41
🧩 ACAV: Интерактивный просмотр AST для C/C++ проектов

ACAV (Aurora Clang AST Viewer) — это настольное приложение для визуализации абстрактных синтаксических деревьев (AST) в проектах на C, C++ и Objective-C. Оно позволяет пользователям исследовать представление исходного кода Clang, перемещаться между местоположениями кода и узлами AST, а также изучать структуру программ.

🚀 Основные моменты:
- Интерактивная визуализация AST для языков семейства C.
- Двусторонняя навигация между исходным кодом и узлами AST.
- Просмотр файлового дерева для исходных файлов и заголовков.
- Поиск по исходному коду и узлам AST.
- Поддержка нативных и контейнеризованных рабочих процессов для macOS и Linux.

📌 GitHub: https://github.com/uvic-aurora/acav

#cpp
11👍6🥰1
🚀 Высокопроизводительная библиотека CNN на C++20

MetalNet — это заголовочная библиотека для свёрточных нейронных сетей, написанная на C++20. Она обеспечивает производительность, сопоставимую с популярными фреймворками, благодаря нулевым накладным расходам, использованию DAG для автоматического дифференцирования и оптимизации под архитектуру процессора.

🚀 Основные моменты:
- Заголовочная библиотека без внешних зависимостей
- Поддержка AVX2 и OpenMP для многопоточности
- Имплицитная свёртка GEMM без избыточного использования памяти
- Оптимизированные алгоритмы для повышения производительности
- Сравнения производительности с PyTorch

📌 GitHub: https://github.com/KunwarPrabhat/CustomCNN

#cpp
🔥61
📊 Минималистичная графовая база данных на C++17

TGDB — это простая графовая база данных, реализованная как статическая библиотека. Она поддерживает фиксированные узлы и индексные указатели, обеспечивая схему без схемы и работу с базовыми типами данных. База данных позволяет эффективно создавать и извлекать объекты с свойствами.

🚀Основные моменты:
- Унифицированный тип узла размером 56 байт.
- Поддержка встроенных типов: int, double, std::string.
- Двусторонние ссылки между узлами.
- Дисковая устойчивость через mmap.
- Быстрый локальный обход и глобальный поиск.

📌 GitHub: https://github.com/LincolnCox29/TrueGraphDataBase

#cpp
🤯64👍2🥰1😁1
☕️ Latte: Ultra-Low Latency C++ Telemetry Framework

Latte — это заголовочная библиотека C++ для телеметрии, предназначенная для высокочастотной торговли и реального времени. Она измеряет циклы ЦП с помощью таймеров x86_64 и использует фиксированные кольцевые буферы для хранения данных, минимизируя накладные расходы.

🚀Основные моменты:
- Высокая точность измерений в наносекундах.
- Поддержка до 64 активных слотов на поток.
- Три режима измерений: Fast, Mid и Hard.
- Без динамических аллокаций во время работы.
- Статистический анализ и очистка данных от выбросов.

📌 GitHub: https://github.com/MoonFlowww/Latte

#cpp
❤‍🔥7👍4🔥2🎉1
🚀 Библиотека ycetl для C++20: constexpr на первом месте

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

🚀 Основные моменты:
- Контейнеры, работающие в constexpr и на этапе выполнения.
- Умные указатели с поддержкой различных схем владения.
- Многотипная память для безопасного управления типами.
- Примеры использования, включая компиляцию простых чисел и вложенных деревьев.
- Совместимость с C++20 и современными компиляторами.

📌 GitHub: https://github.com/zokrezyl/ycetl

#cpp
👍83🤔2🦄1
🚀 SIMD-ускоренное преобразование целых чисел в строки

Simditoa - библиотека для быстрого преобразования 64-битных целых чисел в десятичные строки с использованием SIMD-инструкций. Достигает скорости менее 2 наносекунд на современном оборудовании, обеспечивая высокую производительность на архитектурах x86-64.

🚀 Основные моменты:
- Поддержка AVX-512 для максимальной скорости.
- Альтернативная скалярная реализация для совместимости.
- Простой API для интеграции в проекты C++.
- Значительное ускорение по сравнению с std::to_chars.

📌 GitHub: https://github.com/simditoa/simditoa

#cpp
🔥12👍41
⚡️ Один `static` - три разных смысла. Добро пожаловать в C.

В C ключевое слово static меняет поведение в зависимости от того, где именно оно написано.

### 1. static у глобальной переменной


static int global;


Переменная имеет internal linkage - она доступна только внутри текущего .c файла.

Это удобный способ спрятать детали реализации модуля.

### 2. static внутри функции


void foo(void) {
static int count;
count++;
}


count не создаётся заново при каждом вызове.

Он существует всё время работы программы и сохраняет значение между вызовами функции.


foo(); // count = 1
foo(); // count = 2
foo(); // count = 3


### 3. static у функции


static void bar(void) {
}


Функция становится видна только внутри текущего translation unit.

Другой .c файл вызвать bar() напрямую уже не сможет.

Итого:


static global variable -> скрыть символ внутри файла
static local variable -> сохранить состояние между вызовами
static function -> скрыть функцию внутри файла


🔥 Поэтому static в C полезнее воспринимать не как одно конкретное поведение, а как подсказку проверить две вещи:

lifetime и linkage.

#C #Programming #SystemsProgramming #LowLevel #Cpp
👍15🔥96❤‍🔥1
🎶 Оптимизированный аудиовизуализатор для Windows

Spectrum — это легковесный аудиовизуализатор на C++, который обрабатывает звук в реальном времени и выводит его в консоль без разрывов экрана. Он использует FFTW3 для анализа аудиосигналов и обеспечивает точное визуальное представление частот.

🚀 Основные моменты:
- Реализация на C++17 для Windows.
- Низкое использование CPU и памяти.
- Поддержка WASAPI для захвата системного звука.
- Отображение в виде ASCII-графиков.
- Легкий в использовании и установке.

📌 GitHub: https://github.com/majockbim/spectrum

#cpp
👍63🔥2
💡 Clang умеет показывать AST, и это один из лучших способов реально понять, что компилятор видит в вашем C/C++ коде.

AST — это Abstract Syntax Tree, внутреннее представление программы после парсинга.

Например, простой код:


int x = a + b * 2;


для компилятора — не просто строка текста, а дерево примерно такого смысла:


VarDecl
└── BinaryOperator +
├── a
└── BinaryOperator *
├── b
└── 2


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

У Clang AST можно получить напрямую:


clang++ -Xclang -ast-dump -fsyntax-only main.cpp


А в Compiler Explorer / Godbolt есть отдельный режим просмотра AST, поэтому можно менять код и сразу видеть, как перестраивается дерево.

Особенно полезно разбирать так:

* шаблоны;
* перегрузку функций;
* implicit conversions;
* auto;
* лямбды;
* range-based for;
* временные объекты;
* разные формы инициализации.

Если регулярно смотреть AST, C++ постепенно перестаёт выглядеть как набор «магических правил».

Начинаешь видеть код примерно так, как его видит компилятор.

🔗 https://godbolt.org/z/cfc7h41bT

#Cpp #Clang #Compiler #Programming
👍18🔥8🥰42💯1
📚 Библиотека для работы с SQLite в C++26 с использованием рефлексии

Reflite — это библиотека на C++26, которая упрощает взаимодействие с SQLite, позволяя использовать обычные структуры как основу для выполнения запросов. Она поддерживает основные операции: вставка, удаление, выборка и обновление, избавляя от лишнего шаблона кода.

🚀 Основные моменты:
- Легковесная библиотека в одном файле
- Поддержка операций INSERT, DELETE, SELECT, UPDATE
- Использует рефлексию для работы с типами структур
- Не требует полной реализации SQL, фокус на простоте
- Совместима с современными компиляторами C++26

📌 GitHub: https://github.com/KaruroChori/reflite

#cpp
🔥9👍42🥰1👌1