Эта бесплатная книга подробно разбирает каждый аспект С.
Вы можете значительно прокачать свои навыки, прочитав эту книгу.
Наслаждайтесь!
📚 Читать
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Высокая производительность и безопасность? Да, это про Rust.
Изучайте Rust в нашем курсе-тренажёре!
Получайте практические навыки с первого урока вместе с автором курса и опытным наставником.
Курс-тренажёр - это:
💡 100+ практических задач
💡 пет-проекты в портфолио: blockchain, frontend и backend
💡 code review от наших наставников 24/7 с нашим AI-помощником Ду-Ду
💡 бессрочный доступ к актуальной программе: обновляем каждые 3 месяца
💡 бесплатный демо-доступ с практикой
Для кого этот курс:
для разработчиков на системных языках C и C++
для разработчиков, которые взаимодействуют с высокоуровневыми языками (Python, JavaScript, Java и C#)
Уже сейчас вам доступны 3 первых урока:
Урок #1 | Выбор IDE, установка окружения и первый "hello world"
Соберёте и запустите первый "hello world" проект.
Урок #2 | Базовый синтаксис
Научитесь писать Rust код в процедурном стиле. Изучите типы данных, встроенные и пользовательские типы, функции и переменные
Урок #3 | Владение и заимствование
Используете механизмы управления памятью и ссылками. Решите несколько задач на владение, заимствование и слайсы.
➡️ Получить демо-доступ сейчас
Изучайте Rust в нашем курсе-тренажёре!
Получайте практические навыки с первого урока вместе с автором курса и опытным наставником.
Курс-тренажёр - это:
💡 100+ практических задач
💡 пет-проекты в портфолио: blockchain, frontend и backend
💡 code review от наших наставников 24/7 с нашим AI-помощником Ду-Ду
💡 бессрочный доступ к актуальной программе: обновляем каждые 3 месяца
💡 бесплатный демо-доступ с практикой
Для кого этот курс:
для разработчиков на системных языках C и C++
для разработчиков, которые взаимодействуют с высокоуровневыми языками (Python, JavaScript, Java и C#)
Уже сейчас вам доступны 3 первых урока:
Урок #1 | Выбор IDE, установка окружения и первый "hello world"
Соберёте и запустите первый "hello world" проект.
Урок #2 | Базовый синтаксис
Научитесь писать Rust код в процедурном стиле. Изучите типы данных, встроенные и пользовательские типы, функции и переменные
Урок #3 | Владение и заимствование
Используете механизмы управления памятью и ссылками. Решите несколько задач на владение, заимствование и слайсы.
➡️ Получить демо-доступ сейчас
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Doom-captcha — капча в виде DOOM.
🎮 Doom-captcha
это капча в стиле игры DOOM, написанная на C++.
Чтобы пройти проверку, нужно уничтожить трех врагов.
🖥 Github
🔗 Демка
@cpluspluc
это капча в стиле игры DOOM, написанная на C++.
Чтобы пройти проверку, нужно уничтожить трех врагов.
🔗 Демка
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ZLUDA — новая экспериментальная технология, позволяющая запускать CUDA-приложения на видеокартах AMD без модификаций кода. Проект особенно интересен для обладателей видеокарт Radeon RX 5000+ серий, предлагая достойную альтернативу стеку NVIDIA. Пока решение остается в разработке, но уже есть тесты от GeekBench 5.5.1, которые показывают многообещающие результаты — производительность близка к нативной CUDA.
🧑💻Как это работает?
ZLUDA подменяет системные библиотеки CUDA, перенаправляя вызовы через совместимый с ROCm интерфейс. Для запуска достаточно скопировать DLL-файлы в директорию приложения или использовать специальный лаунчер.
‼️ Важно:
—Поддержка пока ограничена Windows и Linux
—Требуются свежие драйверы Adrenalin Edition
—MacOS не поддерживается
🔗 Ссылка - *клик*
@cpluspluc
🧑💻Как это работает?
ZLUDA подменяет системные библиотеки CUDA, перенаправляя вызовы через совместимый с ROCm интерфейс. Для запуска достаточно скопировать DLL-файлы в директорию приложения или использовать специальный лаунчер.
‼️ Важно:
—Поддержка пока ограничена Windows и Linux
—Требуются свежие драйверы Adrenalin Edition
—MacOS не поддерживается
🔗 Ссылка - *клик*
@cpluspluc
👾 Flax Engine — современный мощный инструмент для разработки 3D-игр с открытым исходным кодом. Проект упирается на качественную графику и удобный рабочий процесс и полностью написан на C++ и С# и возможно в будущем приблизиться к уровню Unity или Unreal.
⚡️ Движок отличается открытостью кода и готовностью команды принимать сторонние pull-запросы. Интересно, что любой желающий может внести свой вклад или использовать измененный исходный код в играх на основе Flax. Также у проекта хорошо прописана структура репозитория: отдельные папки под бинарники, исходники движка и редактора, шейдеры и сторонние библиотеки.
🔐 Лицензирование - EULA (для коммерческого использования)
🤖 GitHub
@cpluspluc
⚡️ Движок отличается открытостью кода и готовностью команды принимать сторонние pull-запросы. Интересно, что любой желающий может внести свой вклад или использовать измененный исходный код в играх на основе Flax. Также у проекта хорошо прописана структура репозитория: отдельные папки под бинарники, исходники движка и редактора, шейдеры и сторонние библиотеки.
🔐 Лицензирование - EULA (для коммерческого использования)
🤖 GitHub
@cpluspluc
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Библиотека предоставляет два ключевых класса:
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