m12-lifecycle
Use when designing resource lifecycles. Keywords: RAII, Drop, resource lifecycle, connection pool, lazy initialization, connection pool design, resource cleanup patterns, cleanup, scope, OnceCell, Lazy, once_cell, OnceLock, transaction, session management, when is Drop called,
Installation
Pick a client and clone the repository into its skills directory.
Installation
About this skill
Use when designing resource lifecycles. Keywords: RAII, Drop, resource lifecycle, connection pool, lazy initialization, connection pool design, resource cleanup patterns, cleanup, scope, OnceCell, Lazy, once_cell, OnceLock, transaction, session management, when is Drop called, cleanup on error, guard pattern, scope guard, 资源生命周期, 连接池, 惰性初始化, 资源清理, RAII 模式
How to use
Zainstaluj skill m12-lifecycle z repozytorium actionbook/rust-skills. Skill nie jest bezpośrednio wywoływalny — służy jako materiał referencyjny do projektowania.
Zanim zaczniesz implementować zarządzanie zasobami, odpowiedz sobie na trzy kluczowe pytania: Jaki jest koszt zasobu (tani czy drogi)? Jaki jest jego zakres (lokalna funkcja, żądanie HTTP, cała aplikacja)? Co powinno się stać przy błędzie?
Wybierz odpowiedni wzorzec na podstawie odpowiedzi: dla taniej inicjalizacji użyj zwykłej alokacji na stosie, dla drogich zasobów rozważ pulę (r2d2, deadpool) lub leniwą inicjalizację (OnceLock, LazyLock), dla transakcji zaprojektuj custom struct z implementacją Drop.
Zaimplementuj trait Drop dla zasobów wymagających czyszczenia. Trait Drop gwarantuje, że kod czyszczący wykona się automatycznie, nawet gdy dojdzie do błędu — to jest sedno wzorca RAII.
Dla zasobów wymagających dostępu w ograniczonym zakresie (np. blokady mutex) użyj guard pattern — struktura guard automatycznie zwolni zasób, gdy wyjdzie poza zakres.
Jeśli czyszczenie może się nie powieść, nie polegaj wyłącznie na Drop — zamiast tego zaimplementuj jawną metodę close() zwracającą Result, którą możesz obsłużyć w kodzie.