Библиотека C/C++ разработчика
6.81K subscribers
655 photos
690 videos
8 files
940 links
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Download Telegram
Пять продвинутых техник инициализации в C++: От reserve() до piecewise_construct

От операций с динамическими контейнерами до констант времени компиляции — C++ предлагает много интересных техник (как в этом знаменитом меме :)). В этой статье мы рассмотрим несколько продвинутых методов инициализации: от reserve() и emplace_back для контейнеров, до piecewise_construct и forward_as_tuple для кортежей. Благодаря этим техникам мы можем уменьшить количество временных объектов и более эффективно создавать переменные.

https://www.cppstories.com/2023/five-adv-init-techniques-cpp/

#cpp #programming

👉 @cpp_lib
👍3
Рабочие контракты: высокопроизводительная асинхронная система управления задачами без блокировок

Много лет назад я придумал методику управления асинхронными задачами, которая, насколько мне известно, сильно отличалась и продолжает отличаться от существующих подходов. Типичный подход заключается в том, что задачи помещаются в очередь и выполняются, как только они попадают в начало очереди. В общем случае желательно, чтобы множество потоков потребляли задания из очереди одновременно, что позволяет выполнять несколько заданий либо параллельно, либо на разных процессорах. Для повышения эффективности очередь обычно имеет форму многопотоковой очереди (MPMC Queue) и, как правило, представляет собой конструкцию без блокировок, что позволяет повысить пропускную способность за счет снижения накладных расходов на синхронизацию доступа к очереди при выполнении операций push/pop. Создание эффективной очереди MPMC без блокировок - задача нетривиальная и может быть чревата возникновением тонких условий гонки, если она не реализована со строгим вниманием к деталям. К счастью, существует множество реализаций MPMC-очередей без блокировок, которые широко доступны. Некоторые из них более эффективны, чем другие, и у каждой есть свои недостатки и компромиссы, такие как снижение пропускной способности при сильной конкуренции, слабое упорядочивание (задачи могут быть потреблены в порядке, отличном от того, в котором они были произведены), очереди с фиксированной емкостью, очереди с динамической емкостью и т.д.

https://www.buildingcpp.com/work_contract.htm

#cpp #programming

👉 @cpp_lib
👍3
Форматирование текста на C++ старым и новым способом

Форматирование текста на C++ можно реализовать несколькими способами:

потоками ввода-вывода. В частности, через std::stringstream с помощью потоковых операций (таких как operator <<);
функциями printf, в частности sprintf;
с помощью библиотеки форматирования C++20, в частности std::format / std::format_to;
с помощью сторонней библиотеки, в частности {fmt} (основа новой стандартной библиотеки форматирования).

Первые два варианта представляют старые способы. Библиотека форматирования, очевидно, является новым. Но какой из них лучше в плане производительности? Это я и решил выяснить.

Rus https://habr.com/ru/companies/ruvds/articles/761910/

Eng https://mariusbancila.ro/blog/2023/09/12/formatting-text-in-c-the-old-and-the-new-ways/

#cpp #programming

👉 @cpp_lib
👍3
Собираем и запускаем калькулятор из Windows XP в среде Windows 10 c помощью GCC x64

Дисклеймер
Все действия, описанные автором в статье, сделаны исключительно в исследовательских и образовательных целях. Windows является зарегистрированным товарным знаком Microsoft.

Введение

В 2020 году мир облетела новость о сливе исходников Windows XP и Windows Server 2003 на 4Chan. После этого код широко разошелся по интернету, включая GitHub, который принадлежит Microsoft. Последняя, естественно, сразу начала принимать меры по блокировке кода, многие сайты и репозитории были удалены из поиска.

Каков же статус ситуации на 2023 год? Как ни парадоксально, исходники все еще можно найти на GitHub и клонировать без особых проблем. Тщательно поискав, можно найти инструкции и видео, как все собрать инструментами, которые идут в комплекте с исходниками системы.

Среди всех ОС от Microsoft, Windows XP является одной из самых моих любимых ОС. Она весьма быстрая, легковесная, но в тоже время интерфейс достаточно удобен для работы. По этим причинам, а также будучи разработчиком C и С++, мне было весьма интересно исследовать код данной ОС.

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

#cpp #programming

👉 @cpp_lib
👍4
Fibers в C++: основы

Fibers (волокна) менее узнаваемая концепция по сравнению с coroutines (сопрограммами), является довольно мощным дополнением к кооперативной многозадачности. Как графический программист в игровой индустрии, я ценю большую гибкость, которую дают волокна. Я считаю, что эта технология немного недооценена из-за отсутствия достаточного количества общедоступных материалов.

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

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

#cpp #programming

👉 @cpp_lib
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Визуализация алгоритмов стандартной библиотеки C++

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

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

#cpp #programming

👉 @cpp_lib
👍2
Media is too big
VIEW IN TELEGRAM
(Жизненный) cовет от создателя C++

