C++ Academy
16K subscribers
590 photos
125 videos
1 file
555 links
По всем вопросам- @haarrp

@itchannels_telegram - 🔥 best it channels

РКН: clck.ru/3FmxJF
Download Telegram
🎮 Microsoft представила нейро-версию Quake II на базе Muse и WHAMM.

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

Это означает, что WHAMM способна быстро создавать и постоянно обновлять цифровую 3D-модель физического пространства, учитывая изменения, которые происходят в нем, в том числе в результате взаимодействия пользователя или других динамических событий.

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

Старая WHAMM — 1 fps, новая — 10 fps при 640×360, почти играбельно.

Модель помнит последние 0,9 секунды, что добавляет случайности.

Ключевая особенность — система работает достаточно быстро, чтобы обновлять модель мира практически мгновенно по мере поступления новых данных от сенсоров (вероятно, камер, датчиков глубины и т.д.). Это критически важно для плавного взаимодействия.

🔗 Играть в ИИ-версию Quake II можно здесь.

@cpluspluc

#microsoft #ai #quake #muse
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👴 Возрождение старичка — Clipper2

💎 Проект представляет собой переработку классической библиотеки Clipper, которая долгое время оставалась стандартом для операций с многоугольниками.

📈 В отличие от предшественника, Clipper2 предлагает не только базовые логические операции, но и поддержку сложных сценариев работы с полигональными сетками. Из приятного: ядро работает на C++ 17, с интерфейсами для С# и Delphi. Также есть возможность интеграции в другие языки с помощью динамических библиотек.

🤖 GitHub

@cpluspluc
👽 bdwgc — сборщик мусора для C/C++ с 30-летней историей

Проект представляет собой консервативный мусорный сборщик, разработанный еще в 1988 году, но до сих пор востребованный в системном программировании. Вdwgc может работать в "враждебной среде", сканируя стек и память, пытаясь угадать, какие данные являются указателями.

Проект может быть полезен для:
▪️ Долгоживущих сервисов, где утечки памяти критичны
▪️Встраиваемых систем с ограниченными ресурсами
▪️Научных вычислений на C/C++

🤖GitHub

@cplucplus
🔎 rwkv.cpp — проект, адаптирующий архитектуру RWKV для эффективной работы на обычных процессорах.

В отличие от традиционных LLM, RWKV требует лишь немного памяти на токен — это позволяет запускать модели с большими контекстами даже на слабом железе.

Инструмент реализован на C/C++ с поддержкой квантования и CUDA через cuBLAS.

Особенно интересна совместимость с LoRA-адаптерами, что позволяет дообучать модели без полного экспорта весов. Тесты показывают стабильную работу даже на 4-ядерных CPU с контекстом в 8K токенов.

🤖 GitHub

@cpluspluc
This media is not supported in your browser
VIEW IN TELEGRAM
Менеджер, который получает зарплату в 10 раз больше твоей 😂

@cpluspluc
📊 Bebop — свежий взгляд на бинарную сериализацию. Этот проект сочетает читаемость JSON с производительностью бинарных протоколов, обещая в 10-100 раз большую скорость работы по сравнению с традиционными решениями.

Собственный язык схем позволяет генерировать типобезопасный код для C++, С#, TypeScript, Rust и других языков, сохраняя при этом кросс-платформенную совместимость. При этом проект уже сейчас демонстрирует высокую производительность в бенчмарках, особенно в сценариях, критичных к задержкам.

🤖 GitHub

@cpluscpluc
Что выведет этот код? (C++23)


import std;

constexpr auto make_checker() {
return [](int x) consteval {
return x % 3 == 0 || x % 5 == 0;
};
}

int main() {
auto checker = make_checker();

std::vector numbers{1, 3, 5, 9, 10, 14, 15};

auto filtered = numbers | std::views::filter([&](int x) {
if (std::is_constant_evaluated()) {
std::print("constexpr\n");
}
return checker(x);
});

std::print("Filtered numbers: ");
for (int x : filtered) {
std::print("{} ", x);
}

std::println("");
}


