Библиотека предоставляет два ключевых класса:
buffer_adaptor и binary_stream
. buffer_adaptor служит
обёрткой для контейнеров, обеспечивая низкоуровневые операции чтения и записи, а binary_stream
использует этот адаптер для выполнения операций сериализации и десериализации. Hexi поддерживает работу с различными стандартными контейнерами, такими как s
td::array, std::span, std::string_view, std::string и std::vector,
при условии, что их типы значений являются байтовыми (например, char, std::byte, uint8_t). Для обеспечения безопасности при работе с недоверенными данными,
binary_stream
выполняет проверку границ, предотвращая чтение за пределами доступных данных. По умолчанию, при возникновении ошибки выбрасываются исключения, однако их можно отключить, указав шаблонный аргумент no_throw. Состояние потока можно проверить с помощью метода state() или оператором приведения к bool.
Безопасность: Hexi выполняет проверку границ при чтении данных, предотвращая выход за пределы буфера. По умолчанию при ошибках выбрасываются исключения (hexi::buffer_underrun, hexi::stream_read_limit), но их можно отключить, указав шаблонный аргумент no_throw
🔗 Github
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
🔥 Best FREE Blender Hand Topology Tutorial
Один из лучших уроков по Blender
В этом туториале демонстрируется процесс моделирования руки в Blender с использованием аддона Camera Shakify для придания динамичности презентации.
📌 BlenderHub
📌 Видео
#b3d #geometrynodes #proceduralart #3dart #blender質 #3d #3Danimation #geonodes #B3D #Blender #Blender3D
Один из лучших уроков по Blender
В этом туториале демонстрируется процесс моделирования руки в Blender с использованием аддона Camera Shakify для придания динамичности презентации.
📌 BlenderHub
📌 Видео
#b3d #geometrynodes #proceduralart #3dart #blender質 #3d #3Danimation #geonodes #B3D #Blender #Blender3D
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.
Стоит подписаться: www.tg-me.com/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