Библиотека C/C++ разработчика
6.81K subscribers
655 photos
690 videos
8 files
940 links
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Download Telegram
Media is too big
VIEW IN TELEGRAM
TCP/IP сети с помощью Boost.Asio

Boost.Asio - это кроссплатформенная библиотека C++ для программирования сетей и низкоуровневого ввода-вывода, которая предоставляет разработчикам последовательную асинхронную модель с использованием современного подхода C++.

В этом месяце Ричард Томсон продолжит наше знакомство с Boost.Asio рассмотрением сетевых технологий TCP/IP. Мы рассмотрим, как реализовать клиент NNTP (Network News Transport Protocol) с помощью Boost.Asio. NNTP - это линейно-ориентированный протокол для чтения новостных статей usenet. Это даст нам представление обо всех типичных проблемах, связанных с сетевыми приложениями TCP/IP:

- Как преобразовать имя хоста в IP-адрес?
- Как установить долговременное соединение с сервером NNTP?
- Как обрабатывать произвольно большие объемы данных с NNTP-сервера, которые поступают асинхронно?
- Как мы координируем ввод данных пользователем с вводом/выводом NNTP?
- Как мы справляемся с неожиданными сетевыми ошибками?

источник

#cpp #programming

👉 @cpp_lib
👍3🔥311
🧲 Magnet

Минималистичный менеджер зависимостей для вашего следующего проекта на C++.

Настраивайте меньше, пишите больше.

https://github.com/Futureblur/magnet

#cpp #programming

👉 @cpp_lib
👍3🔥21
Media is too big
VIEW IN TELEGRAM
Подводные камни lifetime extension: 20 слайдов о том, когда он не работает

Иногда этот механизм просто работает, а иногда нет, но мы про это не знаем. Погрузимся в стандарт, lifetime и временные объекты, чтобы научиться избегать висячих ссылок.

00:00 - немного о докладчице
01:25 - зачем про это думать
02:25 - пример, как и когда работает
04:40 - что такое временный объект (и полезные материалы на тему)
08:25 - как отличить lifetime extension для временных объектов
10:20 - что происходит, если пройти по висячей ссылке
11:55 - про copy elision, внешне похожий на lifetime extension
14:05 - про range based for
15:00 - про xvalue
16:35 - про хранение ссылки на временный объект полем класса
17:20 - про тернарные операторы
18:15 - когда еще нет точных гарантий, что сработает
18:45 - рекомендации по работе с lifetime extension
21:20 - вопросы докладчице

источник

#cpp #programming

👉 @cpp_lib
5👍2
Тестовое в Firefly Studios или игра за час

Пару недель назад, на меня вышла HR "светлячков" и пригласила поговорить о позиции AI программера в их новую старую игру. Я был несколько удивлен, потому что знаком с парой ребят из студии и знаю, что найм у них сейчас остановлен. Но всегда интересно пообщаться с умными людьми, поэтому отказываться не стал. Первый созвон с HR вышел стандартный, где над чем работал, какие игры шипнул. Не очень понимаю зачем все это было спрашивать, если все это есть на линкедине подробно и с датами. Ну да ладно - видно такая их эйчарская доля по тридцать три раза переспрашивать. Или HR дальше второй страницы просто поленилась почитать.

Забукали время технического интервью. В полдень четверга на встречу приходит сотрудник студии и начинает просматривать резюмешку дальше второй страницы, где натыкается на скрин опенсорсного проекта StoneKingdoms, в который я некоторое время активно комитил. Проект, если что, получил благословение самого Simon Bradbury (владельца студии), так что проблем с правами на использование ресурсов из Stronghold нет. Посыпались вопросы, а что за проект? а как делаете? и что все на lua? а как же плюсы? Где-то на середине разговора к нам подключился другой разработчик "светлячков", с которым мое знакомство началось еще в 2010, когда он помогал восстанавливать исходники Caesar III и просто давал консультации как реализована игровая симуляция. Мы и сейчас иногда общаемся на форуме по ремейкам старых игр.

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

#cpp #programming

👉 @cpp_lib
👍32
Корутины C++ для чайников: пишем асинхронный веб-клиент

Написать этот материал меня побудило... отсутствие хороших статей по корутинам в C++ в русскоязычном интернете, как бы странно это не звучало. Ну серьезно, C++20 существует уже несколько лет как, но до сих пор почти все статьи про корутины, что встречаются в рунете, относятся к одному из двух типов. Или обзор начинается с самых глубин и мелочей, пересказывая cppreference, а потом автор выдыхается и все сводится к "ну а дальше все понятно, возьмите и примените это в своем коде", что напоминает известную картинку с совой. Либо иногда в статьях рассматривается применение корутин на примере генераторов, и этим все и ограничивается. Но, давайте будем честны, генераторы — это замечательно, но за все время моей многолетней карьеры разработчика я, вероятно, делал что‑то подобное генераторам разве что разок, в то время как асинхронный ввод‑вывод приходится использовать почти в каждом проекте. И поэтому меня гораздо больше интересует реализация асинхронного ввода‑вывода с использованием корутин, а не генераторы. Поэтому пришлось разбираться во всем самому.

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

#cpp #programming

👉 @cpp_lib
👍1442
Итак, вы унаследовали старую кодовую базу на 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