🧠 Подсказка:
consteval делает checker доступным только в compile-time, но мы вызываем его в runtime через лямбду — что произойдёт?

std::is_constant_evaluated() — интересный механизм проверки, вызывается ли код во время компиляции.

Как отреагирует компилятор на попытку вызвать consteval функцию в runtime?


📌 Ответ
Этот код на C++23 не скомпилируется, и что именно здесь происходит.

🔍 Напоминаем ключевой фрагмент кода:

```cpp
constexpr auto make_checker() {
return [](int x) consteval {
return x % 3 == 0 || x % 5 == 0;
};
} ```

- Здесь создаётся лямбда-функция, помеченная как consteval.

- Ключевое слово consteval означает: функция обязана быть вызвана во время компиляции.

🧨 Где ошибка?


auto filtered = numbers | std::views::filter([&](int x) {
return checker(x); // ← ошибка тут
});


checker — это consteval-лямбда.

Но ты вызываешь её внутри лямбды, которая будет работать во время выполнения программы — т.е. в runtime.

Это нарушение правила consteval → нельзя вызывать такие функции в runtime-коде.

Что скажет компилятор?
Компилятор выдаст ошибку компиляции, такую или похожую:

error: call to consteval function '<lambda>(int)' is not a constant expression



📘 Объяснение
consteval ≠ constexpr

constexpr — это могут быть вызваны в runtime, если нужно.

consteval — это всегда и только compile-time.

Когда ты вызываешь checker(x) в main(), ты нарушаешь это правило.

Как можно исправить?
Если ты заменишь consteval на constexpr, код скомпилируется и выполнится:


constexpr auto make_checker() {
return [](int x) constexpr {
return x % 3 == 0 || x % 5 == 0;
};
}

И тогда результат будет:

Filtered numbers: 3 5 9 10 15

Потому что:
- 3 делится на 3
- 5 делится на 5
- 9 делится на 3
- 10 делится на 5
- 15 делится на 3 и 5
📄 toml++ — библиотека, предлагающий удобный и производительный способ обработки TOML файлов в C++-проектах. Этот парсер полностью соответствует спецификации TOML 1.0.0, поддерживает UTF-8 и может преобразовывать данные в JSON/YAML. При этом он не требует RTTI и может работать без исключений.

Интеграция системы проста: можно использовать как single версию или подключить через CMake/Conan/Vcpkg. Поддерживаются все основные компиляторы и архитектуры (x64, x86, ARM).

🤖 GitHub

@cpluspluc
📖 asmbook — мягкое введение в программирование на ассемблере для ARM. Для разработчиков, пишущих на C/C++, но желающих разобраться в низкоуровневых особенностях процессоров, проект предлагает практическое руководство по ассемблеру ARMv8.

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

🔗 GitHub

@cpluspluc
👩‍💻 Docker - лучший обучающий канал по Devops.

С помощью картинок и коротких видео даже новички с легкостью смогут применять продвинутые инструменты разработки и использовать Docker.

Стоит подписаться: t.me/DevopsDocker
Please open Telegram to view this post
VIEW IN TELEGRAM
🔓Что выведет следующий код?


#include <iostream>
using namespace std;

class Base {
public:
Base() {
cout << "Base constructor: ";
call();
}
virtual void call() { cout << "Base::call\n"; }
};

class Derived : public Base {
int x = init();

int init() {
cout << "Derived::init\n";
return 42;
}

public:
Derived() {
cout << "Derived constructor\n";
}

void call() override {
cout << "Derived::call, x = " << x << "\n";
}
};

int main() {
Derived d;
return 0;
}


🔢Варианты ответа:

A)

Derived::init
Derived constructor


B)

Derived::init
Derived constructor


C)

Base constructor: Derived::call, x = 42
Derived constructor


D)

Derived::call, x = <undefined>
Derived::init
Derived constructor


Правильный ответ: B

💡Почему?
В момент вызова конструктора Base, объект ещё не стал Derived. Виртуальная функция вызывается в контексте Base.
🖥 Gooey — нативный кроссплатформенный GUI-фреймворк на C

