C++ Academy
15.7K subscribers
799 photos
142 videos
1 file
738 links
По всем вопросам- @workakkk

РКН: clck.ru/3FmxJF

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

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

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

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

источник

#cpp #programming
2🔥2😁1
#вопросы_с_собеседований
Бывает такое, что оператор new не выделяет память?

Ответ:
Да, бывает, когда new передаётся указатель на уже выделенную память (например, с помощью malloc). Это называется placement new. И оператор new без изменения возвращает второй параметр - указатель (void* operator new(std::size_t, void*)). Это используется для создания объектов в выделенном "хранилище" или после malloc.

Важно! В этом случае деструктор нужно вызывать самостоятельно!
🔥15
Своя виртуальная машина на C за 200 строк⁠⁠

Каждый раз, когда мы запускаем inference LLM, мы на самом деле гоняем программу в виртуальной машине. PyTorch крутит граф вычислений, llama.cpp интерпретирует GGUF, vLLM гоняет свой движок поверх CUDA. Мы живём в мире абстракций настолько глубоких, что уже забыли, как это всё работает на уровне байтов.

Ребята, рекомендую статью от Scarlett. Она показывает, как написать полноценную виртуальную машину на чистом C меньше чем за 200 строк. Без фреймворков, без зависимостей, без магии. Только память, регистры и опкоды. И это самая освежающая вещь, которую я читал на этой неделе.

Почему AI-специалисту стоит уделить этому вечер. Мы постоянно работаем с абстракциями поверх абстракций. Python вызывает CUDA-ядра, которые транслируются в PTX, который превращается в SASS, который исполняется на SM. Когда что-то падает с out of memory или внезапно становится в десять раз медленнее, мы открываем Nsight и видим непонятные буквы. Понимание того, как вообще работает машина, отдельная суперсила, которая окупается на каждом продакшен-инциденте.

Если кратко, что там внутри. Автор строит VM по образу LC-3, это учебная архитектура фон-Неймана. 65 536 ячеек памяти по 16 бит, 10 регистров, включая программный счётчик и регистр условных флагов. Вся инструкция это 16 бит, где первые 4 бита опкод, остальные параметры. Поддерживается 14 команд: арифметика, загрузка и сохранение памяти, переходы, вызовы подпрограмм и trap для ввода-вывода.

Самое интересное это цикл fetch decode execute. Три строки кода. Читаем инструкцию по адресу из RPC, увеличиваем RPC, вызываем обработчик по индексу опкода из таблицы указателей на функции. Всё. Вот так работает любой процессор в мире, только сложнее и с миллиардами транзисторов. Когда вы понимаете это на уровне C, архитектурные особенности Transformer runtime перестают казаться чёрной магией.

Ещё из приятного. Есть подробный разбор битовых полей инструкций, объяснение sign extension, работа с условными флагами N, Z, P и аккуратная реализация trap-таблицы через массив указателей на функции вместо гигантского switch. Этот приём напрямую переиспользуется, когда вы пишете свой интерпретатор графа или custom kernel dispatcher.

Что из этого вытаскивает AI-инженер. Во-первых, интуицию по поводу того, как устроен любой runtime, от TensorRT до ONNX. Во-вторых, понимание, почему arena-аллокаторы и заранее выделенная память бьют malloc в цикле. В-третьих, это лучший антидот от выученной беспомощности на фоне LLM-ассистентов. Пока Cursor пишет вам код на TypeScript, вы садитесь и руками собираете VM на C, которая исполняет машинный код. Мозг перезагружается, руки помнят, что такое настоящая инженерия.

Совет. Не просто читайте. Откройте файл, начните с main memory и регистров, добавляйте по одной инструкции. Сверяйтесь с постом, когда застряли. К концу вечера у вас будет рабочая VM, в которую можно загрузить свой собственный hex-файл и выполнить сложение двух чисел с клавиатуры. Это тот самый момент, ради которого мы когда-то пошли в инженерию.

Источник и полный разбор: https://x.com/Zyara_1ot/status/2045916052559900725
👍8🔥74
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
👍75🔥3
❤️ Backend Talks от Яндекс 360 — конференция о разработке, технологиях и будущем

Инженеры Яндекс 360 каждый день строят высоконагруженные отказоустойчивые и масштабируемые системы, которые выдерживают больше 1 000 000 RPS: Диск, Телемост, Почту и другие цифровые сервисы.


16 мая они собирают единомышленников — опытных специалистов, для которых работа с высокими нагрузками давно стала повседневной практикой. Будет живая среда для обмена опытом — с обсуждениями, спорами, настолками и разговорами о рабочих задачах.

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

🚀 Подробнее о программе — в карточках и на сайте мероприятия
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2🔥1
🤣33👍8🥰1😱1🫡1
🧩 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👍3
12😁5👍3
Когда работаешь с большим количеством данных, становится понятно, насколько важна продуманная инфраструктура. На митапе Максим Бабенко, руководитель разработки YTsaurus и преподаватель ШАДа и ВШЭ, рассказал о том, как платформа помогает решать такие задачи.

Команда проделала большую работу, чтобы YTsaurus можно было использовать как инфраструктуру для запуска GPU-вычислений. За последний год:

- добавили поддержку GPU в k8s, доработали планировщик и сделали API для распределённого чтения и записи датасетов
- добавили row-level security, constraints
- продолжили развивать инструменты мониторинга и сервисы для администрирования
👍3🥰2👌1
🚀 Высокоскоростная межъязыковая IPC библиотека Tachyon

Tachyon обеспечивает рекордно низкую задержку (56.5 нс) для межъязыкового взаимодействия между 7 языками, включая Python, Java и Rust. Он использует нулевую копию для передачи данных, что делает его идеальным для приложений, требующих высокой производительности, таких как ML и обработка медиа.

🚀 Основные моменты:
- Поддержка 7 языков: Python, Node.js, Java, Kotlin, Rust, Go, C++.
- Нулевая копия данных для повышения скорости.
- Простота использования: всего одна зависимость — ваш ядро.
- Идеален для ML и торговых приложений.

📌 GitHub: https://github.com/riyaneel/Tachyon
4👍2
🎨 FusionUI: современная библиотека UI на C++23

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

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

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

#cpp
👍162🔥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
🔥9👍5🤔41