Библиотека C/C++ разработчика | cpp, boost, qt
21K subscribers
1.57K photos
40 videos
16 files
3.74K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Наши каналы: https://yangx.top/proglibrary/9197

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
加入频道
Что используется для ручного написания таблицы подстановки?
Anonymous Quiz
5%
std:find
49%
std:map
21%
std:lookup
21%
Ничего из вышеперечисленного
4%
Свой вариант
🤔 очередной #дайджест по С++

🟢 С++ производительность и щепотка безопасности — обсуждение того, за что программисты любят C++

🟢 Как сравнить целые числа со знаком и без знака — cравнивать два числа должно быть легко, не так ли? Возможно, так и должно быть, но не в C++

🟢 Устранение расхождений в истории git commit после операций переименования с учетом регистра — мучения с изменением значений git config core.ignorecase

🟢 Простая в реализации arena-friendly hash map — в статье демонстрируется методика создания хэш-мапов в сочетании с arena allocation

🟢 О хранении изображений в памяти с выравниванием — будет немножко кода на Си и ассемблере, пара LabVIEW скриншотов, а также базовые знания OpenCV
forward_list::splice_after()

Это встроенная функция в CPP STL, которая переносит элементы в диапазоне от first+1 до last из данного forward_list в другой forward_list. Элементы вставляются после элемента, на который указывает позиция в параметре.

Синтаксис:

forwardlist1_name.splice_after(position iterator, forwardlist2_name,first iterator, last iterator)


Параметры: функция принимает четыре параметра:

position – позиция в forward_list, после которой должны быть вставлены новые элементы.
forwardlist2_name – список, из которого должны быть вставлены элементы.
first – итератор, после которого должна быть выполнена вставка.
last – итератор, до которого должна быть выполнена вставка.
🎢🚀 Диспетчер задач для микроконтроллера

В программировании микроконтроллеров часто нужно написать простые тестировочные прошивки. При этом надо некоторые функции вызывать чаще, а некоторые реже.

Для этого конечно можно запустить FreeRTOS, однако тогда код не будет переносим на другие RTOS, например Zephyr RTOS/TI-RTOS/RTEMS/Keil RTX/Azure RTOS или SafeRTOS. Потом прошивку как код часто приходится частично отлаживать на PC а там никакой RTOS в помине нет.

Поэтому надо держать наготове какой-нибудь простенький универсальный переносимый кооперативный NoRTOS планировщик с минимальной диагностикой и возможностью в run-time отключать какие-то отдельные задачи для отладки оставшихся.

Проще говоря нужен диспетчер задач для микроконтроллера.

Углубленный разбор ожидает тут
🧑‍🍳📊 The Ranges Library в C++20

Благодаря библиотеке ranges работа с библиотекой STL стала намного удобнее. Прежде всего, алгоритмы библиотеки ranges ленивы, могут работать непосредственно с контейнером и могут быть закомпожены. Кроме того, библиотека ranges имеет несколько уникальных дизайнерских решений.

Непосредственно в контейнере

Библиотека ranges позволяет контейнеру, такому как std::ranges::sort, напрямую работать с контейнером.
Напротив, классический std::sort работает с диапазоном, определенным двумя итераторами: std:sort(myVec.begin(), myVec.end()).

Продолжение истории вот

#гайд
🧑‍💻 Обработка строковых литералов во время компиляции

С момента добавления constexpr можно многое делать во время компиляции. Одной из таких вещей является обработка строковых литералов.

Поиск строк в бинарнике

Если вы объявите переменную типа const char* str = «Hello World»;, строка «Hello World» будет в бинарнике.

В Linux, macOS и Windows есть команда strings. (для Windows необходимо установить Sysinternals Suite)

Запуск strings [your_binary] выведет список всех строк — «Hello World» должен быть среди них.

Далее примеры кода и несколько фишек

#гайд
🤔🎯 Что нового в .NET 8

.NET 8 вышел в релиз, значит можно начинать переносить свои проекты на новую версию. В этой статье рассматриваются новые улучшения и фишки: производительность, Native AOT, GC, новые типы, направленные на повышение производительности, NuGet Audit и прочее.

Производительность