Если ты разрабатываешь под Windows или Linux и хочешь лёгкий и настраиваемый UI, присмотрись к Gooey — фреймворку с нативной производительностью и открытым кодом.

Почему стоит:
🔥 На C, без библиотек-монстров
🔴 Работает везде
🧩 Кастомный UI
💥 Лёгкий и быстрый
🧪 С GPL v2 и сообществом

🚀 GitHub

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
✔️ ЗАДАЧА: Что выведет код?



#include <iostream>
#include <vector>

struct Tracer {
Tracer(const char* name) : name(name) {
std::cout << "Constructing " << name << "\n";
}
~Tracer() {
std::cout << "Destructing " << name << "\n";
}
const char* name;
};

struct Example {
Tracer t1{"t1"};
std::vector<Tracer> list;
Tracer t2{"t2"};

Example() : list{Tracer("temp1"), Tracer("temp2")} {
std::cout << "Inside constructor\n";
}
};

int main() {
Example e;
std::cout << "End of main\n";
return 0;
}


---

ОТВЕТ:

Constructing t1
Constructing temp1
Constructing temp2
Inside constructor
Constructing t2
End of main
Destructing t2
Destructing temp2
Destructing temp1
Destructing t1

---

Почему так:

• Поля инициализируются в порядке объявления в структуре, а не в списке инициализации
• std::initializer_list создаёт временные объекты, которые копируются в вектор
• t2 создаётся после строки Inside constructor
• Деструкторы вызываются в обратном порядке: t2 → temp2 → temp1 → t1

Хитрость — в порядке инициализации, временных объектах и destructuring-порядке!


@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 less_slow.cpp — это образовательный репозиторий, который демонстрирует практики написания высокоэффективного кода на C++, C, CUDA, PTX и ассемблере.

Цель проекта — помочь разработчикам развить интуицию и мышление, ориентированные на производительность.​

🔍 Основные темы проекта:
- Микробенчмарки: Измерение производительности базовых операций, таких как сложение целых чисел, с использованием различных подходов, включая inline-ассемблер.

- Параллелизм и сложность вычислений: Анализ производительности стандартных алгоритмов сортировки и их оптимизация с использованием различных техник.

- Рекурсия: Сравнение рекурсивных и итеративных реализаций алгоритмов, таких как QuickSort, с акцентом на производительность и использование стека.

- Оптимизация стандартных функций: Примеры ускорения стандартных функций, таких как std::sin, с использованием приближений и SIMD-инструкций.

- Работа с JSON: Эффективный парсинг JSON без лишних аллокаций памяти, использование альтернатив стандартным библиотекам.​
GitHub
Hacker News

🛠️ Инструменты и технологии:
- Использование C++20 и современных компиляторов (GCC, Clang) для демонстрации новых возможностей языка.

- Интеграция с Google Benchmark для проведения точных измерений производительности.

- Примеры кода на CUDA, PTX и ассемблере для демонстрации низкоуровневой оптимизации.

- Использование сторонних библиотек, таких как fmt, range-v3, libunifex, cppcoro, liburing, oneTBB, ASIO, CUTLASS, CTRE, yyjson, Abseil, StringZilla и другие, для расширения функциональности и повышения производительности.​

📚 Дополнительные ресурсы:
Проект является частью серии "Less Slow", которая также включает реализации на Rust и Python.

Блог автора содержит подробные статьи по темам, затронутым в проекте: ashvardanian.com/tags/less-slow.​

Если вы хотите глубже понять, как писать эффективный код и избегать распространённых ошибок, less_slow.cpp станет отличным практическим пособием.

Github
Rust
Python.


@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Dear ImGui — библиотека GUI на C++ для быстрого создания интерфейсов без внешних зависимостей.

Оптимизирована для экономии памяти и легкой интеграции в проекты.

Позволяет быстро настраивать UI, избегая проблем с синхронизацией, и поддерживает разные графические API и платформы.

🔗 https://github.com/ocornut/imgui

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM