रस्ट प्रोग्रामिङ भाषा 1.40 रिलीज

प्रकाशित प्रणाली प्रोग्रामिङ भाषा रिलीज रस्ट १, मोजिला परियोजना द्वारा स्थापित। भाषा मेमोरी सुरक्षामा केन्द्रित छ, स्वचालित मेमोरी व्यवस्थापन प्रदान गर्दछ, र फोहोर सङ्कलन र प्रयोग नगरी उच्च कार्य समानान्तर प्राप्त गर्न उपकरणहरू प्रदान गर्दछ। runtime.

रस्टको स्वचालित मेमोरी व्यवस्थापनले विकासकर्तालाई पोइन्टर हेरफेरबाट मुक्त गर्दछ र निम्न-स्तर मेमोरी हेरफेरबाट उत्पन्न हुने समस्याहरूबाट बचाउँछ, जस्तै-मुक्त मेमोरी पहुँच, नल पोइन्टर डिरेरेन्सेस, बफर ओभररन्स, र यस्तै। पुस्तकालयहरू वितरण गर्न, संयोजन सुनिश्चित गर्न र परियोजनाद्वारा निर्भरताहरू व्यवस्थापन गर्न प्याकेज प्रबन्धकको विकास भइरहेको छ। कार्गो, तपाईंलाई एक क्लिकमा कार्यक्रमको लागि आवश्यक पुस्तकालयहरू प्राप्त गर्न अनुमति दिँदै। एक भण्डार पुस्तकालयहरू होस्ट गर्न समर्थित छ crates.io.

मुख्य नवाचारहरू:

  • Добавлена возможность пометки структур (struct) и перечислений (enum c блоком Variant) при помощи атрибута «#[non_exhaustive]«, который यसलाई अनुमति दिन्छ в дальнейшем добавлять новые поля и варианты в объявленные структуры и перечисления. Например, разработчики модулей, имеющих структуры с публично объявленными полями, могут использовать «#[non_exhaustive]» для пометки структур, в которых в будущем возможно добавление новых полей. До сих пор в подобной ситуации разработчик вынужден был выбирать между приватным объявлением полей и привязкой к неизменному списку полей. Новый атрибут снимает данное ограничение и позволяет в будущем добавлять новые поля без риска нарушения работы ранее собранного внешнего кода. В crate-пакетах при сопоставлениях вариантов в секции «match» требуется явное определение маски «_ => {…}», охватывающей возможные будущие поля, иначе при добавлении новых полей будет выводиться ошибка.
  • थपियो возможность вызова процедурного макроса mac!() в контексте типа. Например, теперь можно писать «type Foo = expand_to_type!(bar);», если «expand_to_type» процедурный макрос.
  • В блоках «extern { … }» थपियो возможность использования процедурных и атрибутных макросов, в том числе макросов «bang!()», например:

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

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

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

  • В макросах कार्यान्वयन गरियो возможность генерации элементов «macro_rules!». Генерация «macro_rules!» возможна как в напоминающих функции макросах («mac!()»), так и в макросах в форме атрибутов («#[mac]»).
  • В элементе сопоставления $m:meta थपियो поддержка произвольных значений перечислений токенов («[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 разработчики получили возможность окончательно हटाउनु от старого 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
    कार्यान्वयन गरियो кэширование на диске предупреждений компилятора. В команду «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. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования и публикации официальных сборок.

स्रोत: opennet.ru

एक टिप्पणी थप्न