Библиотека C/C++ разработчика
6.81K subscribers
655 photos
690 videos
8 files
940 links
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Download Telegram
Итак, вы унаследовали старую кодовую базу на C++. Что дальше?

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

Теперь вы отвечаете за кодовую базу на C++. Она большая, сложная и своеобразная; достаточно слишком долго на неё посмотреть, как она начинает разваливаться разными интересными способами. Иными словами, это легаси.

Но баги всё равно как-то нужно устранять, а ещё добавлять новые фичи. То есть вам нельзя просто закрыть на неё глаза или что ещё лучше, взорвать её динамитом. Она важна для компании. По крайней мере, для тех, кто платит вам зарплату. А значит, важна для вас.

И что делать теперь?

Не волнуйтесь, у меня такое случалось очень много раз и в разных компаниях (кто-то язвительный может спросить: а разве кодовые базы на C++ бывают какими-то другими?), выход есть, он не особо сложен и поможет вам действительно устранять баги, добавлять фичи, а то и когда-нибудь переписать её.

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

https://habr.com/ru/companies/ruvds/articles/798453/

original https://gaultier.github.io/blog/you_inherited_a_legacy_cpp_codebase_now_what.html

#cpp #programming

👉 @cpp_lib
👍3🔥311
Крошечный рендерер или как работает OpenGL: программный рендеринг в 500 строках кода

https://github.com/ssloy/tinyrenderer/wiki

#cpp #programming

👉 @cpp_lib
💯61👍1
C++: Движок Raycasting для Wolfenstein 3D

Raycasting - это техника рендеринга для создания 3D-перспективы на 2D-карте. В те времена, когда компьютеры были более медленными, невозможно было запустить настоящие 3D-движки в реальном времени, и первым решением стал рэйкастинг. Raycasting может работать очень быстро, потому что для каждой вертикальной линии экрана нужно сделать только один расчет. Самой известной игрой, в которой использовалась эта техника, является, конечно же, Wolfenstein 3D.

https://lodev.org/cgtutor/raycasting.html

#cpp #programming

👉 @cpp_lib
👍8🔥21
C++: Рендеринг на основе физики: от теории к реализации
Мэтт Фарр, Венцель Якоб и Грег Хамфрис

Фотореалистичная компьютерная графика повсеместно распространена в современном мире, широко используется в кино и видеоиграх, а также в дизайне продуктов и архитектуре. Физически обоснованные подходы к рендерингу, когда в основе синтеза изображения лежит точное моделирование физики рассеивания света, обеспечивают визуальную реалистичность и предсказуемость. Этот учебник по компьютерной графике, ставший бестселлером, в новом, всесторонне обновленном издании устанавливает стандарты физически-ориентированного рендеринга в индустрии и области.

Книга Physically Based Rendering описывает как математическую теорию, лежащую в основе современной системы фотореалистичного рендеринга, так и ее практическую реализацию. Метод, известный как грамотное программирование, объединяет человекочитаемую документацию и исходный код в единый справочник, специально разработанный для облегчения понимания. Передовые алгоритмы, программное обеспечение и идеи книги, включая новый материал о трассировке лучей на GPU, позволят читателю разработать и использовать полнофункциональную систему рендеринга, способную создавать потрясающие изображения.

https://www.pbr-book.org/4ed/contents

#cpp #programming

👉 @cpp_lib
👍5🤯21🔥1
Ecs-cpp

Entity Component System (ECS) - это шаблон проектирования, который используется для разделения данных и логики. Это способ организовать код таким образом, чтобы он был более гибким и удобным в обслуживании. Этот паттерн часто используется в игровых движках, но может применяться и в других приложениях.

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

https://github.com/annell/ecs-cpp

#cpp #programming

👉 @cpp_lib
👍5
Простое руководство по атомарности в C++

Часто возникает путаница с тем, что же понимается в компьютерных науках под «атомарностью». Как правило, атомарность – это свойство процесса, означающее, что он совершается за один шаг или операцию. Но в языке C++ атомарность определяется гораздо более специфичным образом. На самом деле, при использовании std::atomic с классами и типами еще не гарантируется, что весь код будет подлинно атомарным. Хотя, атомарные типы и входят в состав языка C++, сами атомарные операции должны поддерживаться на уровне того аппаратного обеспечения, на котором работает программа. Эта статья – простое руководство, помогающее понять, что же представляет собой атомарность в C++.

https://blog.devgenius.io/a-simple-guide-to-atomics-in-c-670fc4842c8b

#cpp #programming

👉 @cpp_lib
👍5🤣1
C++: Трассировка лучей за одни выходные

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

https://raytracing.github.io/books/RayTracingInOneWeekend.html

#cpp #programming

👉 @cpp_lib
👍10
Генерация пещер при помощи клеточного автомата

Клеточный автомат — дискретная модель, изучаемая в математике, теории вычислимости, физике, теоретической биологии и микромеханике. Основой является пространство из прилегающих друг к другу клеток (ячеек), образующих решётку. Каждая клетка может находиться в одном из конечного множества состояний (например, 1 и 0).

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

#cpp #programming

