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
💎 Проект представляет собой переработку классической библиотеки Clipper, которая долгое время оставалась стандартом для операций с многоугольниками.
📈 В отличие от предшественника, Clipper2 предлагает не только базовые логические операции, но и поддержку сложных сценариев работы с полигональными сетками. Из приятного: ядро работает на C++ 17, с интерфейсами для С# и Delphi. Также есть возможность интеграции в другие языки с помощью динамических библиотек.
🤖 GitHub
@cpluspluc
👽 bdwgc — сборщик мусора для C/C++ с 30-летней историей
Проект представляет собой консервативный мусорный сборщик, разработанный еще в 1988 году, но до сих пор востребованный в системном программировании. Вdwgc может работать в "враждебной среде", сканируя стек и память, пытаясь угадать, какие данные являются указателями.
Проект может быть полезен для:
▪️ Долгоживущих сервисов, где утечки памяти критичны
▪️Встраиваемых систем с ограниченными ресурсами
▪️Научных вычислений на C/C++
🤖GitHub
@cplucplus
Проект представляет собой консервативный мусорный сборщик, разработанный еще в 1988 году, но до сих пор востребованный в системном программировании. Вdwgc может работать в "враждебной среде", сканируя стек и память, пытаясь угадать, какие данные являются указателями.
Проект может быть полезен для:
▪️ Долгоживущих сервисов, где утечки памяти критичны
▪️Встраиваемых систем с ограниченными ресурсами
▪️Научных вычислений на C/C++
🤖GitHub
@cplucplus
🔎 rwkv.cpp — проект, адаптирующий архитектуру RWKV для эффективной работы на обычных процессорах.
В отличие от традиционных LLM, RWKV требует лишь немного памяти на токен — это позволяет запускать модели с большими контекстами даже на слабом железе.
Инструмент реализован на C/C++ с поддержкой квантования и CUDA через cuBLAS.
Особенно интересна совместимость с LoRA-адаптерами, что позволяет дообучать модели без полного экспорта весов. Тесты показывают стабильную работу даже на 4-ядерных CPU с контекстом в 8K токенов.
🤖 GitHub
@cpluspluc
В отличие от традиционных LLM, RWKV требует лишь немного памяти на токен — это позволяет запускать модели с большими контекстами даже на слабом железе.
Инструмент реализован на C/C++ с поддержкой квантования и CUDA через cuBLAS.
Особенно интересна совместимость с LoRA-адаптерами, что позволяет дообучать модели без полного экспорта весов. Тесты показывают стабильную работу даже на 4-ядерных CPU с контекстом в 8K токенов.
🤖 GitHub
@cpluspluc
📊 Bebop — свежий взгляд на бинарную сериализацию. Этот проект сочетает читаемость JSON с производительностью бинарных протоколов, обещая в 10-100 раз большую скорость работы по сравнению с традиционными решениями.
Собственный язык схем позволяет генерировать типобезопасный код для C++, С#, TypeScript, Rust и других языков, сохраняя при этом кросс-платформенную совместимость. При этом проект уже сейчас демонстрирует высокую производительность в бенчмарках, особенно в сценариях, критичных к задержкам.
🤖 GitHub
@cpluscpluc
Собственный язык схем позволяет генерировать типобезопасный код для C++, С#, TypeScript, Rust и других языков, сохраняя при этом кросс-платформенную совместимость. При этом проект уже сейчас демонстрирует высокую производительность в бенчмарках, особенно в сценариях, критичных к задержкам.
🤖 GitHub
@cpluscpluc
❓ Что выведет этот код? (C++23)
🧠 Подсказка:
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
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("");
}
🧠 Подсказка:
std::is_constant_evaluated() — интересный механизм проверки, вызывается ли код во время компиляции.
Как отреагирует компилятор на попытку вызвать consteval функцию в runtime?
📌 Ответ
🔍 Напоминаем ключевой фрагмент кода:
```cpp
constexpr auto make_checker() {
return [](int x) consteval {
return x % 3 == 0 || x % 5 == 0;
};
} ```
- Здесь создаётся лямбда-функция, помеченная как consteval.
- Ключевое слово consteval означает: функция обязана быть вызвана во время компиляции.
🧨 Где ошибка?
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
Интеграция системы проста: можно использовать как single версию или подключить через CMake/Conan/Vcpkg. Поддерживаются все основные компиляторы и архитектуры (x64, x86, ARM).
🤖 GitHub
@cpluspluc
📖 asmbook — мягкое введение в программирование на ассемблере для ARM. Для разработчиков, пишущих на C/C++, но желающих разобраться в низкоуровневых особенностях процессоров, проект предлагает практическое руководство по ассемблеру ARMv8.
В руководстве есть множество практических примеров: от работы с базовыми командами до анимации частиц в терминале. Проект подойдёт как для самостоятельного изучения, так и для академических курсов по компьютерной архитектуре.
🔗 GitHub
@cpluspluc
В руководстве есть множество практических примеров: от работы с базовыми командами до анимации частиц в терминале. Проект подойдёт как для самостоятельного изучения, так и для академических курсов по компьютерной архитектуре.
🔗 GitHub
@cpluspluc
С помощью картинок и коротких видео даже новички с легкостью смогут применять продвинутые инструменты разработки и использовать Docker.
Стоит подписаться: t.me/DevopsDocker
Please open Telegram to view this post
VIEW IN TELEGRAM
🔓Что выведет следующий код?
🔢Варианты ответа:
A)
B)
C)
D)
✅Правильный ответ: B
💡Почему?
В момент вызова конструктора Base, объект ещё не стал Derived. Виртуальная функция вызывается в контексте Base.
#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
✅
💡Почему?
В момент вызова конструктора Base, объект ещё не стал Derived. Виртуальная функция вызывается в контексте Base.
Если ты разрабатываешь под 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
Цель проекта — помочь разработчикам развить интуицию и мышление, ориентированные на производительность.
🔍 Основные темы проекта:
- Микробенчмарки: Измерение производительности базовых операций, таких как сложение целых чисел, с использованием различных подходов, включая 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
Оптимизирована для экономии памяти и легкой интеграции в проекты.
Позволяет быстро настраивать UI, избегая проблем с синхронизацией, и поддерживает разные графические API и платформы.
🔗 https://github.com/ocornut/imgui
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM