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)

Ответ на: комментарий от ckotinko

Вызывай компилятор напрямую с мейкфайла, в чем проблема то? Что тебе сделала плохого система сборки раста?

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

Тем, что каждый бинарь будет мегабайт

Не будет

места на SSD

Что, не хватило денег на полтерабайта?

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

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

Поставь инструмент на полочку и любуйся его красотой. А для нас... Суббота для человека, а не человек для субботы.

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

В конечном счёте в системе окажутся дубликаты практически всех библиотек. Продублированы они будут n раз, где n = количеству пакетников в системе.

Конкретно cargo плох тем, что всё линкует статически, а значит куски кода (явно пересекающиеся) библиотеки B окажутся зашиты в программах A1, A2, ..., An. И если язык с таким инструментарием станет основным в линуксе, то это будет линуксокапец.

Расскажи, как они умудрились засунуть llvm 174MB в 457,6 кБ, включая отладочные символы и прочее?

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

Принципиальной разницы нет.

Смузи-тян, почитай стандарты и увидешь разницу

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

Но ты же ну будешь доволен движком 20-ти летней давности на rust, ведь не так ли?

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

Не вижу тылгунера в треде

Кто из твоих вооброжаемых друзей врагов пропал?

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

Смузи-тян, почитай стандарты и увидешь разницу

Читал. И? Разница колиственная. И да, про Hello и Pocket - ни слова.

Но ты же ну будешь доволен движком 20-ти летней давности на rust, ведь не так ли?

Еще бы. Так ведь не доживу, рано пока еще создавать продукты на rust'е, ему всего-то 7 лет. Зато крутой и многообещающий - младший брат вейланда.

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

Лаконичность Rust'a очевидна.

Лаконичность Brainnfuck'а очевидна.

Притом в вашем примере, возможные типы для x,y определены как int, float, double. Возможно ли в Вашем примере использовать любой тип для x,y?

Пример, как Вы догадываетесь, гипотетический. OneOf - операция на множестве из int, float, double. Точно так же там могло быть Any (Псевдоним для OneOf(TypeSet), где TypeSet - все типы данных). Вот только я ведь для того и написал OneOf, чтобы указать на косяк Вашего примера: как вообще можно позволить x и y быть любого типа? Какого такого нафиг любого? Строкой тоже может быть? Строкой длиной в терабайт может быть? А зачем? Исходя из разумного подхода «запрещено всё, что явно не разрешено» - и я предложил разумный вариант: при любой попытке присвоить x'у комплексное или рациональное значение, а то и, не дай БГ вообще строку, - получите исключение времени компиляции.

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

Угу, например у khtml интерфейс никогда не вставал раком.

Открой в нём к примеру ютуб. Сможешь смотреть в качестве 1080p, а смузи-тян?

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

Сколько скриптов было в 2000 году, а смузи-тян?

Вот ни имеет никакого значения. Пользовательский интерфейс должен быть вынесен в отдельный поток в 80% случаях.

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

И она решена — AUR в арче

4.2 во-первых aur опасен - нет никаких гарантий того что кто-то не подсунет в нагрузку. во-вторых aur может быть заброшен. в-третьих даже там будут не все пакеты.

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

а между тем регулярные падения мозиллы искаробки видны уже сейчас

Так не роняй

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

Открой в нём к примеру ютуб. Сможешь смотреть в качестве 1080p, а смузи-тян?

Не валяй дурака. Разумеется, смогу. Увы и ах - только через анальный флеш. К чему был этот вопрос?

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

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

Смузи-тян, читай новости, всё увидишь

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

Его уже давно не видно в тредах про Rust, очнулся.

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

Почему никто не обсуждает идеология языка? Дали на самом деле крутые вещи: строгую и статическую типизацию, функциональное программирование и при этом рантайм на уровне С. А мартышки обсуждают настолько поверхностные вещи как угловые скобки и систему сборки. Есть здесь проффесионалы, или только форумные троли? Какая разница что на нем написанно и кто его юзает, если инструмент действительно уникальный и крутой.

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

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

Смузи-тян, читай новости, всё увидишь

Хотя бы ссылку дал на хорошие новости, не я один был бы рад.

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

себя не похвалишь - никто не похвалит

Их хоть кто-то хвалит. А не вопят в поисках огнетушителя, от того что их программа сломалась

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

На rust пока только парсер mp4-файлов - строчек 150 на С. (Да, rust пока себя никак не проявил, хе-хе-хе).

Пруфов не будет? =) Просто я сейчас смотрю страницу Servo на гитхабе и у меня стойкое ощущение, что Вы мне втираете какую-то дичь. Про mp4 есть только в servo/tests/unit/net/mime_classifier.rs. В Canvas не нашёл ни строчки Си-шного кода. А тут сотни файлов исходного кода с описанием DOM и все без Си-шного кода и все без unsafe. Кажется, Вы мне наврали.

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

Распаковывать не умеешь, смузи-тян?

tar -xf. Потом gcc понадобится ( а у меня clang) и прочий иной гимор. Да и зачем? Не будет мозилла развивать больше servo, больше не прикольно. Творческий креатив некуда приложить.

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

так вообще-то и делается

Ага, портянка на ~1000 строк чтоб собрать проект максимум из 100 файлов

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

такое ощущение, что сейчас очень неподумав это написал

Взаимно

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

Парсинг css - в последнюю очередь.

А что в первую, сенсей?

Тип документа и его метаданные. Не придуривайся. ты не на гироскутере.

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

Читал. И? Разница колиственная.

Разницу между 1 000 строк и 100 000 улавливаешь?

Еще бы

А что тогда споришь, смузи-тян?

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

Так же и раст для тех, кто понимает что это и для чего. А если ты туп как животное, то свали с этой темы на пхп.

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

Вот ни имеет никакого значения

имеет

Пользовательский интерфейс должен быть вынесен в отдельный поток в 80% случаях.

Где криокамеру брал?

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

Пруфов не будет?

Свят-свят-свят. Я говорил пока исключительно про gecko, чтобы на rust смотреть, нужно еще лет 5 подождать.

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

Увы и ах - только через анальный флеш

Как быть если на каком-то сайте не окажется флеша? Ах да, в 2000 году интернеты были медленные, так что всё равно не смотрели онлайн

К чему был этот вопрос?

К уровню поддержки html5 например

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

Так же и раст для тех, кто понимает что это и для чего. А если ты туп как животное, то свали с этой темы на пхп.

Тебе осталось бросить камень в монитор и гордо удалиться. Слабо? Ты ведь меня накажешь своим презрением и отсутствием твоего такого драгоценного внимания.)))

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

Хотя бы ссылку дал на хорошие новости, не я один был бы рад

Не так давно говорили об очередном изменении фокса в плане многопоточности. Если твой khtml может в гугль,то и сам найдёшь

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

Не придуривайся. ты не на гироскутере.

Аааа!!!111 Ты телепат!!!111

Тип документа и его метаданные

Подожди немного. Методанные мультимедиа уже обрабатывают

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

Как быть если на каком-то сайте не окажется флеша?

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

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

Пример, как Вы догадываетесь, гипотетический.

Так же как и мой, но мой точно компилируется.

как вообще можно позволить x и y быть любого типа?

Мужик, как мы сравнивать должны? Если ты не можешь элементарный пример без выепонов повторить?

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

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

Я не могу закрыть один вопрос и открыть другой?

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

Смузи-тян, в голове тоже смузи? Там УЖЕ бинарник.

И его линуксовые зависимости я буду сам угадывать?

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

Я не могу закрыть один вопрос и открыть другой?

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

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