Microsoft сказали, что представленный в прошлом году .NET 7 очень быстрый, но .NET 8 быстрее. Усовершенствования коснулись: JIT, GC, рефлексии, коллекции, LINQ, кодогенерации, сериализции и десериализции, примитивных типов и многого другого.

Native AOT

Native AOT использует ahead of time компилятор для компиляции IL в машинный код во время публикации self-contained приложения. В .NET 8 добавлена поддержка архитектур x64 и arm64 на macOS.

Native AOT приложения включают в себя .NET runtime. Исходя из этого, они имеют больший размер по сравнению с обычными приложениями. В .NET 8 улучшили и этот аспект.

Рассмотрение других ништяков релиза — вот

#почитать
🤔 очередной #дайджест по С++

📥 Анализ приложений на C++ для оптимизации производительности — введение в анализ производительности программ на C++

📥 Стремление к улучшению кода на C++ — что такое анализ потоков данных, и какие ошибки может находить CLion

📥 C++23: Удаление поддержки сборки мусора — сказ о поддержке сборки мусора, включенной в C++11 и окончательно удаленной в C++23

📥 C++23 chunk view и stride view — видео о новых представлениях (views), добавленных в C++23

📥 Шаблоны для уменьшения размера бинарника — использовании extern template для сокращения размеров бинарных файлов
Как можно получить доступ к функциям-членам в контейнере?
Anonymous Quiz
53%
Iterator
13%
Indirect
15%
Оба варианта
15%
Ничего из вышеперечисленного
3%
Свой вариант
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🙃😉 Iteration Revisited

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

Если вам интересен STL, диапазоны и алгоритмы, вы ищете простой в использовании способ сделать вашу кодовую базу более устойчивой, то видео для вас.

#туториал
🧑‍🎓😎 Опыт создания UI библиотеки на C++

Все базируется на двух сущностях — Window и Control. Окно может содержать контролы, также само окно является контролом.

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

Window — принимает системные события и обеспечивает их рассылку подписчикам. Так же окно дает команду на перерисовку своих контролов и предоставляет им свой graphic. Кроме этого, окно управляет фокусом ввода, может сделать модальность и отправить подписанному пользователю или в систему событие.

Graphic — предоставляет интерфейс к системным методам рисования. В настоящий момент, реализовано рисование на Windows GDI/GDI+ и Linux xcb/cairo. Разумеется, нет никаких препятствий реализовать рисование на vulcan/bare metal/etc.

В библиотеке также есть вспомогательные средства для работы — структуры common (содержит такие основные типы, как rect, color, font), event (события мыши, клавиатуры, внутренние и системные события), graphic (для физической отрисовки на системном графическом контексте) theme (система констант для удобной поддержки визуальных тем) , locale (подсистема для удобного хранения текстового контента), config (для удобной, единообразной работы с настройками приложения)

Далее подробное описание процесса и куча кода

#гайд
🏃🏃 Как быстрее адаптироваться на новом месте работы

Лайфхаки о том, как быстрее вливаться на новом месте работы и как быстрее начать приносить какой-то результат.

00:12 — Несрочные вопросы
01:12 — Срочные вопросы
01:41 — Культура и процессы
02:17 — Знакомство с кодом и документацией
03:06 — Цели у команды или компании
03:46 — Самоуверенность
04:29 — Заключение

#видео
Для чего используется интерфейс распределителя в определяемом пользователем контейнере?
Anonymous Quiz
19%
Управление хранилищем
49%
Управление памятью
23%
Все перечисленное
5%
Ничего из перечисленного
4%
Свой вариант
✍️🧑‍🍳 Теория кэширования

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

Смотреть видео

#видео
🤔 очередной #дайджест по С++

🔅 Показываем видео в терминале — знакомство с библиотекой OpenCV на примере программы для отображения видео в текстовом терминале

🔅 A Concise Introduction to Coroutines — введение в корутины (C++20): О Promise Type, Awaitable и Coroutine Handle

🔅 Интересный функционал в C++23 — о функциях высшего порядка и том, как они могут сделать ваш код более гибким и выразительным

🔅 Пишем графический ASCII-калькулятор с помощью стандартной библиотеки Си — разбор процесса разработки графического калькулятора с нуля

🔅 Безопасное программирование на Си — подход к безопасному программированию, сведения об инструментах проверки кода и примеры типовых ошибок