👉 @cpp_lib
👍4
Media is too big
VIEW IN TELEGRAM
C++ Что такое указатели и зачем они нужны

#cpp #programming

👉 @cpp_lib
👍7🔥2
Развлечения с gRPC и C++

Погружение в асинхронные серверы и клиенты с использованием C++ и gRPC в 2023 году

Почему я пишу эту серию статей? Так получилось, что я хочу использовать gRPC в своем будущем DNS-сервере.

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

https://lastviking.eu/fun_with_gRPC_and_C++/

#cpp #programming

👉 @cpp_lib
👍4🔥3
Рефакторинг с использованием C++17 std::optional

Существует множество ситуаций, когда вам нужно выразить, что что-то является "необязательным" - объект, который может содержать значение или нет. У вас есть несколько вариантов реализации такого случая, но в C++17 появился, пожалуй, самый полезный способ: std::optional.

Сегодня я подготовил один пример рефакторинга, где вы можете научиться применять эту новую возможность C++17.

https://www.cppstories.com/2018/04/refactoring-with-c17-stdoptional/

#cpp #programming

👉 @cpp_lib
👍6
Разработка кросплатформенного приложения на Qt с использованием нейросетей, обученных на tensorflow

Раз уж Вы заинтересовались данной статьёй, то ожидается, что Вы умеете программировать на с++ с использованием библиотеки Qt и разрабатывать нейросети на Python c использованием библиотеки tensorflow.
Соответственно остаётся только понять как использовать обученные Вами нейросетевые модели в Qt проектах.

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

#cpp #programming

👉 @cpp_lib
👍3
📚Expert C++: Become a proficient programmer by learning coding best practices with C++17 and C++20's latest features
Авторы: Vardan Grigoryan, Shunguang Wu (2020)

Язык C++ развивался на протяжении многих лет, и сейчас доступна его последняя версия - C++20. Начиная с C++11, C++ постоянно расширяет набор функций языка. В новой версии вы познакомитесь с такими возможностями, как концепции, модули, диапазоны и корутины. Эта книга станет вашим путеводителем в изучении тонкостей языка, методов, инструментов C++ и новых возможностей, появившихся в C++20, а также поможет вам применить их при создании современного и отказоустойчивого программного обеспечения.

#cpp #programming

👉 @cpp_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
Words counter benchmarks

Это серия все более производительных "счетчиков слов" (не вычурных, просто разделяющих "слова" пробелами), реализованных с использованием возможностей Modern C++20, таких как span, string_view, filesystem, ranges и других.

При необходимости используются параллельные хэш-карты и другие зависимости, такие как контейнеры Abseil, Boost.Future (допускающие продолжения) или Asio с корутинами C++20.

https://github.com/germandiagogomez/words-counter-benchmarks-game

#cpp #programming

👉 @cpp_lib
1👍1
Отладка C при помощи пакета Cosmopolitan Libc

Cosmopolitan Libc предоставляет набор отладочных возможностей, повышающих удобство разработки на C: трассировка вызовов функций, интеграция с gdb, среда выполнения ASAN/UBSAN и многое другое! На C написано много быстрого и критически важного кода. Если вы пользуетесь программами, написанными на C, если вам приходится предусматривать интерфейсы для работы с библиотеками на C, исправлять баги в коде на C, либо даже переписывать имеющуюся на С программу на каком-то другом языке, то именно этот инструмент помогает понять, что делается в вашем коде на C. Отладка – это не просто россыпь инструкций printf. В этом посте будет рассмотрено, как Cosmopolitan Libc помогает наверняка и как следует отлаживать код C. Все примеры находятся в этом репозитории.

https://ahgamut.github.io/2022/10/23/debugging-c-with-cosmo/

#cpp #programming

👉 @cpp_lib
👍32
📚C++ Standard Library Quick Reference
Авторы: Marc Gregoire, Peter Van Weert (2016)

Стандартная библиотека шаблонов является жемчужиной языка программирования С++ и содержит основные алгоритмы, структуры данных и функции, необходимые для повседневной работы. Обычно она изучается в конце любого руководства по С++, однако этот справочник направлен исключительно на изучение STL, рассматривая основные темы, такие как контейнеры, лямбда-выражения, указатели и функции по работе с многопоточностью.

В книге рассматриваются следующие темы:
✔️ математические функции;
✔️ контейнеры;
✔️ алгоритмы;
✔️ потоки ввода/вывода;
✔️ строки;
✔️ многопоточность.

#cpp #programming

👉 @cpp_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
Автоматическая Генерация Конфигураций для Make Сборок

При разработке программного обеспечения (особенно для микроконтроллеров) рано или поздно придется столкнуться с тем, что надо как-то передавать конфигурации для данного программного проекта.

В своем опыте я пришел к выводу, что с точки зрения масштабирования кодовой базы, конфиги проще всего передавать через переменные окружения. Да.. Плюс в том, что переменные окружения можно определять прописывая прямо в скриптах (Make, CMake и т.п.).

Выглядит это так. У каждой сборки есть файл config.mk в котором перечислены программные компоненты из которых должна собираться эта конкретная сборка. Содержимое этого файла обычно выглядит так.

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

#cpp #programming

👉 @cpp_lib
👍5