home.social

#raii — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #raii, aggregated by home.social.

  1. Today was a solid case of an unsafe copy constructor combined with shared_ptr members

    Best part? The class had a method that created a copy constructed instance of itself and returned it.

  2. std::expected в C++23: гайд по миграции с исключений на функциональный error handling

    Исключения удобны, пока ошибки не становятся обычной частью логики. В C++23 для таких случаев есть std::expected : он явно показывает в сигнатуре, что функция вернёт либо результат, либо ошибку. Разберём, как перейти к этому подходу без переписывания проекта с нуля.

    habr.com/ru/companies/otus/art

    #C++23 #обработка_ошибок #исключения #функциональный_подход #RAII #типизация_ошибок #legacyкод

  3. Пять ошибок начинающих C++ разработчиков при работе с памятью, из‑за которых программа крашится

    Большинство ошибок с памятью в C++ не выглядят как ошибки. Код компилируется, тесты проходят, приложение работает неделями. А потом внезапно появляется Segmentation fault, повреждённая куча или утечка памяти, которую приходится искать часами. Разберём пять типичных ловушек, в которые регулярно попадают начинающие разработчики.

    habr.com/ru/companies/otus/art

    #C++ #управление_памятью #утечки_памяти #RAII #undefined_behavior #AddressSanitizer #ошибки_программирования

  4. Лямбды в C++: пять задач на захваты и время жизни, в которых ошибается даже опытный разработчик

    Лямбды в C++ выглядят безобидно, пока не начинают жить дольше переменных, которые захватили. Висячие ссылки, мёртвый this , копии состояния в потоках и ограничения std::function часто проходят компиляцию без шума, зато потом превращаются в undefined behavior. Разбираем пять задач на захваты и время жизни, где ошибка прячется не в синтаксисе, а в неверном предположении о том, кому и сколько живёт объект. Разобрать задачи

    habr.com/ru/companies/otus/art

    #лямбды_C++ #захваты_в_лямбдах #время_жизни_объектов #undefined_behavior #this_в_C++ #dangling_reference #управление_памятью #RAII

  5. CRTP должен умереть? АйТир Лист идиом и фичей C++: от худших к лучшим

    C++ — язык с долгой памятью. В нём до сих пор живут идиомы и приёмы, которые когда-то спасали разработчиков, а сегодня нередко мешают писать безопасный, быстрый и поддерживаемый код. Мы продолжаем использовать макросы, CRTP или iostream «по привычке», не всегда задумываясь о цене — сложности поддержки, скрытых багах, просадках производительности и времени команды. Разобраться, что в современном C++ действительно стоит брать в прод, а что пора оставить в прошлом, — важная задача для инженера, который не хочет тащить legacy в 2026 год. Привет, Хабр! Недавно мы запустили шоу «АйТир Лист». В каждом выпуске берём одну тему из мира разработки и раскладываем её по тир-листу — от FAIL до GOD. В первом выпуске разбирали open source для фронтенда , а во втором выпуске — обсудим непростую тему фич и идиом С++. Приглашённые эксперты — Антон Полухин, эксперт-разработчик C++ платформы городских сервисов Яндекса, и Даниил Черепанов, архитектор редакторов МойОфис. Будет субъективно, местами провокационно и точно полезно — чтобы вы посмотрели на привычные инструменты свежим взглядом и осознанно выбирали, на чём писать следующий проект.

    habr.com/ru/companies/ncloudte

    #c++ #мойофис #crtp #namespaces #лямбды #raii #исключения #variadic_templates #модули #pimpl

  6. CRTP должен умереть? АйТир Лист идиом и фичей C++: от худших к лучшим

    C++ — язык с долгой памятью. В нём до сих пор живут идиомы и приёмы, которые когда-то спасали разработчиков, а сегодня нередко мешают писать безопасный, быстрый и поддерживаемый код. Мы продолжаем использовать макросы, CRTP или iostream «по привычке», не всегда задумываясь о цене — сложности поддержки, скрытых багах, просадках производительности и времени команды. Разобраться, что в современном C++ действительно стоит брать в прод, а что пора оставить в прошлом, — важная задача для инженера, который не хочет тащить legacy в 2026 год. Привет, Хабр! Недавно мы запустили шоу «АйТир Лист». В каждом выпуске берём одну тему из мира разработки и раскладываем её по тир-листу — от FAIL до GOD. В первом выпуске разбирали open source для фронтенда , а во втором выпуске — обсудим непростую тему фич и идиом С++. Приглашённые эксперты — Антон Полухин, эксперт-разработчик C++ платформы городских сервисов Яндекса, и Даниил Черепанов, архитектор редакторов МойОфис. Будет субъективно, местами провокационно и точно полезно — чтобы вы посмотрели на привычные инструменты свежим взглядом и осознанно выбирали, на чём писать следующий проект.

    habr.com/ru/companies/ncloudte

    #c++ #мойофис #crtp #namespaces #лямбды #raii #исключения #variadic_templates #модули #pimpl

  7. CRTP должен умереть? АйТир Лист идиом и фичей C++: от худших к лучшим

    C++ — язык с долгой памятью. В нём до сих пор живут идиомы и приёмы, которые когда-то спасали разработчиков, а сегодня нередко мешают писать безопасный, быстрый и поддерживаемый код. Мы продолжаем использовать макросы, CRTP или iostream «по привычке», не всегда задумываясь о цене — сложности поддержки, скрытых багах, просадках производительности и времени команды. Разобраться, что в современном C++ действительно стоит брать в прод, а что пора оставить в прошлом, — важная задача для инженера, который не хочет тащить legacy в 2026 год. Привет, Хабр! Недавно мы запустили шоу «АйТир Лист». В каждом выпуске берём одну тему из мира разработки и раскладываем её по тир-листу — от FAIL до GOD. В первом выпуске разбирали open source для фронтенда , а во втором выпуске — обсудим непростую тему фич и идиом С++. Приглашённые эксперты — Антон Полухин, эксперт-разработчик C++ платформы городских сервисов Яндекса, и Даниил Черепанов, архитектор редакторов МойОфис. Будет субъективно, местами провокационно и точно полезно — чтобы вы посмотрели на привычные инструменты свежим взглядом и осознанно выбирали, на чём писать следующий проект.

    habr.com/ru/companies/ncloudte

    #c++ #мойофис #crtp #namespaces #лямбды #raii #исключения #variadic_templates #модули #pimpl

  8. [Перевод] RAII в современном C++: как правильно организовать автоматическое управление ресурсами

    Привет, Хаброжители! Сегодня мы приготовили для вас перевод статьи про RAII в современном C++. Вы узнаете как правильно организовать автоматическое управление ресурсами. В современном C++ управление ресурсами — это ключевая составляющая корректности программы, затрагивающая память, дескрипторы файлов, блокировки и все внешние системы, с которыми приходится взаимодействовать вашему коду. Начинающие программисты часто полагают, что при работе с C++ требуется активно очищать память вручную, пользуясь командами new, delete, malloc или free. Но на самом деле в современном C++ эта работа строится существенно иначе.

    habr.com/ru/companies/piter/ar

    #c++ #raii #автоматическое_управление #управление_ресурсами

  9. Inside of an actor, we can't assume `deinit` is isolated. If anything, we ought to assume the opposite.

    Since there's no easy way to express "release all owned resources", the actual change I'm being nudged towards is: express ONLY resource ownership with a new type. There, you can use deinit.

    This is #RAII from C++, but in Swift.

  10. Inside of an actor, we can't assume `deinit` is isolated. If anything, we ought to assume the opposite.

    Since there's no easy way to express "release all owned resources", the actual change I'm being nudged towards is: express ONLY resource ownership with a new type. There, you can use deinit.

    This is #RAII from C++, but in Swift.

  11. [Перевод] Линус Торвальдс: Критика C++ — Комплексный анализ

    Линус Торвальдс, создатель (и великодушный диктатор) Linux, всегда с особой критикой относился к C++, объясняя почему он отвергает его в разработке ядра Linux. Но он не просто резко высказывается против использования C++, а приводит ряд аргументов, которые мы с вами сегодня и рассмотрим.

    habr.com/ru/companies/otus/art

    #c++ #linux #Линус_Торвальдс #ядро_Linux #исключения_в_c++ #RAII #управление_памятью #ооп #абстракции_в_программировании

  12. RAII 2.0: RAII как архитектурный инструмент в C++

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

    habr.com/ru/articles/901092/

    #С++ #RAII #Жизненный_цикл #Подписки #Транзакции #Безопасность_кода #управление_ресурсами #паттерны #Логический_контракт

  13. RAII 2.0: RAII как архитектурный инструмент в C++

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

    habr.com/ru/articles/901092/

    #С++ #RAII #Жизненный_цикл #Подписки #Транзакции #Безопасность_кода #управление_ресурсами #паттерны #Логический_контракт

  14. RAII 2.0: RAII как архитектурный инструмент в C++

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

    habr.com/ru/articles/901092/

    #С++ #RAII #Жизненный_цикл #Подписки #Транзакции #Безопасность_кода #управление_ресурсами #паттерны #Логический_контракт

  15. Man, I wish Rust had the 'defer' keyword 😞
    Wait...

    🦀 **scopeguard**: A Rust library for a convenient RAII scope guard.

    🌀 Has a defer! macro.

    🔥 Runs a closure on scope exit, even if a panic occurs.

    ⭐ GitHub: github.com/bluss/scopeguard

  16. Man, I wish Rust had the 'defer' keyword 😞
    Wait...

    🦀 **scopeguard**: A Rust library for a convenient RAII scope guard.

    🌀 Has a defer! macro.

    🔥 Runs a closure on scope exit, even if a panic occurs.

    ⭐ GitHub: github.com/bluss/scopeguard

    #rustlang #library #defer #scope #raii #guard #programming #pattern #opensource

  17. Having worked a few weeks now with that uses __attribute__ (cleanup) , I am disappointed to say that it's an insignificant improvement.

    Why?

    Because you need to remember to annotate every variable, and sometimes cleanup is not what you want, leading to double-free.
    At least the freeing is declared next to the variable, so that's nice.

    But this still sucks compared to imposed on the type, where you don't need to remember.

  18. Having worked a few weeks now with #C #code that uses __attribute__ (cleanup) , I am disappointed to say that it's an insignificant improvement.

    Why?

    Because you need to remember to annotate every variable, and sometimes cleanup is not what you want, leading to double-free.
    At least the freeing is declared next to the variable, so that's nice.

    But this still sucks compared to #RAII imposed on the type, where you don't need to remember.

    #programming #coding #memory #safety

  19. Resource acquisition is initialization.

    Her blir det liv.

    #raii #raii

  20. Blogged: Use Scope Guards to Prevent Resource Leaks

    Modern #C++ has many neat #RAII-based solutions for managing resources. However, every now and then one needs to manually make sure that some code is run when a resource is not needed anymore. One great solution to this problem is a #ScopeGuard. I've surprisingly rarely seen them used in practice!

    lukas-barth.net/blog/scope-gua

    #cpp #cplusplus

    (Note: Replies to this post will be visible as comments on the blog.)

  21. Blogged: Use Scope Guards to Prevent Resource Leaks

    Modern #C++ has many neat #RAII-based solutions for managing resources. However, every now and then one needs to manually make sure that some code is run when a resource is not needed anymore. One great solution to this problem is a #ScopeGuard. I've surprisingly rarely seen them used in practice!

    lukas-barth.net/blog/scope-gua

    #cpp #cplusplus

    (Note: Replies to this post will be visible as comments on the blog.)

  22. @jaredwhite Yeah I am wondering if it would make more sense to have a separate community protocol for initialization.

    I'm very strongly of the opinion that you should never be able to get a reference to an uninitialized object (I think this is sometimes called #RAII?) Unfortunately that ship sailed for web components a long time ago. Constructors are worthless in this context too (and terrible per blog.dwac.dev/posts/ctor/). So maybe a protocol around initialization would help, whether that is or isn't `defer-hydration`.

  23. @jaredwhite Yeah I am wondering if it would make more sense to have a separate community protocol for initialization.

    I'm very strongly of the opinion that you should never be able to get a reference to an uninitialized object (I think this is sometimes called ?) Unfortunately that ship sailed for web components a long time ago. Constructors are worthless in this context too (and terrible per blog.dwac.dev/posts/ctor/). So maybe a protocol around initialization would help, whether that is or isn't `defer-hydration`.

  24. @jhx You asked for it, so I'll answer it:

    Imho, C++ design is broken from the very beginning. It wanted to provide #OOP language constructs, still maintaining full #C compatibility (which already failed many years ago, cause the languages took different roads).

    It combines #exceptions (IMHO generally a bad idea) with explicit resource management (an *awful* idea, forcing you to use #RAII which will in turn mandate creation of purely "technical" classes, just to manage resources).

    It wanted #generics, but that's impossible without breaking C compatibility, so it came up with #templates, actually a #preprocessor on steroids.

    Overloading also doesn't fit into the simple C library ABI (where #linker symbols are named just like the function), so it came up with "name mangling" ... which is especially horrific because it is *not* standardized.

    Ah well, I could go on 😂

  25. @jhx You asked for it, so I'll answer it:

    Imho, C++ design is broken from the very beginning. It wanted to provide language constructs, still maintaining full compatibility (which already failed many years ago, cause the languages took different roads).

    It combines (IMHO generally a bad idea) with explicit resource management (an *awful* idea, forcing you to use which will in turn mandate creation of purely "technical" classes, just to manage resources).

    It wanted , but that's impossible without breaking C compatibility, so it came up with , actually a on steroids.

    Overloading also doesn't fit into the simple C library ABI (where symbols are named just like the function), so it came up with "name mangling" ... which is especially horrific because it is *not* standardized.

    Ah well, I could go on 😂

  26. As much as we love #C, we've always felt the lack of a convenient #RAII feature in the language. Yet, many compilers allow to implement such feature with relatively little effort.

    So, @micia thought to share such implementation, and our point of view on the subject, in a article.

    We’ll be glad to hear your feedback and suggestions before we publish it on our website.

    #CProgramming #Programming #software

    codeberg.org/1414codeforge/art

  27. Il #C ci piace, ma sentiamo spesso la mancanza di un meccanismo di #RAII nel linguaggio. Per fortuna, molti compilatori consentono di implementarne uno con relativamente poco sforzo.

    Perciò il buon @micia ha pensato di buttare giù un articolo per mostrare come farlo e spiegare il nostro punto di vista.

    Qualcuno abbastanza volenteroso da condividere commenti e dirci se abbiamo sbagliato nulla, prima di pubblicarlo sul nostro sito?

    #CProgramming #Programming

    codeberg.org/1414codeforge/art