Pakiety, Kapsuły (Crate) i Moduły
W miarę pisania dużych programów organizacja kodu staje się coraz ważniejsza.Grupując powiązane funkcjonalności i oddzielając kod o różnych cechach,wyjaśnisz, gdzie znaleźć kod implementujący określoną funkcję i gdzieudać się, aby zmienić sposób działania funkcji.
Napisane do tej pory programy znajdowały się w jednym module w jednym pliku. W miarę rozrastania się projektu, kod powinien być dzielony na wiele modułów, a następnie na wiele plików. Pakiet może zawierać wiele kapsuł binarnych i opcjonalnie jedną kapsułę biblioteczną. W miarę rozrastania się pakietu, można wyodrębnić jego części do osobnych kapsuł, które stają się zewnętrznymi zależnościami. Ten rozdział obejmuje wszystkie te techniki. Dla bardzo dużych projektów składających się z zestawu powiązanych ze sobą pakietów, które ewoluują razem, Cargo oferuje obszary robocze, które omówimy w sekcji „Obszary robocze Cargo” w Rozdziale 14.
Omówimy również hermetyzację szczegółów implementacji, co pozwala na ponowne wykorzystanie kodu na wyższym poziomie: po zaimplementowaniu operacji, inny kod może wywołać twój kod za pośrednictwem jego publicznego interfejsu, bez konieczności znajomości działania implementacji. Sposób, w jaki piszesz kod, określa, które części są publiczne do użytku przez inny kod, a które są prywatnymi szczegółami implementacji, które zastrzegasz sobie prawo do zmiany. Jest to kolejny sposób na ograniczenie ilości szczegółów, które musisz mieć w głowie.
Powiązaną koncepcją jest zasięg: zagnieżdżony kontekst, w którym pisany jest kod, ma zestaw nazw, które są zdefiniowane jako „w zasięgu”. Podczas czytania, pisania i kompilowania kodu, programiści i kompilatory muszą wiedzieć, czy dana nazwa w danym miejscu odnosi się do zmiennej, funkcji, struktury, typu wyliczeniowego, modułu, stałej lub innego elementu i co ten element oznacza. Możesz tworzyć zasięgi i zmieniać, które nazwy są w zasięgu lub poza nim. Nie możesz mieć dwóch elementów o tej samej nazwie w tym samym zasięgu; dostępne są narzędzia do rozwiązywania konfliktów nazw.
Rust ma szereg funkcji, które pozwalają zarządzać organizacją kodu, w tym to, które szczegóły są ujawniane, które są prywatne i jakie nazwy znajdują się w każdym zasięgu w twoich programach. Te funkcje, czasami zbiorczo nazywane systemem modułów, obejmują:
- Pakiety: Funkcja Cargo, która umożliwia budowanie, testowanie i udostępnianie kapsuł (crates)
- Kapsuły (Crates): Drzewo modułów, które produkuje bibliotekę lub plik wykonywalny
- Moduły i
use: Pozwalają kontrolować organizację, zasięg i prywatność ścieżek - Ścieżki: Sposób nazywania elementu, takiego jak struktura, funkcja lub moduł
W tym rozdziale omówimy wszystkie te funkcje, dowiemy się, jak ze sobą współdziałają i wyjaśnimy, jak używać ich do zarządzania zasięgiem. Na koniec powinieneś mieć solidne zrozumienie systemu modułów i być w stanie pracować z zasięgami jak profesjonalista!