Wydanie języka programowania Rust 2024 (1.85)

dou.eu 1 miesiąc temu

Opublikowano wersję języka programowania ogólnego przeznaczenia Rust 1.85, który początkowo rozwijany był przez Mozilla, a w tej chwili jest wspierany przez niezależną organizację non-profit Rust Foundation. Oprócz standardowego numeru wersji 1.85, wydanie oznaczone zostało jako Rust 2024, co oznacza stabilizację zmian wprowadzonych przez ostatnie trzy lata. Edycja "Rust 2024" będzie podstawą dla dalszego rozwoju funkcjonalności w ciągu najbliższych trzech lat, podobnie jak wersja Rust 2021 stanowiła fundament dla rozwoju języka przez ostatnie lata.

Aby zachować zgodność, deweloperzy mogą używać w swoich programach etykiet "2015", "2018", "2021" i "2024", które przypisują programy do określonych stanów języka, odpowiadających wybranym edycjom Rust. Edycje zostały wprowadzone w celu oddzielenia niekompatybilnych zmian, a konfiguracja tych edycji odbywa się w metadanych paczek cargo dzięki pola "edition" w sekcji "[package]".

Na przykład, edycja "2021" obejmuje funkcjonalność stabilizowaną na koniec 2021 roku, a edycja "2024" dodatkowo wprowadza zmiany, które mogą łamać zgodność, ale zostały zatwierdzone do wdrożenia w przyszłości. Oprócz samego języka, edycje uwzględniają również stan narzędzi i dokumentacji. Do automatycznej adaptacji kodu do nowej edycji języka można użyć komendy "cargo fix".

Główne niekompatybilności w Rust 2024

  • Zmieniono zachowanie przy przechwytywaniu parametrów w "impl Trait", jeżeli nie używa się nowej składni "use<..>", która definiuje informacje o ukrytych typach. W Rust 2024, jeżeli "use<..>" nie jest użyte, wszystkie parametry w zasięgu są niejawnie przechwytywane. Aby ograniczyć przechwytywanie parametrów, należy używać "use<..>", np. "impl Trait + use<'x, T>" wskazuje, iż w ukrytym typie dozwolone jest używanie tylko parametrów "x" i "T".
  • Zmieniono zakres widoczności zmiennych tymczasowych w wyrażeniu "if let". Zmienna tymczasowa w blokach $expr będzie teraz usuwana przed przejściem do bloku "else", a nie po jego wykonaniu.
  • Zmieniono zakres widoczności zmiennych w ostatnich wyrażeniach, które kończą działanie funkcji, bloku lub zamknięcia. Takie zmienne są teraz resetowane do zmiennych lokalnych.
  • Niektóre niejednoznaczne zastosowania mut, ref, ref mut, & i &mut w wzorcach zostały zabronione, np. "let [x, mut y] = &[(), ()];" należy zamienić na "let &[ref x, mut y] = &[(), ()];".
  • Bloki "extern" muszą być oznaczone słowem kluczowym "unsafe".
  • Atrybuty "export_name", "link_section" i "no_mangle" muszą być oznaczone jako "unsafe".
  • Dodano ostrzeżenie "unsafe_op_in_unsafe_fn", które sprawdza użycie bloków "unsafe {}" w funkcjach typu unsafe.
  • Zostało zabronione użycie odniesień do elementów zdefiniowanych jako "static mut".

Nowości w Rust 1.85

  • Dodano obsługę asynchronicznych zamknięć, definiowanych w postaci "async || {}", które działają na podobnej zasadzie jak asynchroniczne wywołania funkcji (async fn).
  • Dodano atrybut "#[diagnostic::do_not_recommend]", który sprawia, iż kompilator nie wyświetla zaimplementowanych typów w komunikatach diagnostycznych.
  • Umożliwiono użycie typów FromIterator i Extend dla krotek zawierających do 12 elementów.

Ważne zmiany i stabilizacje w API

  • Zostały stabilizowane metody i implementacje typów, takie jak BuildHasherDefault::new, ptr::fn_addr_eq, io::ErrorKind::QuotaExceeded oraz std::task::Waker::noop.

Rust: Język skupiony na bezpieczeństwie pamięci

Rust jest językiem programowania, który kładzie duży nacisk na bezpieczeństwo pracy z pamięcią. Został zaprojektowany tak, aby zapewnić wysoki poziom paralelizmu bez konieczności korzystania ze zbieracza śmieci czy runtime. Dzięki mechanizmom sprawdzania poprawności podczas kompilacji, takim jak ścisłe zarządzanie referencjami, śledzenie własności obiektów oraz ocena poprawności dostępu do pamięci, Rust eliminuje wiele problemów związanych z manipulowaniem wskaźnikami i operacjami na niskim poziomie, takich jak dostęp do pamięci po jej zwolnieniu czy dereferencja wskaźników null.

Podsumowanie

Wydanie Rust 2024 (1.85) to istotny krok w rozwoju języka, wprowadzający zmiany w zakresie kompatybilności oraz nowe funkcjonalności, które mają na celu uproszczenie i poprawę wydajności pracy z pamięcią, przy jednoczesnym zachowaniu bezpieczeństwa i efektywności. Programiści mogą teraz korzystać z nowych narzędzi, takich jak asynchroniczne zamknięcia oraz ulepszenia w dokumentacji i narzędziach do zarządzania zależnościami.

Idź do oryginalnego materiału