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

Calling all C++ developers: A free preview of CLion with much faster core IDE functions is out! 🎉 Introducing CLion Nova – a version of CLion with the C++ language engine from ReSharper C++ and JetBrains Rider. It brings:

Faster highlighting speeds
A more responsive UI
Significantly fewer freezes and hangs in refactorings

источник

#cpp #programming

👉 @cpp_lib
2
Статьи серии SObjectizer Tales

Некоторое время назад я искал альтернативы библиотеке Asynchronous Agents от Microsoft. Я разработал приложение для Windows, взаимодействующее с промышленными камерами и выполняющее множество задач, таких как визуализация и распознавание объектов, и мне нужно было, чтобы оно работало на других платформах.

1. Producing Images
2. Can you call me back?
3. Acquisition loop revisited
4. Handling commands
5. Sending commands
6. Is the stream still in progress?
7. Agent composition
8. Representing errors
9. Splitting work
10. Handling GUI from main
11. Interlude: testing
12. Receiving commands from the network
13. Routing images across the network
14. Triggering agent shutdown
15. Monitoring disconnections
16. Interrupting work
17. Limiting message flow
18. Limiting message chains
19. Thread-safe handlers
20. Performance, part 1
21. Performance, part 2

https://dev.to/ilpropheta/sobjectizer-tales-prelude-5bi8

#cpp #programming

👉 @cpp_lib
3👍1
Файловый ввод, сделанный по-человечески

Поводом к написанию данной статьи и к разработке соответствующей мини-библиотеки ffh стало одно из практических заданий по дисциплине ‘Языки программирования’, которую я веду. В этом задании необходимо прочитать все строки из текстового файла для последующей обработки. Так вот, у студентов, выбравших для выполнения этого задания язык C++ [язык программирования выбирается студентом для каждого задания, но чаще всего выбирают C++ или Python], почему-то иногда читалась из файла лишняя пустая строка. В прошлые годы я не придавал этому большого значения, но в последний раз решил таки разобраться в чём проблема. В тексте задания у меня было написано примерно следующее:
Чтобы прочитать строку из файла на языке C++ используйте такой код:

std::string s;
std::getline(f, s);


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

#cpp #programming

👉 @cpp_lib
👍41
Media is too big
VIEW IN TELEGRAM
Полезные материалы для С++ разработчика: о новом стандарте, висячих ссылках и технических собеседованиях

Принесли материалы с недавнего митапа по С++ — сохраняйте в закладки, чтобы посмотреть на новогодних каникулах. Что интересного ждет в подборке?

Дискуссия о технических собеседованиях, из которой вы узнаете, какие красные флаги кандидатов отмечает Константин Владимиров, как Елена Степанова относится к алгоритмическим задачам и почему Илье Шишкову важны софтскиллы.

Обзор приятных и неприятных фич С++ 23 с точки зрения практикующего разработчика, который опробовал новый стандарт на реальных проектах.

Дюжина примеров, когда механизм lifetime extension не работает, и ответы на вопросы, что делать в таких ситуациях и как избежать последствий — ненавистных висячих ссылок.

Монады, обертки, std::expected: плюсы и минусы С++ 23 глазами практикующего разработчика
Рассказал: Илья Казаков, С++ разработчик в команде систем хранения данных, YADRO

Коротко о сути доклада: Обсудили, какие проблемы закрыл, а какие создал новый стандарт языка. Илья на примерах показал, как работает новая функциональность и в каких задачах можно применять фичи С++ 23. Его фавориты — монадический std::optional и std::expected, а удаленные опции aligned_storage и aligne_union Илья обещает помнить всегда.

https://habr.com/ru/companies/yadro/articles/783472/

#cpp #programming

👉 @cpp_lib
👍4
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