Библиотека C/C++ разработчика
7.28K subscribers
696 photos
723 videos
8 files
999 links
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
FTXUI

Простая кроссплатформенная библиотека C++ для пользовательских интерфейсов на базе терминала!

• Функциональный стиль
• Простой и элегантный синтаксис
• Создаваемые консольные UI поддерживают навигацию с помощью клавиатуры и мыши
• Поддержка UTF8
• Поддержка анимации
• Поддержка рисования
• Нет зависимостей
• Кроссплатформенность: Linux/MacOS, WebAssembly, Windows


https://github.com/ArthurSonzogni/FTXUI

#cpp #programming

👉 @cpp_lib
1👍112💩1
Media is too big
VIEW IN TELEGRAM
Константин Владимиров — О денотации: разрешение имен и его пересмотр в C++23

Этот доклад — попытка сделать темную и мрачную область разрешения имен в C++ простой и ясной для практикующего программиста.

источник

#cpp #programming

👉 @cpp_lib
🔥5
Media is too big
VIEW IN TELEGRAM
Плывущий экран. Вирус на C++. Melting Screen

Программа предоставлена в образовательных целях! Автор не несёт ответственности за её использование!
В этом видео вы узнаете как написать вирус на с++ который заставляет экран сыпаться и плыть.

источник

#cpp #programming

👉 @cpp_lib
👍6😁3🔥1🕊1
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

👉 @cpp_lib
👍17🔥4❤‍🔥1
Преобразование JSON в объекты C++ на этапе компиляции: демонстрация возможностей принятой в C++26 рефлексии

https://brevzin.github.io/c++/2025/06/26/json-reflection/

#cpp #programming

👉 @cpp_lib
🔥10❤‍🔥1
InputParser — это библиотека на C++ для парсинга командной строки, разработанная Джан Луисом Боливаром Дианой. Она позволяет легко добавлять и обрабатывать опции командной строки в приложениях на C++. Для использования необходимо создать объект Parser, добавить необходимые опции с помощью метода addOption, а затем вызвать метод parse для обработки аргументов. Библиотека требует компилятора с поддержкой стандарта C++23 и распространяется по лицензии MIT.

https://github.com/gianluisdiana/InputParser

#cpp #programming

👉 @cpp_lib
3👍1
Библиотека Asio для начинающих: работаем с корутинами без сегфолтов

Когда я начал работать с Asio и изучал документацию библиотеки, прочитал мнение, что доку писали «для роботов». Описание каждого концепта, функции или особенности приводится лишь однажды, без перекрестных ссылок и других удобных для разработчика деталей. Документация составлена так, что понять ее может разве что машина, «просканировав» текст целиком.

Я подумал, что было бы здорово написать статью, которая служила бы введением в библиотеку. Статью, которая помогла бы начать пользоваться Asio, даже если раньше вы с ней не работали. Что получилось, читайте в статье.

https://habr.com/ru/companies/yadro/articles/939174/

#cpp #programming

👉 @cpp_lib
👍64
О векторном вычислении экспоненциальной функции

Однажды передо мной встала задача векторизовать функцию вычисления экспоненты. Неожиданно оказалось, что готового решения не существует. Функции быстрого вычисления экспоненты, использующие векторный код, имеются практически для всех платформ в составе быстрых математических библиотек. Но они, как правило, читают данные из массивов в памяти и возвращают результат обратно в память. А вот такого, чтобы взять данные из регистра и ответ поместить обратно в регистр, не нашлось. Intel, правда, реализовал функцию векторного вычисления экспоненты в своей библиотеке SVML. Microsoft лицензировала эту библиотеку для использования в составе Visual Studio. В этом случае проблем нет. Но если захочется портировать код под GCC, окажется, что SVML в составе стандартных библиотек отсутствует. Пришлось писать свою функцию.

https://habr.com/ru/articles/923234/

#cpp #programming

👉 @cpp_lib
7👍2
Media is too big
VIEW IN TELEGRAM
Веселье с type erasure: делаем обертку с семантикой значения для полиморфных типов
Павел Новиков

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

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

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

источник

#cpp #programming

👉 @cpp_lib
👍43
Media is too big
VIEW IN TELEGRAM
Практика языка C.
Константин Владимиров.

На этом занятии мы завершим первый семестр знакомства с основами языка C и разберём многомодульные программы и структуры данных.

