LINUX.ORG.RU

Rust 1.19

 


3

8

Команда Rust рада объявить о последней версии Rust, 1.19.0. Rust это системный язык программирования, сфокусированный на безопасности, скорости и конкурентном выполнении.

Если у вас установлена предыдущая версия Rust, то получите Rust 1.19, выполнив команду:

$ rustup update stable

В противном случае, вы можете получить rustup с соответствующей страницы на нашем вебсайте и проверить детальные примечания к выпуску для 1.19.0 на Github.

Что нового в 1.19.0 stable

Rust 1.19.0 получил некоторые долгожданные возможности, но для начала примечание для наших пользователей Windows. На Windows Rust полагается на link.exe для линковки, который вы можете получить из “Microsoft Visual C++ Build Tools.” С последним выпуском Visual Studio 2017, структура каталогов для этих инструментов изменилась. Таким образом, чтобы использовать Rust, вы должны придерживаться инструментов 2015 или использовать обходной путь (такой как запуск vcvars.bat). В 1.19.0 rustc теперь знает, как найти инструменты 2017, и они работают без использования обходных путей.

А теперь к новым возможностям! Rust 1.19.0 это первый выпуск, который поддерживает объединения (unions):

union MyUnion {
    f1: u32,
    f2: f32,
}

Объединения это вид перечислений (enums), но в отличие от последних они «непомечены» («untagged»). Перечисления имеют «пометку», которая хранит информацию, какой вариант является правильным в рантайме; объединения игнорируют эту пометку.

Так как мы можем интерпретировать данные, хранящиеся в объединении, используя неправильный вариант, и Rust не может проверить это для нас, это означает, что чтение или запись поля объединения является unsafe:

let u = MyUnion { f1: 1 };

unsafe { u.f1 = 5 };

let value = unsafe { u.f1 };

Сопоставление с образцом также работает:

fn f(u: MyUnion) {
    unsafe {
        match u {
            MyUnion { f1: 10 } => { println!("ten"); }
            MyUnion { f2 } => { println!("{}", f2); }
        }
    }
}

Когда полезны объединения? Одним из основных случаев использования является интероперабельность с Си. C API могут использовать объединения, и во многих областях часто это делают, и с появлением объединений в Rust написание оберток для API подобных библиотек становится значительно проще. Дополнительно, из этого же RFC:

Нативный механизм объединений также упрощает Rust реализации компактных или кэш-эффективных структур, опираясь на представление значения как объединений размерности машинного слова, используя младшие значимые биты выровненных указателей, чтобы различать случаи.

Эту возможность уже давно ждали, и еще больше улучшений на подходе. Сейчас объединения могут только содержать Copy типы и не могут реализовывать Drop. Мы ожидаем снятия этих ограничений в будущем.

Также циклы loop теперь имеют возможность возвращать значение при выходе с break:

// old code
let x;

loop {
    x = 7;
    break;
}

// new code
let x = loop { break 7; };

Rust традиционно позиционируется как «язык, ориентированный на выражения», в котором большинство вещей являются выражениями, вычисляющимися в значения, а не директивами. Раньше loop странно выделялся, так как был директивой.

Что насчет других форм циклов? Здесь еще не всё ясно. Посмотрите этот RFC для ознакомления с некоторыми дискуссиями вокруг открытых вопросов.

Замыкания, которые не захватывают окружение, теперь могут быть приведены к указателю на функцию:

let f: fn(i32) -> i32 = |x| x + 1;


Теперь мы создаем тарболы, сжатые xz, и предоставляем их по умолчанию, уменьшая расход сетевого траффика и тем самым ускоряя процесс загрузки. Тарболы, сжатые gzip, также доступны в случае, например, если вы не можете использовать xz по некоторым соображениям.

Стабилизация стандартной библиотеки

Наибольшей новой библиотечной возможностью являются макросы eprint! и eprintln!. Они работают так же, как и print! и println!, но пишут в стандартный поток ошибок, а не в стандартный поток вывода.

Другие нововведения:

.

И некоторые недавно стабилизированные API:

Смотрите детальные примечания к выпуску для получения более подробной информации.

Cargo

