Выпуск мовы праграмавання Rust 1.37

Апублікаваны рэліз мовы сістэмнага праграмавання Іржа 1.37, заснаванага праектам Mozilla. Мова сфакусаваная на бяспечнай працы з памяццю, забяспечвае аўтаматычнае кіраванне памяццю і дае сродкі для дасягнення высокага паралелізму выканання заданняў, пры гэтым абыходзячыся без выкарыстання зборшчыка смецця і runtime.

Аўтаматычнае кіраванне памяццю ў Rust пазбаўляе распрацоўніка ад маніпулявання паказальнікамі і абараняе ад праблем, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў, вынахад за межы буфера і да т.п. Для распаўсюджвання бібліятэк, забеспячэння зборкі і кіравання залежнасцямі праектам развіваецца пакетны менеджэр грузавы, які дазваляе атрымаць патрэбныя для праграмы бібліятэкі ў адзін клік. Для размяшчэння бібліятэк падтрымліваецца рэпазітар 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

Дадаць каментар