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

प्रणाली प्रोग्रामिङ भाषा Rust 1.57 को रिलीज, Mozilla परियोजना द्वारा स्थापित, तर अब स्वतन्त्र गैर-लाभकारी संस्था रस्ट फाउन्डेसन को तत्वावधान अन्तर्गत विकसित, प्रकाशित गरिएको छ। भाषाले मेमोरी सुरक्षामा फोकस गर्छ, स्वचालित मेमोरी व्यवस्थापन प्रदान गर्दछ, र फोहोर सङ्कलन वा रनटाइम (रनटाइमलाई मानक पुस्तकालयको आधारभूत प्रारम्भ र मर्मतसम्भारमा घटाइन्छ) प्रयोग नगरी उच्च कार्य समानान्तरता प्राप्त गर्ने माध्यमहरू प्रदान गर्दछ।

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

मुख्य आविष्कारहरू:

  • Стабилизировано использование макроса «panic!» в контекстах, создаваемых при компиляции, таких как объявления «const fn». Кроме того, помимо использования «panic!» в const-объявлениях разрешено использование макроса «assert!» и некоторых других API стандартной библиотеки. Стабилизация пока не охватывает всю инфраструктуру форматирования, поэтому в текущем виде макрос «panic!» может использоваться только со статическими строками (panic!(«…»)) или с одним интерполированным значением «&str» при подстановке (panic!(«{}», a)), которое должно ограничиваться подстановкой «{}» без спецификаторов форматирования и других типажей. В будущем применимость макросов в константных контекстах будет расширена, но стабилизированных возможностей уже достаточно для выполнения assert-проверок на этапе компиляции: const _: () = assert!(std::mem::size_of::<u64>() == 8); const _: () = assert!(std::mem::size_of::<u8>() == 1);
  • В пакетном менеджере Cargo разрешено использование профилей с произвольными именами, не ограниченными «dev», «release», «test» и «bench». Например, для включения оптимизации на этапе связывания (LTO) только при формирования финальных сборок продукта можно в Cargo.toml создать профиль «production» и добавить в него флаг «lto = true». При этом при определении собственных профилей обязательно требуется указать существующий профиль для наследования из него настроек по умолчанию. В примере ниже создаётся профиль «production», который дополняет профиль «release» включением флага «lto = true». Сам профиль активируется при вызове cargo с опцией «—profile production», а сборочные артефакты будут размещены в каталоге «target/production». [profile.production] inherits = «release» lto = true
  • Стабилизировано использование try_reserve для типов Vec, String, HashMap, HashSet и VecDeque, что позволяет заранее резервировать место для определённого числа элементов заданного типа для того, чтобы снизить частоту выполнения операций выделения памяти и избежать аварийного завершения в процессе работы из-за нехватки памяти.
  • Разрешено указание макросов с фигурными скобками в выражениях подобных «m!{ .. }.method()» и «m!{ .. }?».
  • Оптимизировано выполнение функций File::read_to_end и read_to_string.
  • युनिकोड विशिष्टताको लागि समर्थन संस्करण 14.0 मा अद्यावधिक गरिएको छ।
  • Расширено число функций, помеченных «#[must_use]» для вывода предупреждения в случае игнорирования возвращаемого значения, что помогает выявить ошибки, вызванные предположением, что функция изменит значения, а не вернёт новое значение.
  • Добавлен экспериментальный бэкенд для генерации кода с использованием libgccjit.
  • एपीआई को एक नयाँ भाग स्थिर को श्रेणी मा सारियो, विधिहरु र विशेषताहरु को कार्यान्वयन सहित स्थिर गरिएको छ:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • collections::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Command::get_program
    • Command::get_args
    • Command::get_envs
    • Command::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Признак «const», определяющий возможность использования в любом контексте вместо констант, применён в функции hint::unreachable_unchecked.
  • Реализован третий уровень поддержки для платформ armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi и armv7a-kmc-solid_asp3-eabihf. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.

स्रोत: opennet.ru

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