00:00 Хеш-таблицы.
15:10 Алгоритм Рабина-Карпа.
22:30 Range-based queries и снова о деревьях.
29:42 Многомодульные программы.
36:30 Структуры данных.
42:40 Литература и задачи.
44:45 Демонстрация многомодульных программ.

источник

#cpp #programming

👉 @cpp_lib
👍11
Встреча ISO C++ в Софии: С++26 и рефлексия

Привет! На связи Антон Полухин из Техплатформы Городских сервисов Яндекса, и сейчас я расскажу о софийской встрече Международного комитета по стандартизации языка программирования C++, в которой принимал активное участие. Это была последняя встреча, на которой новые фичи языка, с предодобренным на прошлых встречах дизайном, ещё могли попасть в C++26.


И результат превзошёл все ожидания:

- compile-time-рефлексия
- рефлексия параметров функций
- аннотации
- std::optional<T&‍>
- параллельные алгоритмы

https://habr.com/ru/companies/yandex/articles/920470/

#cpp #programming

👉 @cpp_lib
👍103❤‍🔥2🤔2
Асинхронная обработка ошибок – это сложно

Или как я научился не беспокоиться из-за cudaGetLastError() и просто признал её нежелательной

Любому, кто сталкивался с проектированием API, приходилось мучиться над вопросом, как лучше всего распространять ошибки к вызывателям функций. Эта проблема появилась ещё раньше, чем термин «API». Даже несколько десятилетий назад (скажем, 30+) проектировщики интерфейсов умели отделять возвращаемые ошибки от прочей полезной нагрузки в рамках тех функций, которые доставляют эту информацию вызвавшему их узлу.

Иногда полезно знать, как лучше не делать. Мой любимый пример антипаттерна в рассматриваемой области — прославленная функция atoi() из среды выполнения C, которая преобразует строку в целое число:


int atoi (const char * str);


https://parallelprogrammer.substack.com/p/asynchronous-error-handling-is-hard

#cpp #programming

👉 @cpp_lib
3👍2🤔1
Media is too big
VIEW IN TELEGRAM
Back to Basics: C++ Move Semantics
Andreas Fertig

Семантика перемещения — это тема, которую часто сложно понять. Этот доклад поможет тебе разобраться в ней, развеяв некоторые мифы с помощью нового и необычного способа объяснения концепции перемещения.

Например, ты, вероятно, слышал, что операции перемещения должны быть noexcept. В ходе доклада ты узнаешь, почему это так, а также напишешь эффективный конструктор перемещения и оператор перемещающего присваивания.

Мы также рассмотрим правила использования std::move и std::forward: когда и в каких случаях применять каждую из этих функций.

Ещё одна важная тема — что такое объект после перемещения (moved-from object) и что с ним можно делать.

Хочешь выжать максимум производительности? Тогда поговорим о ref-квалификаторах и о том, как они помогают избежать лишних потерь в эффективности.

В конце этого доклада ты получишь чёткое понимание семантики перемещения, что позволит тебе писать конкурентоспособный и высокопроизводительный код.

источник

#cpp #programming

👉 @cpp_lib
👍4
Санпросвет о плавающей точке, статья первая: компьютеры и числа

Недавно мне понадобилось сэмулировать работу с плавающей точкой только при помощи целочисленной арифметики, поскольку флоаты были недоступны. Полез я было в интернет за готовой библиотекой, и чуть не утонул. Мало того, что я не нашёл того, что искал, это бог с ним. Я обнаружил, что в интернете кто-то неправ. :)

Оказалось, что форумы кишат людьми, которые не до конца понимают, как компьютеры манипулируют числами. Например, мемасик с КПДВ я стянул с реддита (перечеркнул его я). Кто-то настолько был напуган страшными ошибками округления чисел с плавающей точкой, что даже смешную картинку смастерил. Только вот проблема в том, что 0.5 + 0.5 в точности равно 1.0.

Таким образом, я решил засучить рукава, и изобрести велосипед. То есть, написать самую неоптимизированную C++ библиотеку для эмуляции IEEE754 32-битных чисел с плавающей точкой при помощи исключительно 32-битной целочисленной арифметики. Библиотека уложится в несколько сотен строк кода, и в ней не будет никакого битхакинга. Задача написать понятный код, а не быстрый. А заодно хорошенько его документировать серией статей.