Cargo в основном получил небольшие, но значимые улучшения в данном выпуске. Так, Cargo больше не проверяет локальный рабочий каталог для индекса crates.io. Это должно обеспечить меньший размер файла для реестра и улучшить время клонирования, особенно на машинах Windows.

Другие улучшения:

Смотрите детальные примечания к выпуску для получения более подробной информации.

>>> Подробности

★★★★★

Проверено: Shaman007 ()
Последнее исправление: Virtuos86 (всего исправлений: 3)
Ответ на: комментарий от anonymous

Ну не так быстро: я же вата, ретроград и мракобес (да-да-да все эти слова - эмоционально окрашенное слово «консерватор»).

Ну, когда криокамера протечёт и флеш НАКОНЕЦ-ТО удалят, приходи, поговорим

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

В ванильной убунте работает

Это чрезвычайно любопытно, но у меня фряха и работоспособность программ интересует в ней. Ага, заодно и проверить пряморукость авторов rust'а и servo.

anonymous
()
Ответ на: комментарий от anonymous

но у меня фряха и работоспособность программ интересует в ней

ну так делай

Ага, заодно и проверить пряморукость авторов rust'а и servo.

Для этого rust надо знать и код уметь читать, а ты собирался чуть выше rust собирать с помощью clang

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

Ну, когда криокамера протечёт и флеш НАКОНЕЦ-ТО удалят, приходи, поговорим

Все, это не в силах человечьих...

Лапочка такой забавный. Он должен наградить себя в антикафе дополнительной порцией пасты с митболами.

anonymous
()
Ответ на: комментарий от AntonyRF

Короче, что гадать. Я тут свой говно скрипт переписываю с баша на пёрл, мне не нравится, что он работает 10 минут. Что там у вас есть? Нужны хеши, построчное чтение файлов, регулярки. Если ругулярок нет - пойдут функции поиска/замены подстрок.

crutch_master ★★★★★
()
Ответ на: комментарий от NextGenenration

Твои слова подтверждают мои. Как это приятно

А что это меняет? Почти весь код - вызовы сишных функций и передача их результата друг другу. Кстати, на расте можно сделать что-нибудь, чтобы не просрать в js указатель, который передаёт libtcod?

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от NextGenenration

Для этого rust надо знать и код уметь читать, а ты собирался чуть выше rust собирать с помощью clang

Хочешь сказать - все написано на русте: без си и плюсов?

anonymous
()
Ответ на: комментарий от crutch_master

Нужны хеши

https://doc.rust-lang.org/std/hash/index.html

построчное чтение файлов

https://doc.rust-lang.org/std/io/

регулярки

https://doc.rust-lang.org/regex/regex/

Что там у вас есть?

Если чего-то не хватает, то пиши в строке поиска что надо и выдаст либу - http://doc.crates.io/

А вообще, лучше начать от сюда http://rurust.github.io/rust_book_ru/

AntonyRF ★★★★
()
Ответ на: комментарий от NextGenenration

Ага, «я буду нести чушь а вы мне несите пруфы а то не перестану». Это мы у тебя должны спрашивать пруфы к твоим заявлениям.

Можешь начать с прочтения `cargo install --help`

pftBest ★★★★
()
Ответ на: комментарий от anonymous

Скорее всего Вы правы. Но думаю мастеру костылей посыл понятен и так =)

AntonyRF ★★★★
()
Ответ на: комментарий от pftBest

Можешь начать с прочтения `cargo install --help`

Конечно, cargo может ставить бинарники, но не стоит забывать, что основное назначение в этом случае - это ставить всякие вспомогательные растоспецифичные тулзы вроде rustfmt/racer и тому подобное, а вовсе не софт для конечного пользователя. И это довольно удобно.

anonymous
()
Ответ на: комментарий от anonymous

вовсе не софт для конечного пользователя

Да, затруднительно ставить то, чего не существует.

bread
()
Ответ на: комментарий от anonymous

В том числе и софт для пользователя, в том случае если его нет в репозитории дистрибутива.

pftBest ★★★★
()
Ответ на: комментарий от AntonyRF

Я бы сказал, что это чуть ли не единственный язык кроме С++ на котором пишут сейчас браузерный движок

Это какой? Ведь с серво-то завязали. Сдох младенчик, даже из утробы не вышел.

anonymous
()
Ответ на: комментарий от anonymous

