Wydanie języka programowania Rust 1.37

opublikowany wydanie języka programowania systemu Rdza 1.37, założona przez projekt Mozilla. Język koncentruje się na bezpieczeństwie pamięci, zapewnia automatyczne zarządzanie pamięcią i zapewnia środki do osiągnięcia dużej równoległości zadań bez użycia modułu zbierającego elementy bezużyteczne lub środowiska wykonawczego.

Automatyczne zarządzanie pamięcią Rusta uwalnia programistę od manipulacji wskaźnikami i chroni przed problemami wynikającymi z manipulacji pamięcią na niskim poziomie, takimi jak dostęp do pamięci po zwolnieniu, wyłuskiwanie wskaźników zerowych, przepełnienie bufora i tym podobne. Trwają prace nad menedżerem pakietów, który umożliwi dystrybucję bibliotek, zapewnienie montażu i zarządzanie zależnościami w ramach projektu. Ładunek, co pozwala jednym kliknięciem pobrać biblioteki potrzebne do programu. Repozytorium jest obsługiwane w celu hostowania bibliotek skrzynie.io.

Głównym innowacje:

  • W kompilatorze rustc zabezpieczone wsparcie optymalizacji w oparciu o wyniki profilowania kodu (PGO, Profile-Guided Optimization),
    co pozwala wygenerować bardziej optymalny kod na podstawie analizy statystyk zgromadzonych podczas wykonywania programu. Aby wygenerować profil, dostępna jest flaga „-C profile-generate”, a aby użyć profilu podczas montażu - „-C profile-use” (początkowo program jest montowany z pierwszą flagą, biegnie i po utworzeniu profil jest ponownie montowany z drugą flagą);

  • Podczas wykonywania polecenia „cargo run”, które jest wygodne w użyciu do szybkiego testowania aplikacji konsolowych, dodano możliwość automatycznego wyboru pliku wykonywalnego do uruchomienia, jeśli w pakiecie znajduje się kilka plików wykonywalnych. Domyślny plik do wykonania jest określany za pomocą dyrektywy default-run w sekcji [package] z parametrami pakietu, co pozwala uniknąć jawnego określania nazwy pliku za pomocą flagi „-bin” przy każdym uruchomieniu „cargo run”;
  • Polecenie „sprzedawca ładunku”, poprzednio dostarczane jako oddzielny pakiet. Komenda umożliwia organizację pracy z lokalną kopią zależności - po wykonaniu „cargo Venture” wszystkie kody źródłowe zależności projektu pobierane są z crates.io do lokalnego katalogu, który można następnie wykorzystać do pracy bez dostępu do skrzynek. io (po wykonaniu polecenia wyświetla się podpowiedź dotycząca zmiany konfiguracji w celu wykorzystania katalogu do kompilacji). Ta funkcja została już wykorzystana do zorganizowania dostarczania kompilatora rustc z pakietem wszystkich zależności w jednym archiwum wraz z wydaniem;
  • Możliwe jest teraz tworzenie linków do opcji wyliczeniowych za pomocą aliasów typów (na przykład w treści funkcji „fn inkrement_or_zero(x: ByteOption) można określić „ByteOption::None => 0”), wpisać konstrukcje obliczeniowe (‹ MyType‹.. ››::option => N) lub Self accesses (w blokach c &self możesz określić „Self::Quarter => 25”);
  • Dodano możliwość tworzenia nienazwanych stałych w makrach. Zamiast definiować nazwę elementu w „const”, możesz teraz użyć znaku „_”, aby dynamicznie wybrać niepowtarzalny identyfikator, unikając konfliktów nazw podczas ponownego wywoływania makra;
  • Dodano możliwość użycia atrybutu „#[repr(align(N))” z wyliczeniami przy użyciu składni podobnej do definiowania struktury AlignN‹T› z wyrównaniem, a następnie przy użyciu AlignN‹MyEnum›;
  • Nowa część interfejsu API została przeniesiona do kategorii stabilnej, w tym BufReader::buffer, BufWriter::buffer i
    Komórka::from_mut,
    Komórka::as_slice_of_cells,
    DoubleEndedIterator::nth_back,
    Opcja::xor
    {i,u}{8,16,64,128,size}::reverse_bits, Zawijanie::reverse_bits i
    plasterek::kopia_wewnątrz.

Dodatkowo można to zauważyć rozpoczęcie testów projekt Standard asynchroniczny, która oferuje asynchroniczny wariant standardowej biblioteki Rust (port biblioteki std, w której wszystkie interfejsy są oferowane w wersji asynchronicznej i są gotowe do użycia ze składnią async/await).

Źródło: opennet.ru

Dodaj komentarz