Анонсирована очередная версия языка программирования Rust 1.10, разрабатываемого Mozilla совместно с сообществом.Улучшения компилятора: [ Добавлен ](
https://github.com/rust-lang/rust/pull/33553 ) новый тип крейта cdylib, предназначенный для экспорта C API. Основные отличия от dylib: отсутствие метаданных;разрешено LTO; все библиотеки должны быть статически слинкованы;экспортируются лишь те символы, которые помечены как extern. Например: pub fn foo() {} // не экспортируется #[no_mangle] pub extern fn bar() {} // экспортируетсяДля сравнения: «hello world» cdylib занимает 7.2КБ, а dylib - 2.4МБ. Добавлена поддержка платформ i586-unknown-linux-gnu, i686-unknown-linux-musl, и armv7-linux-androideabi; [ Снижено ](
https://github.com/rust-lang/rust/pull/33425 ) потребление памяти на ~100МБ при проверке типов; [ Ускорена ](
https://github.com/rust-lang/rust/pull/33138 ) проверка T: [ Sized ](
https://doc.rust-lang.org/std/marker/trait.Sized.html ) на 15%; [ Улучшена ](
https://github.com/rust-lang/rust/pull/31414 ) кодогенерация при #[derive(Copy, Clone)]. Изменения в стандартной библиотеке: [ Повышена ](
https://github.com/rust-lang/rust/pull/33318 ) скорость создания [ HashMap ](
https://doc.rust-lang.org/stable/std/collections/struct.HashMap.html ) путем кеширования случайных ключей, используемых для инициализации [ RandomState ](
https://doc.rust-lang.org/stable/std/collections/hash_map/struct.RandomState.html ) . [ В случае неудачной инициализации ](
https://github.com/rust-lang/rust/pull/33086 ) при использовании системного вызова getrandom в линуксе случайные значения будут браться из /dev/urandom; [ iter::Chain::find ](
https://doc.rust-lang.org/stable/std/iter/struct.Chain.html ) [ ускорен ](
https://github.com/rust-lang/rust/pull/33289 ) в 2 раза; Методы [ f32.abs_sub() ](
https://doc.rust-lang.org/nightly/std/primitive.f32.html#method.abs_sub ) и [ f64.abs_sub() ](
https://doc.rust-lang.org/nightly/std/primitive.f64.html#method.abs_sub ) помечены как deprecated; Реализовано: [ Default ](
https://doc.rust-lang.org/nightly/std/default/trait.Default.html ) для [ cell::UnsafeCell ](
https://doc.rust-lang.org/nightly/std/cell/struct.UnsafeCell.html ) , [ fmt::Error ](
https://doc.rust-lang.org/nightly/std/fmt/struct.Error.html ) , [ sync::Condvar ](
https://doc.rust-lang.org/nightly/std/sync/struct.Condvar.html ) , [ sync::Mutex ](
https://doc.rust-lang.org/nightly/std/sync/struct.Mutex.html ) , [ sync::RwLock ](
https://doc.rust-lang.org/nightly/std/sync/struct.RwLock.html ) , [ ffi::CString ](
https://doc.rust-lang.org/nightly/std/ffi/struct.CString.html ) , [ ffi::CStr ](
https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html ) , [ path::Path ](
https://doc.rust-lang.org/nightly/std/path/struct.Path.html ) ; [ Clone ](
https://doc.rust-lang.org/nightly/std/clone/trait.Clone.html ) для [ collections::binary_heap::IntoIter ](
https://doc.rust-lang.org/nightly/std/collections/binary_heap/struct.IntoIter.html ) ; [ Display ](
https://doc.rust-lang.org/nightly/std/fmt/trait.Display.html ) , [ Hash ](
https://doc.rust-lang.org/nightly/std/hash/trait.Hash.html ) и [ ops::Neg ](
https://doc.rust-lang.org/nightly/std/ops/trait.Neg.html ) для [ num::Wrapping ](
https://doc.rust-lang.org/nightly/std/num/struct.Wrapping.html ) ; [ From ](
https://doc.rust-lang.org/nightly/std/convert/trait.From.html ) [ Into ](
https://doc.rust-lang.org/nightly/std/vec/struct.Vec.html"Vec/aT> и <a href="
https://doc.rust-lang.org/nightly/std/convert/trait.Into.html ) [ VecDeque ](
https://doc.rust-lang.org/nightly/std/vec/struct.Vec.html"Vec/aT> для <a href="
https://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html ) ; [ cmp::Ord ](
https://doc.rust-lang.org/nightly/std/cmp/trait.Ord.html ) и [ cmp::PartialOrd ](
https://doc.rust-lang.org/nightly/std/cmp/trait.PartialOrd.html ) для [ cell::Cell ](
https://doc.rust-lang.org/nightly/std/cell/struct.Cell.html ) и [ cell::RefCell ](
https://doc.rust-lang.org/nightly/std/cell/struct.RefCell.html ) . Стабилизировано: [ unix-сокеты ](
https://doc.rust-lang.org/std/os/unix/net/index.html ) ; [ ::binary_search_by_key ](
https://doc.rust-lang.org/beta/std/primitive.slice.html#method.binary_search_by_key ) ; [ fs::Metadata::modified ](
https://doc.rust-lang.org/std/fs/struct.Metadata.html#method.modified ) , [ fs::Metadata::accessed ](
https://doc.rust-lang.org/std/fs/struct.Metadata.html#method.accessed ) , [ fs::Metadata::created ](
https://doc.rust-lang.org/std/fs/struct.Metadata.html#method.created ) ; [ panic::set_hook ](
https://doc.rust-lang.org/std/panic/fn.set_hook.html ) , [ panic::take_hook ](
https://doc.rust-lang.org/std/panic/fn.take_hook.html ) , [ panic::PanicInfo ](
https://doc.rust-lang.org/std/panic/struct.PanicInfo.html ) , [ panic::PanicInfo::payload ](
https://doc.rust-lang.org/std/panic/struct.PanicInfo.html#method.payload ) , [ panic::PanicInfo::location ](
https://doc.rust-lang.org/std/panic/struct.PanicInfo.html#method.location ) , [ panic::Location ](
https://doc.rust-lang.org/std/panic/struct.Location.html ) , [ panic::Location::file ](
https://doc.rust-lang.org/std/panic/struct.Location.html#method.file ) , [ panic::Location::line ](
https://doc.rust-lang.org/std/panic/struct.Location.html#method.line ) ; [ ffi::CStr::from_bytes_with_nul ](
https://doc.rust-lang.org/std/ffi/struct.CStr.html#method.from_bytes_with_nul ) , [ ffi::CStr::from_bytes_with_nul_unchecked ](
https://doc.rust-lang.org/std/ffi/struct.CStr.html#method.from_bytes_with_nul_unchecked ) ; [ collections::BtreeMap::values_mut ](
https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.values_mut ) , [ collections::HashMap::values_mut ](
https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.values_mut ) . Добавлены конструкторы для weak-указателей у [ Rc ](
https://doc.rust-lang.org/nightly/std/rc/struct.Weak.html#method.new ) и [ Arc ](
https://doc.rust-lang.org/nightly/std/sync/struct.Weak.html ) ; На unix-платформах вместо [ intrinsics::abort ](
https://doc.rust-lang.org/nightly/std/intrinsics/fn.abort.html ) [ используется ](
https://github.com/rust-lang/rust/pull/31457 ) [ libc::abort ](
https://doc.rust-lang.org/nightly/libc/fn.abort.html ) . Breaking changes! [ AtomicBool ](
https://doc.rust-lang.org/nightly/std/sync/atomic/struct.AtomicBool.html ) теперь преобразуется в bool, а не isize. Демонстрация: use std::sync::atomic::AtomicBool; use std::mem::transmute; fn main() { let foo: bool = unsafe { transmute(AtomicBool::new(true)) }; } На старых версиях компилятора будет ошибка; [ time::Duration::new ](
https://doc.rust-lang.org/nightly/std/time/struct.Duration.html#method.new ) теперь [ будет паниковать ](
https://github.com/rust-lang/rust/pull/33072 ) при переполнении; [ String::truncate ](
https://doc.rust-lang.org/nightly/std/string/struct.String.html#method.truncate ) теперь [ будет паниковать ](
https://github.com/rust-lang/rust/pull/32977 ) чуть меньше; [ Небольшое изменение ](
https://github.com/rust-lang/rust/pull/32945 ) поведения макросов на этапе их парсинга: из :ty и :path следует :block; [ Исправлен ](
https://github.com/rust-lang/rust/pull/32923 ) баг, связанный с гигиеной макросов. Следующий код будет валидным в устаревших версиях компилятора: fn main() { let x = true; macro_rules! foo { () => { let x = 0; macro_rules! bar { () => {x} } let _: bool = bar!(); //^ `bar!()` использует первый `x` (который bool), //| а должен использовать второй `x` (который i32). }} foo! {}; } [ Переименование платформ ](
https://github.com/rust-lang/rust/pull/33403 ) :arm-unknown-linux-gnueabi => arm-unknown-linux-gnu;arm-unknown-linux-gnueabihf => arm-unknown-linux-gnu;armv7-unknown-linux-gnueabihf => armv7-unknown-linux-gnu. Другими словами, изменены target_env, применяемые в [ conditional compilation ](
https://doc.rust-lang.org/reference.html#conditional-compilation ) . Изменения в менеджере зависимостей Cargo: Добавлен флаг --force, -f для подкоманды cargo install, предназначенной для загрузки исходных текстов из [ crates.io ](
https://crates.io/ ) , их компиляции и установки в каталог ~/.cargo/bin. Это нововведение теперь позволит писать: cargo install FOO -f вместо: cargo uninstall FOO cargo install FOO Однако всё еще невозможно узнать, а требуется ли обновление вообще? Диагностические сообщения теперь отправляются в stderr, а не в stdout; С помощью флагов cargo doc --bin и cargo doc --lib можно выбрать: генерировать html документацию для проекта-приложения src/main.rs или проекта-библиотеки src/lib.rs; В конфигурационном файле Cargo.toml, который можно встретить в корневом каталоге каждого проекта, теперь можно указать, каким образом макрос [ panic!() ](
https://doc.rust-lang.org/stable/std/macro.panic!.html ) будет завершать приложение: unwind (по умолчанию) или abort; Добавлен флаг cargo --explain FOO, поведение которого идентично rustc --explain FOO: показывает документацию по [ номеру ошибки ](
https://doc.rust-lang.org/error-index.html ) ; В черный список имен крейтов [ добавлены ](
https://github.com/rust-lang/cargo/pull/2707 ) [ ключевые слова раста ](
https://doc.rust-lang.org/grammar.html#keywords ) , такие как fn, unsafe, let и прочее.
Ссылка:
http://www.linux.org.ru/news/mozilla/12725798