Итак, этим полукреслом мастер Гамбс начинает новую партию мебели, или статья первая: поговорим о числах и компьютерах.

https://habr.com/ru/articles/947886/

Мы в MAX

#cpp #programming

👉 @cpp_lib
4👍4
Сборка мусора: как это делается в системном программировании

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

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

Rus https://habr.com/ru/companies/timeweb/articles/766772/

Eng https://bitbashing.io/gc-for-systems-programmers.html

Мы в MAX

#cpp #programming

👉 @cpp_lib
👍42
Проблема, о которой вы даже не подозревали: print(.1+.2)

Как следует отображать на экране результат деления 3.0 на 10.0 ? Сколько цифр следует вывести, если пользователь не указал точность?

Скорее всего, вы даже не знали, что вывод чисел с плавающей запятой — это сложная проблема, настолько сложная, что по ней написаны десятки научных статей, причём последний прорыв был относительно недавно, в 2016 году. На самом деле, это одна из самых сложных частей поддержки чисел с плавающей запятой в среде выполнения языка.

Давайте продолжим разговор о самой неоптимизированной в мире библиотеке эмуляции плавающей точки при помощи целочисленной арифметики.

https://habr.com/ru/amp/publications/948556/

Мы в MAX

#cpp #programming

👉 @cpp_lib
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
QML и Widgets в одном проекте: решение без костылей

Разработка приложения для настольных или встраиваемых платформ часто упирается в выбор между Qt Widgets и Qt Quick для создания интерфейса. У каждого подхода свои плюсы и минусы. Qt как гибкий фреймворк позволяет комбинировать их разными способами, а выбор способа интеграции этих API зависит от того, чего вы хотите добиться. В этой статье я покажу, как отображать окна Qt Widgets в приложении, написанном преимущественно на Qt Quick.

https://www.kdab.com/display-widget-windows-in-qt-quick-applications/

Мы в MAX

#cpp #programming

👉 @cpp_lib
👍81
Оптимизация языковой модели Mamba для выполнения на CPU

Большие языковые модели с успехом применяются в биоинформатике. Неудивительно, ведь язык биологических последовательностей – всего лишь часть множества знаковых систем, существующих в природе. Но есть нюанс: осмысленные фразы языка биоинформатики, как правило, гораздо длиннее фраз языков межчеловеческого общения. Популярные языковые модели на основе трансформеров требуют квадратичного увеличения объема вычислений с ростом длины входной последовательности.

https://habr.com/ru/articles/925460/

Мы в MAX

#cpp #programming

👉 @cpp_lib
👍3
486-го хватит всем

В конце технического интервью, если кандидат ответил на вопросы и справился с задачами, у нас есть время для свободных вопросов, которые можно задать команде или кому-то из интервьюеров. Эту практику я переносил из компании в компанию, и она всегда помогала разрядить обстановку или вывести человека на разговор, если он был напряжен во время общения. Вопросы могут быть любые, кроме личных или тех, что под NDA.

Обычно кандидаты задают технические вопросы по стеку, пайплайнам, иногда пытаются задать каверзные вопросы, особенно по плюсам, чтобы проверить нас. Иногда и мы не можем ответить на все из них. Вопросы в стиле Google — например, «почему таблетки круглые?» — тоже встречаются, но недавно на одном из интервью прозвучал вопрос, на который вроде все и знали ответ, но никто сразу не смог его дать. Вопрос звучал так: «Какие общие технологии и решения появились в процессорах с времён 486, которыми мы часто пользуемся?»

https://habr.com/ru/articles/856572/

Мы в MAX

#cpp #programming

👉 @cpp_lib
👍51
Пишем игру для NES на C

Всем привет. Я Даг. Добро пожаловать в мой учебник - Как запрограммировать игру NES на C. Вы можете сделать оригинальную игру Nintendo, которая будет играть на настоящей консоли NES (или эмуляторе).

Давайте поговорим о NES.
Выпущена в Японии (Famicom) в 1983 году, в США — в 1985 году.

Процессор — Ricoh 2A03, 1.79 МГц, клон 6502 (без десятичного режима) со звуковой схемой. Чип 6502 был очень популярен в то время и использовался, например, в Apple II и Atari 2600.


https://nesdoug.com/

Мы в MAX

#cpp #programming

👉 @cpp_lib
👍62