Rust 1.37 პროგრამირების ენის გამოშვება

გამოქვეყნდა სისტემის პროგრამირების ენის გამოშვება ჟანგი 1.37, დაარსებული Mozilla პროექტის მიერ. ენა ფოკუსირებულია მეხსიერების უსაფრთხოებაზე, უზრუნველყოფს მეხსიერების ავტომატურ მენეჯმენტს და უზრუნველყოფს საშუალებებს, რათა მივაღწიოთ დავალებების მაღალი პარალელურობის მიღწევას ნაგვის შემგროვებლის ან მუშაობის დროის გარეშე.

Rust-ის მეხსიერების ავტომატური მენეჯმენტი ათავისუფლებს დეველოპერს მაჩვენებლის მანიპულაციისგან და იცავს მეხსიერების დაბალი დონის მანიპულირების შედეგად წარმოქმნილი პრობლემებისგან, როგორიცაა მეხსიერების თავისუფალი წვდომა, ნულური მაჩვენებლის გაუქმება, ბუფერის გადაჭარბება და სხვა მსგავსი. შემუშავებულია პაკეტის მენეჯერი ბიბლიოთეკების გასავრცელებლად, აწყობის უზრუნველსაყოფად და პროექტის მიერ დამოკიდებულებების მართვისთვის. Charge, რაც საშუალებას გაძლევთ მიიღოთ პროგრამისთვის საჭირო ბიბლიოთეკები ერთი დაწკაპუნებით. საცავი მხარდაჭერილია მასპინძელი ბიბლიოთეკებისთვის crates.io.

მთავარი ინოვაციები:

  • В компиляторе rustc უზრუნველყოფილი поддержка оптимизации на основе результатов профилирования кода (PGO, Profile-Guided Optimization),
    позволяющих генерировать более оптимальный код на основе анализа статистики, накопленной в процессе выполнения программы. Для генерации профиля предусмотрен флаг «-C profile-generate», а для использования профиля при сборке — «-C profile-use» (вначале программа собирается с первым флагом, обкатывается и после создания профиля собирается повторно со вторым флагом);

  • При выполнении команды «cargo run», которую удобно использовать для быстрого тестирования консольных приложений, добавлена возможность автоматического выбора исполняемого файла для запуска, в случае если в пакете присутствует несколько исполняемых файлов. Выполняемый по умолчанию файл определяется через директиву default-run в секции [package] с параметрами пакета, которая позволяет обойтись без явного указания имени файла через флаг «—bin» при каждом запуске «cargo run»;
  • В пакетный менеджер Cargo интегрирована команда «cargo vendor», ранее поставляемая в виде отдельного пакета. Команда позволяет организовать работу с локальной копией зависимостей — после выполнения «cargo vendor» все исходные тексты зависимостей проекта загружаются с crates.io в локальный каталог, который затем можно использовать для работы без обращения к crates.io (после выполнения команды показывается подсказка по изменению конфигурации для использования каталога при сборках). Указанная возможность уже применяется для организации поставки компилятора rustc с упаковкой всех зависимостей в один архив с релизом;
  • Появилась возможность создания ссылок на варианты перечислений (enum), используя псевдонимы типа (например, в теле функции «fn increment_or_zero(x: ByteOption) можно указывать «ByteOption::None => 0»), конструкции вычисления типов (‹MyType‹..››::вариант => N) или обращения Self (в блоках c &self можно указать «Self::Quarter => 25»);
  • Добавлена возможность создания неименованных констант в макросах. Вместо определения имени элемента в «const» теперь можно использовать символ «_» для динамического выбора неповторяющегося идентификатора, позволяющего избежать конфликта имён при повторном вызове макроса;
  • Добавлена возможность использования атрибута «#[repr(align(N))» с перечислениями (enums), используя синтаксис, аналогичный определению структуры AlignN‹T› с выравниванием и последующему использованию AlignN‹MyEnum›;
  • В разряд стабильных переведена новая порция API, в том числе стабилизированы методы BufReader::buffer, BufWriter::buffer,
    Cell::from_mut,
    Cell::as_slice_of_cells,
    DoubleEndedIterator::nth_back,
    Option::xor,
    {i,u}{8,16,64,128,size}::reverse_bits, Wrapping::reverse_bits и
    slice::copy_within.

გარდა ამისა, შეიძლება აღინიშნოს ტესტირების დაწყება პროექტი Async-std, предлагающего асинхронный вариант стандартной библиотеки Rust (порт библиотеки std, в котором все интерфейсы предложены в версии с async и готовы для использования с синтаксисом async/await).

წყარო: opennet.ru

ახალი კომენტარის დამატება