Rust programlama dili 1.40 sürümü

yayınlanan sistem programlama dili sürümü Pas 1.40Mozilla projesi tarafından kuruldu. Dil, bellek güvenliğine odaklanır, otomatik bellek yönetimi sağlar ve çöp toplayıcı kullanmadan yüksek görev paralelliği elde etmek için araçlar sağlar ve runtime.

Rust'un otomatik bellek yönetimi, geliştiriciyi işaretçi manipülasyonundan kurtarır ve boş bellek erişimleri, boş işaretçi referansları, arabellek taşmaları ve benzeri gibi düşük seviyeli bellek manipülasyonundan kaynaklanan sorunlara karşı koruma sağlar. Kütüphanelerin dağıtılması, montajın sağlanması ve bağımlılıkların projeye göre yönetilmesi için bir paket yöneticisi geliştirilmektedir. Kargo, program için gereken kütüphanelere tek tıklamayla ulaşmanızı sağlar. Kitaplıkları barındırmak için bir depo desteklenir sandıklar.io.

Ana yenilikler:

  • Добавлена возможность пометки структур (struct) и перечислений (enum c блоком Variant) при помощи атрибута «#[non_exhaustive]«, который verir в дальнейшем добавлять новые поля и варианты в объявленные структуры и перечисления. Например, разработчики модулей, имеющих структуры с публично объявленными полями, могут использовать «#[non_exhaustive]» для пометки структур, в которых в будущем возможно добавление новых полей. До сих пор в подобной ситуации разработчик вынужден был выбирать между приватным объявлением полей и привязкой к неизменному списку полей. Новый атрибут снимает данное ограничение и позволяет в будущем добавлять новые поля без риска нарушения работы ранее собранного внешнего кода. В crate-пакетах при сопоставлениях вариантов в секции «match» требуется явное определение маски «_ => {…}», охватывающей возможные будущие поля, иначе при добавлении новых полей будет выводиться ошибка.
  • Katma возможность вызова процедурного макроса mac!() в контексте типа. Например, теперь можно писать «type Foo = expand_to_type!(bar);», если «expand_to_type» процедурный макрос.
  • В блоках «extern { … }» katma возможность использования процедурных и атрибутных макросов, в том числе макросов «bang!()», например:

    macro_rules! make_item { ($name:ident) => { fn $name(); } }

    extern {
    make_item!(alpha);
    make_item!(beta);
    }

    extern «C» {
    #[my_identity_macro] fn foo();
    }

  • В макросах uygulandı возможность генерации элементов «macro_rules!». Генерация «macro_rules!» возможна как в напоминающих функции макросах («mac!()»), так и в макросах в форме атрибутов («#[mac]»).
  • В элементе сопоставления $m:meta katma поддержка произвольных значений перечислений токенов («[TOKEN_STREAM]», «{TOKEN_STREAM}» и «(TOKEN_STREAM)), например:

    macro_rules! accept_meta { ($m:meta) => {} }
    accept_meta!( my::path );
    accept_meta!( my::path = «lit» );
    accept_meta!( my::path ( a b c ) );
    accept_meta!( my::path [ a b c ] );
    accept_meta!( my::path { a b c } );

  • В режиме Rust 2015 активирован вывод ошибки для проблем, выявленных при проверке заимствования переменных (borrow checker) c использованием техники NLL (Non-Lexical Lifetimes). Ранее предупреждения были заменены на ошибки при работе в режиме Rust 2018.
    После распространения изменения и на режим Rust 2015 разработчики получили возможность окончательно kurtulmak от старого borrow checker.

    Напомним, что система проверки на основе нового механизма учёта времени жизни заимствованных переменных дала возможность выявлять некоторые проблемы, которые оставались незамеченными старым кодом проверки. Так как вывод ошибки для подобных проверок мог повлиять на совместимость с ранее работающим кодом, вместо ошибок первое время выдавались предупреждения.

  • Признак «const», определяющий возможность использования в любом контексте вместо констант, применён для функции is_power_of_two (для беззнаковых целых чисел).
  • В разряд стабильных переведена новая порция API, в том числе стабилизированы макрос todo!() и методы slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value,
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32,f64}::from_be_bytes, {f32,f64}::from_le_bytes, and {f32,f64}::from_ne_bytes.

  • В пакетном менеджере cargo
    uygulanan кэширование на диске предупреждений компилятора. В команду «cargo metadata» добавлена опция «—filter-platform» для показа в графе разрешения зависимостей только пакетов, привязанных к указанной целевой платформе. Добавлен параметр конфигурации http.ssl-version для определения допустимых версий TLS.
    Добавлена возможность публикации секции «dev-dependencies» без указания ключа «version».

  • В компиляторе rustc обеспечен третий уровень поддержки целевых платформ thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 и mips64el-unknown-linux-muslabi64. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования и публикации официальных сборок.

Kaynak: opennet.ru

Yorum ekle