HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p>Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.</p>
1 <p>Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.</p>
2 <p>Спустя месяц после выхода Rust 1.58.1 разработчики выпускают новую версию - 1.59.0. В ней они поработали над производительностью и новой функциональностью. Рассмотрим главные изменения.</p>
2 <p>Спустя месяц после выхода Rust 1.58.1 разработчики выпускают новую версию - 1.59.0. В ней они поработали над производительностью и новой функциональностью. Рассмотрим главные изменения.</p>
3 <p><strong>Встроенный ассемблер.</strong>Rust теперь поддерживает ассемблер прямо в коде. Это позволит многим приложениям контролировать их выполнение на низком уровне или получать доступ к специализированным машинным инструкциям.</p>
3 <p><strong>Встроенный ассемблер.</strong>Rust теперь поддерживает ассемблер прямо в коде. Это позволит многим приложениям контролировать их выполнение на низком уровне или получать доступ к специализированным машинным инструкциям.</p>
4 <p>Например, код для систем на архитектуре x86-64 может выглядеть так:</p>
4 <p>Например, код для систем на архитектуре x86-64 может выглядеть так:</p>
5 use std::arch::asm; // Умножаем х на 6 с помощью сдвигов и сложений let mut x: u64 = 4; unsafe { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);<p>Пока Rust поддерживает ассемблер для следующих архитектур:</p>
5 use std::arch::asm; // Умножаем х на 6 с помощью сдвигов и сложений let mut x: u64 = 4; unsafe { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);<p>Пока Rust поддерживает ассемблер для следующих архитектур:</p>
6 <ul><li>x86 и x86-64</li>
6 <ul><li>x86 и x86-64</li>
7 <li>ARM</li>
7 <li>ARM</li>
8 <li>AArch64</li>
8 <li>AArch64</li>
9 <li>RISC-V</li>
9 <li>RISC-V</li>
10 </ul><p><strong>Деструктурированное присваивание.</strong>Кортежи, срезы и шаблоны структур теперь можно использовать как левую часть присваивания. Это сделает присваивание более согласованным со связкой<strong>let</strong>. Разработчики отмечают, что деструктурирование с такими операторами, как<strong>+=</strong>, не работает.</p>
10 </ul><p><strong>Деструктурированное присваивание.</strong>Кортежи, срезы и шаблоны структур теперь можно использовать как левую часть присваивания. Это сделает присваивание более согласованным со связкой<strong>let</strong>. Разработчики отмечают, что деструктурирование с такими операторами, как<strong>+=</strong>, не работает.</p>
11 let (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 3, 4, 5], [a, b, c, d, e]);<p><strong>Константные дефолтные и чередующиеся дженерики.</strong>Теперь можно указывать дефолтные значения для констант дженерик-типов. Например, так:</p>
11 let (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 3, 4, 5], [a, b, c, d, e]);<p><strong>Константные дефолтные и чередующиеся дженерики.</strong>Теперь можно указывать дефолтные значения для констант дженерик-типов. Например, так:</p>
12 struct ArrayStorage&lt;T, const N: usize = 2&gt; { arr: [T; N], } impl&lt;T&gt; ArrayStorage&lt;T&gt; { fn new(a: T, b: T) -&gt; ArrayStorage&lt;T&gt; { ArrayStorage { arr: [a, b], } } }<p>Ранее типы параметров должны были идти перед всеми константными параметрами. Это ограничение было упрощено, чтобы позволить пользователям чередовать их.</p>
12 struct ArrayStorage&lt;T, const N: usize = 2&gt; { arr: [T; N], } impl&lt;T&gt; ArrayStorage&lt;T&gt; { fn new(a: T, b: T) -&gt; ArrayStorage&lt;T&gt; { ArrayStorage { arr: [a, b], } } }<p>Ранее типы параметров должны были идти перед всеми константными параметрами. Это ограничение было упрощено, чтобы позволить пользователям чередовать их.</p>
13 fn cartesian_product&lt; T, const N: usize, U, const M: usize, V, F &gt;(a: [T; N], b: [U; M], f: F) -&gt; [[V; N]; M] where F: FnMut(&amp;T, &amp;U) -&gt; V { // ... }<p><strong>Что ещё?</strong>Разработчики<a>предупредили</a>о будущих сообщениях о несовместимости,<a>сделали</a>бинарные файлы меньше,<a>отключили</a>инкрементальную компиляцию по умолчанию и <a>стабилизировали</a>некоторые API.</p>
13 fn cartesian_product&lt; T, const N: usize, U, const M: usize, V, F &gt;(a: [T; N], b: [U; M], f: F) -&gt; [[V; N]; M] where F: FnMut(&amp;T, &amp;U) -&gt; V { // ... }<p><strong>Что ещё?</strong>Разработчики<a>предупредили</a>о будущих сообщениях о несовместимости,<a>сделали</a>бинарные файлы меньше,<a>отключили</a>инкрементальную компиляцию по умолчанию и <a>стабилизировали</a>некоторые API.</p>
14 <p>Подробнее изучить все обновления можно на <a>странице блога Rust</a>.</p>
14 <p>Подробнее изучить все обновления можно на <a>странице блога Rust</a>.</p>
15 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
15 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>