Что используется для ручного написания таблицы подстановки?
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
🟢 С++ производительность и щепотка безопасности — обсуждение того, за что программисты любят 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. Элементы вставляются после элемента, на который указывает позиция в параметре.
Синтаксис:
Параметры: функция принимает четыре параметра:
position – позиция в forward_list, после которой должны быть вставлены новые элементы.
forwardlist2_name – список, из которого должны быть вставлены элементы.
first – итератор, после которого должна быть выполнена вставка.
last – итератор, до которого должна быть выполнена вставка.
Это встроенная функция в 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 отключать какие-то отдельные задачи для отладки оставшихся.
Проще говоря нужен диспетчер задач для микроконтроллера.
Углубленный разбор ожидает тут
В программировании микроконтроллеров часто нужно написать простые тестировочные прошивки. При этом надо некоторые функции вызывать чаще, а некоторые реже.
Для этого конечно можно запустить 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()).
Продолжение истории вот
#гайд
Благодаря библиотеке 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» должен быть среди них.
Далее примеры кода и несколько фишек
#гайд
С момента добавления 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 улучшили и этот аспект.
Рассмотрение других ништяков релиза — вот
#почитать
.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 для сокращения размеров бинарных файлов
📥 Анализ приложений на 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, диапазоны и алгоритмы, вы ищете простой в использовании способ сделать вашу кодовую базу более устойчивой, то видео для вас.
#туториал
В видосе рассматривается альтернативная, более безопасная абстракция для перебора последовательностей и немного 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 (для удобной, единообразной работы с настройками приложения)
Далее подробное описание процесса и куча кода
#гайд
Все базируется на двух сущностях — 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 — Заключение
#видео
Лайфхаки о том, как быстрее вливаться на новом месте работы и как быстрее начать приносить какой-то результат.
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-калькулятор с помощью стандартной библиотеки Си — разбор процесса разработки графического калькулятора с нуля
🔅 Безопасное программирование на Си — подход к безопасному программированию, сведения об инструментах проверки кода и примеры типовых ошибок
🔅 Показываем видео в терминале — знакомство с библиотекой OpenCV на примере программы для отображения видео в текстовом терминале
🔅 A Concise Introduction to Coroutines — введение в корутины (C++20): О Promise Type, Awaitable и Coroutine Handle
🔅 Интересный функционал в C++23 — о функциях высшего порядка и том, как они могут сделать ваш код более гибким и выразительным
🔅 Пишем графический ASCII-калькулятор с помощью стандартной библиотеки Си — разбор процесса разработки графического калькулятора с нуля
🔅 Безопасное программирование на Си — подход к безопасному программированию, сведения об инструментах проверки кода и примеры типовых ошибок