إصدار لغة البرمجة Rust 1.37

نشرت إصدار لغة برمجة النظام الصدأ 1.37أسسها مشروع موزيلا. تركز اللغة على إدارة الذاكرة الآمنة ، وتوفر إدارة تلقائية للذاكرة ، وتوفر الوسائل لتحقيق توازي وظيفي عالٍ مع تجنب استخدام أداة تجميع البيانات المهملة ووقت التشغيل.

تحمي إدارة الذاكرة التلقائية في Rust المطور من معالجة المؤشرات وتحمي من المشاكل الناشئة عن معالجة الذاكرة منخفضة المستوى ، مثل الوصول إلى منطقة الذاكرة بعد تحريرها ، وإلغاء الإشارة إلى المؤشرات الفارغة ، وتجاوزات المخزن المؤقت ، وما إلى ذلك. لتوزيع المكتبات ، وضمان التجميع وإدارة التبعيات ، يطور المشروع مدير الحزم حمولة، والذي يسمح لك بالحصول على المكتبات التي تحتاجها للبرنامج بنقرة واحدة. يتم دعم المستودع للمكتبات المضيفة الصناديق.

رئيسي الابتكارات:

  • В компиляторе 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

إضافة تعليق