13626
Изучаем C++. По вопросам сотрудничества: @adv_and_pr
🧑🏻💻Асинхронность в C++ всегда была испытанием на зрелость. Потоки, мьютексы, коллбеки — и тысячи строк кода, чтобы просто дождаться результата. Но в C++20 всё изменилось: корутины убирают боль ручного управления потоками.
На открытом уроке разберём, как работает новая модель асинхронности в C++: без громоздких конструкций и перегрузок по CPU. Вы поймёте, как устроены корутины, где их применять и почему они стали стандартом в C++20 и C++23. На практике создадим корутины-генераторы и обсудим их преимущества перед классическими потоками.
Если вы уже чувствуете, что ваш C++ проект тонет в callback hell или не масштабируется под нагрузкой — этот вебинар поможет понять, как писать современный, чистый и асинхронный код.
🔥11 декабря в 20:00 МСК. Открытый урок проходит в преддверии старта курса «C++ Developer. Professional». Присоединяйтесь и узнайте, как сделать асинхронность естественной частью вашего кода: https://otus.pw/jPll/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Удобное управление тестовыми окружениями в docker-compose
Смотреть статью
Дерево отрезков. Очень мощная структура данных, которая позволяет делать много разных операций над массивом чисел.
Смотреть статью
Evolving Objects
Evolving Objects (EO) — это библиотека эволюционных вычислений (ЭВ) с открытым исходным кодом, написанная на C++. Она предназначена для облегчения разработки эвристических алгоритмов для решения задач оптимизации и поиска.
EO предоставляет набор классов и компонентов, которые можно использовать для создания различных типов ЭВ-алгоритмов, таких как генетические алгоритмы, эволюционные стратегии и дифференциальная эволюция.
#для_продвинутых
oneDNN
oneDNN — это высокопроизводительная библиотека с открытым исходным кодом, предназначенная для оптимизации машинного обучения и приложений глубокого обучения.
https://github.com/oneapi-src/oneDNN
#для_продвинутых
regexp — большие гонки
"Если компьютеры станут слишком мощными, мы можем организовать их в комитеты. Это их прикончит" (с) неизвестный автор
Смотреть статью
C++26 — прогресс и новинки от ISO C++
Смотреть статью
Cxxomfort
Cxxomfort — это набор инструментов с открытым исходным кодом, предназначенный для облегчения работы с языком программирования C++. Он был создан, чтобы помочь разработчикам работать с постоянно развивающимся стандартом C++, снизить нагрузку при переписывании кода, обеспечить обратную и прямую переносимость
Это ценный инструмент для любого разработчика C++. Он может помочь вам повысить производительность, улучшить качество кода и упростить разработку программного обеспечения.
#для_продвинутых
STXXL
STXXL, или Standard Template Library for Extra Large Data Sets, — это библиотека шаблонов C++, предназначенная для работы с очень большими наборами данных, которые не помещаются в оперативной памяти. Она реализует контейнеры и алгоритмы, способные обрабатывать терабайты данных на диске.
#для_продвинутых
В новой статье на Хабре Алексей Кременьков, бэкенд-разработчик в Яндекс 360, рассказывает о создании и эволюции сервиса динамического шардирования Sharpei для масштабирования PostgreSQL под нагрузкой в 300К+ RPS.
Пошагово разберём, как:
• Создали собственный инструмент для управления 700+ шардами PostgreSQL
• Справились с пиковыми нагрузками при миграциях
• Автоматизировали перенос пользователей между шардами и переехали в облако без даунтайма
Сервис Sharpei позволил Яндекс Почте перейти к гибкому горизонтальному масштабированию, полностью автоматизировать управление шардами и добиться четырёх девяток отказоустойчивости.
↘️ Подробнее читайте на Хабре
Реклама. ООО «Яндекс». ИНН 7736207543
Libevent
Libevent — это кроссплатформенная библиотека, предоставляющая API для работы с событиями в Unix-подобных операционных системах и Windows. Она позволяет разработчикам создавать асинхронные приложения, эффективно используя сетевые ресурсы.
#для_продвинутых
Алиасы в GIT
Большинство из нас знают, что такое GIT. При этом большинство из тех, кто им пользуется, постоянно применяют, по сути, одни и те же команды.
Например:git statusGit позволяет создавать алиасы команд. Благодаря этому вы можете вводить не длинную строку команды, а ее короткий псевдоним.
git commit -m 'commit'
Создаём alias:git config --global alias.st statusТеперь нам не нужно постоянно вводить
git config --global alias.cm 'commit -m'git status или git commit -m, достаточно ввести:git st
git cm
nanodbc
nanodbc — это небольшая обертка C++ для нативного C ODBC API. Она позволяет разработчикам C++ легко и удобно взаимодействовать с базами данных, поддерживающими ODBC.
#для_продвинутых
Libcds
Libcds (Concurrent Data Structures) — это библиотека C++ для безопасных многопоточных структур данных и методов безопасного освобождения памяти. Она практически header-only, то есть все структуры данных определены в заголовочных .h-файлах, а только реализация ядра алгоритмов SMR (Safe Memory Reclamation) вынесена в небольшую динамическую библиотеку.
#для_продвинутых
stdgpu
stdgpu — это библиотека с открытым исходным кодом, предоставляющая универсальные структуры данных GPU для быстрого и надежного управления данными. Она вдохновлена стандартной библиотекой C++ (STL) и предлагает аналогичные интерфейсы и функциональные возможности, но оптимизирована для работы на GPU.
#для_продвинутых
Объясните разницу между глубоким и поверхностным копированием и приведите пример, когда каждый тип копирования может быть предпочтительнее.
Глубокое копирование создаёт новый объект, копируя все поля источника и рекурсивно создавая копии всех объектов, на которые эти поля ссылаются. Таким образом, все ссылки в копии ведут на отдельные объекты, не связанные с оригиналом. Поверхностное копирование создаёт новый объект, но копирует только значения полей на верхнем уровне. Если поля являются ссылками на другие объекты, то копия будет ссылаться на те же объекты, что и исходный.
Глубокое копирование предпочтительно, когда нужно полностью изолировать копию от оригинала, чтобы изменения в одном не влияли на другой. Поверхностное копирование эффективно, когда нужно сэкономить память или время на копирование, и если объекты, на которые есть ссылки, не изменяются или их изменения допустимы в обоих экземплярах.
#вопросы_с_собеседований
❤️ Как не попасть в ловушку масштабирования при росте нагрузки в PostgreSQL?
В видеопроекте Road to Highload разработчик ядра Яндекс Диска Андрей Колнооченко рассказывает, как проектировать и развивать базы данных так, чтобы они оставались стабильными и быстрыми даже при росте QPS и объёма данных.
Разберём реальные примеры и обсудим типичные ошибки и подходы, которые помогают избежать проблем с производительностью и консистентностью. Особое внимание уделим согласованности кода и данных в БД для предотвращения проблем с race conditions, которые часто возникают при росте нагрузки.
Road to Highload — это цикл видео от Яндекс 360 о том, как строятся системы, которыми ежедневно пользуются миллионы людей и тысячи компаний. Здесь говорят о highload и отказоустойчивости не по учебникам, а на основе многолетнего опыта разработки.
BTSK
BTSK (Behavior Tree Starter Kit) — это бесплатная библиотека с открытым исходным кодом, написанная на C++, которая помогает разработчикам создавать системы искусственного интеллекта (ИИ) на основе поведенческих деревьев.
Поведенческие деревья — это иерархическая структура, которая представляет собой набор действий, которые может выполнять агент ИИ. BTSK упрощает создание и управление этими деревьями, предоставляя классы и функции для создания различных типов узлов деревьев.
#для_продвинутых
Kaldi
Kaldi — это бесплатная модульная библиотека с открытым исходным кодом для обработки речи, состоящая из различных компонентов, которые можно комбинировать для создания различных приложений.
#для_продвинутых
CNTK
CNTK (Microsoft Cognitive Toolkit) - это набор инструментов с открытым исходным кодом для глубокого обучения, разработанный корпорацией Microsoft. Он позволяет создавать и обучать нейронные сети с помощью C++. CNTK обладает рядом преимуществ, делающих его привлекательным выбором для задач глубокого обучения.
#для_продвинутых
LevelDB
LevelDB — это высокопроизводительная библиотека C++ для хранения пар ключ-значение, разработанная Google. Она обеспечивает упорядоченное отображение строковых ключей к строковым значениям.
#для_продвинутых
Abseil
Abseil — это набор библиотек общего назначения для C++, открытый компанией Google. Он предназначен для расширения возможностей стандартной библиотеки C++ и включает в себя хорошо протестированный код, используемый во внутренних проектах Google.
Стоит отметить, что Abseil не является заменой стандартной библиотеки C++. Google скорее делится своим полезным и проверенным кодом с сообществом разработчиков.
#для_продвинутых
ffead-cpp
ffead-cpp — это веб-фреймворк, фреймворк приложений и набор утилит, объединенные в один пакет. Он также предоставляет встроенное ядро сервера, совместимое с HTTP/HTT2/Web-Socket.
#для_продвинутых
libPhenom
libPhenom — это фреймворк событий, разработанный Facebook для создания высокопроизводительных и масштабируемых систем на C++. Он обеспечивает простой и эффективный способ публикации и подписки на события, а также маршрутизации событий между различными компонентами системы.
#для_продвинутых
LibU
LibU — это кроссплатформенная библиотека с открытым исходным кодом, предоставляющая простой и унифицированный интерфейс для работы с графическим интерфейсом пользователя (GUI) в различных операционных системах. Она позволяет создавать приложения с интуитивно понятным интерфейсом, независимо от того, на какой платформе они будут работать.
#для_продвинутых
SaneCppLibraries
SaneCppLibraries — это набор библиотек C++, разработанных для упрощения и ускорения разработки программного обеспечения, доступная на Windows, macOS, Linux и других платформах. Библиотеки имеют открытый исходный код и распространяются под лицензией MIT.
#для_продвинутых
C++ Workflow
C++ Workflow — это набор инструментов и библиотек, предназначенный для упрощения разработки C++-приложений. Он основан на идее разделения приложения на модули, которые могут быть независимо разработаны, протестированы и развернуты.
#для_продвинутых
Применяем стандартные алгоритмы в C++. Семь примеров
Смотреть статью
SObjectizer
SObjectizer — это небольшой, но мощный фреймворк с открытым исходным кодом, предназначенный для упрощения разработки многопоточных и распределенных приложений на C++.
#для_продвинутых
Динамическая JIT компиляция C++
Смотреть статью