Создатель C++, Бьёрн Страуструп, делится ценными жизненными советами, которыми, скажем прямо, могли бы воспользоваться все разработчики, независимо от их многолетнего опыта. По словам Бьерна, «вы не можете просто писать код», вам нужно развивать больше навыков, если вы хотите стать всесторонним успешным разработчиком. Посмотрите это неизданное интервью, если вы хотите получить вдохновение и рекомендации на своем пути разработчика от одного из OG.

источник

#cpp #programming

👉 @cpp_lib
👍12
SFINAE, непосредственный контекст, оператор << и '\n'

В этой статье я покажу и объясню странную на вид ошибку, связанную с tuple_size_v и инстанцированием для символа \n. Вы увидите некоторые хитрые места в SFINAE и то, как компилятор строит набор разрешений перегрузки.

https://www.cppstories.com/2022/sfinea-immediate-context/

#cpp #programming

👉 @cpp_lib
👍1
20 небольших, но полезных функций C++20

С++20 - это огромный и многофункциональный продукт. Вот лишь некоторые из них: Modules, Coroutines, Concepts, Ranges, Calendar & Timezone, Formatting library.

Но, как вы понимаете, это еще не все.

В зависимости от того, как считать, в C++20 появилось около 80 библиотечных функций и 70 изменений в языке, так что есть о чем рассказать :)

В этой статье я покажу вам 20 небольших возможностей C++20, которые очень удобно и полезно знать. Десять элементов языка и еще десять для стандартной библиотеки. Большинство из них сопровождаются интересным примером.

https://www.cppstories.com/2022/20-smaller-cpp20-features/

#cpp #programming

👉 @cpp_lib
👍3
Оптимизация GUI на Qt

Как правило, при создании desktop-приложений на платформе Qt не возникает проблем, связанных с медленностью работы GUI. Qt – платформа достаточно надежная, неплохо вылизанная по всем параметрам, в том числе и по скорости работы. Однако всё же иногда бывают ситуации, когда из-за обилия виджетов графический интерфейс немного притормаживает, и это печально). В этой статье я приведу один частный пример простого графического интерфейса и покажу, как за два шага можно сначала ускорить его в 11 раз, а потом и в целых 34 раза. Вдобавок к этому, я постараюсь немного осветить механизм принятия решения для таких оптимизационных задач, постараюсь показать направление мыслей для правильного решения. Поехали!

https://habr.com/ru/post/672962/

#cpp #programming

👉 @cpp_lib
👍4
Правка чужого кода

Для одного проекта мне понадобился просмотрщик памяти в DOS. В идеале хотелось бы иметь редактор памяти, чтобы в нём был поиск по ключевым словам, перемещение к заданному адресу. Но для старта мне было бы достаточно хотя бы возможность просмотра всего мегабайта доступной «нижней» памяти.

https://habr.com/ru/company/timeweb/blog/697688/

#cpp #programming

👉 @cpp_lib
👍2
std::atomic_thread_fence

std::atomic_thread_fence — это функция, которая устанавливает порядок синхронизации памяти для не атомарных и расслабленных атомарных доступов, как указано в аргументе order, без связанной атомарной операции.

std::atomic_thread_fence может использоваться для обеспечения правильного порядка чтения и записи в многопоточных программах.

В этом примере два потока выполняют функции write_x_then_y и read_y_then_x:

- write_x_then_y устанавливает значение атомарной переменной x равным 1, затем вызывает std::atomic_thread_fence с аргументом std::memory_order_release и устанавливает значение атомарной переменной y равным 1.

- read_y_then_x считывает значение атомарной переменной y, затем вызывает std::atomic_thread_fence с аргументом std::memory_order_acquire и считывает значение атомарной переменной x.

#cpp #programming

👉 @cpp_lib
👍4
Media is too big
VIEW IN TELEGRAM
Привет 🖐

За несколько дней мои матрицы координально изменились, в момент написания предыдущего поста, матрицы поддерживались лишь стандартом С++20 и выше, на данный момент библиотека настроена и собирается на С++11 С++14 С++17 С++20 С++23

Была пофикшена куча багов, как неочевидных с итераторами, так и простых опечаток.

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

Как раз для этого я создал шаблон cmake проекта MTL (Matrix Template Library) с настроенными зависимости и подтягиванием исходников.

Шаблон можно скачать и попробовать по ссылке, все инструкции того, как настроить проект под себя есть в README .md

#cpp #programming

👉 @cpp_lib
👍3
Управление зависимостями с помощью Meson + WrapDB

В одной из недавних статей в блоге рассказывалось о том, как собирать и управлять зависимостями с помощью CMake и FetchContent. В качестве примера использовалось простое GUI-приложение, использующее мультимедийные библиотеки SFML и инструментарий виджетов Dear ImGui с использованием соответствующей библиотеки-обертки. Для сравнения проделаем то же самое с Meson.

FetchContent_Declare(
sfml
URL https://github.com/SFML/SFML/archive/refs/tags/2.5.1.zip
URL_MD5 2c4438b3e5b2d81a6e626ecf72bf75be
)
add_subdirectory(sfml)


https://nibblestew.blogspot.com/2021/05/managing-dependencies-with-meson-wrapdb.html


#cpp #programming

👉 @cpp_lib
👍1