Какая разница что на нем написанно и кто его юзает, если инструмент действительно уникальный и крутой.

Инструмент-то реально крутой. Но спроектировали его люди со специфическим мировоззрением. И то что всякие ruby и т.д. не вышли за пределы своей ниши из-за своей системы пакетирования не приняли во внимание.

anonymous
()
Ответ на: комментарий от Deleted

ты даун? тебя спрашивали про ютуб через khtml, а не через флешь.

Лапочка, что не так? И да не ругайся, твой бородатый друг будет сердиться, и вы не посмотрите очередной сериальчик, держась за ручки.

anonymous
()
Ответ на: комментарий от pftBest

Не сдох никто, последний коммит был час назад. И по графикам активность только растет

Ну и ладно. Годиков через 5 поглядим.

anonymous
()
Ответ на: комментарий от Deleted

уходишь от ответа, анонимное ничтожество?

Что ты, что ты, просто преклонюсь перед величием твоего разума и духа.

anonymous
()
Ответ на: комментарий от Deleted

ютуб через khtml

А что, консерва то кажет ютуб? Ну-ка пруф давай. А то вдруг выяснится, что поделие ни html5, ни флешь не умеет. Конфуз то какой.

bread
()
Ответ на: комментарий от crutch_master

Почти весь код - вызовы сишных функций и передача их результата друг другу

смотря что за код

чтобы не просрать в js указатель

Какие ещё указатели в js?

NextGenenration ★★
()
Ответ на: комментарий от anonymous

Это такой новый способ троллинга - постоянно повторять одни и те же обосанные факты?

Кроме того, чтобы обоссать, servo и сжечь надо было? Ты чудовище.))

anonymous
()
Ответ на: комментарий от anonymous

Кроме того, чтобы обоссать, servo и сжечь надо было? Ты чудовище.))

Тебе лучше не стоит заниматься троллингом. И юмором тоже. :-(

anonymous
()
Ответ на: комментарий от NextGenenration

открой и посмотри

Хипста, ты сегодня плохой, негодный. Даже твои коллеги по цеху подметили.

anonymous
()
Ответ на: комментарий от anonymous

У тебя просто бомбит из-за забытых пакетных менеджеров дистрибутивов. За пределами линукса о них вообще никто не слышал. Никто не хочет поддерживать пакет либы для 100500 дистрибутивов.

anonymous
()
Ответ на: комментарий от anonymous

Даже твои коллеги по цеху подметили.

которых нет, смузи-тян. В вытрезвитель!

NextGenenration ★★
()
Ответ на: комментарий от anonymous

л. Никто не хочет поддерживать пакет либы для 100500 дистрибутивов.

Не хотят. Идут туда же, куда и руби послали.

anonymous
()
Ответ на: комментарий от Deleted

Вы же тут поете, что khtml нельзя с консервой сравнивать, мол в 100500 раз все сложнее стало. А показывать мощу консервы че то стесняетесь. Ну хоть лор один смельчак открыл, уже дело.

bread
()
Ответ на: комментарий от anonymous

Идут туда же, куда и руби послали.

Лес рубить?

anonymous
()
Ответ на: комментарий от RazrFalcon

Хоронить станем когда одна функция API Qt 5 даст такой же эффект, как в 4й версии.

flyshoot
()
Ответ на: комментарий от pftBest

Садится вася и пилит все от начала до конца в закрытую на своем компе, а потом сразу выкладывает версию 1.0 на гитхаб и заявляет ее стабильной на 12 лет

Если Петя перед стартом успел опубликовать стандарт языка 1.0, то почему бы и нет

q0tw4 ★★★★
()
Ответ на: комментарий от robus

Основная масса софта работает не через эту жесть, потому, что основная масса софта написана на C/C++

И, конечно же, все либы С/C++ есть в репозиториях) Ну и это только системный уровень. Приклад - это сразу Ява, рор, питон, нода и куча всего остального со своими ПМ.

И она решена — AUR в арче и оверлеи в генте

Только а) арч и гента не используются в проде б) поддерживают их сторонние люди, а не разрабы в) они точно так же протухают, как и в любом другом дистрибьютор. Ибо разработчик не будет пушить свои наработки в 100500 линуксовых реп.

Clayman ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.