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)

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

Так же как и любой другой не c/c++ язык. Сколько python/ruby/perl/node либ доступно в репе вашего дистра, из общего количества?

Вот в генту 20к пакетов в репе. У rust 10к пакетов в crates. Улавливаете проблему? Про другие языки вообще молчу.

RazrFalcon ★★★★★
()

Rust полагается на link.exe для линковки, который вы можете получить из “Microsoft Visual C++ Build Tools.”

а про информационную безопасность вы не задумываетесь? вы ведь фактически привязываете пользователей использовать «черный ящик», в котором только M$ знает, что находится помимо линкера и тулзов %)

niXman ★★★
()

Так за семь лет ничего и не было написано на этом недоязычке... Пациент вероятно и не был живым никогда. Сейчас представляет интерес исключительно для историков.

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

Спасибо за помощь.

Если не переводишь что-то, то хоть оставляй на английском. Тем более что workspace.members - это название поля в Cargo.

И откуда мне знать про workspace.members? В записи в блоге как термин оно не выделено. Алсо, специалисты по Расту проигнорировали этот выпуск, я его принес сюда и в несильно урезанном виде, чтобы была возможность обсудить. Ну хотя бы говном текст новости открыто не называете, как тот граммар-наци. Хотя я подозреваю, что половина ее и не прочитали.

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

Так за семь лет ничего и не было написано на этом недоязычке...

Если вы не знаете чего-то, то это не значит, что этого нет.

Пациент вероятно и не был живым никогда.

Тююю, да даже в РФ уже вакансии проскакивают

AntonyRF ★★★★
()

Rust-сообщество включает в себя хоть сколько-нибудь нелинуксоидов? Или подобное притягивает подобное, и rust-сообщество исключительно маргинально?

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

Если вы не знаете чего-то, то это не значит, что этого нет.

Угу - ведь никто больше не знает, например ты даже пример не привел.

Тююю, да даже в РФ уже вакансии проскакивают

И много? Есть недостойные люди, любят посмеяться над дурочками, для подобных целей и используют rust-писателей.

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

Спросите на винфаке.

Зачем? Линуксоиды так обеспокоены войной за мировое господство, что у них существуют исключительно две операционные системы?

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

Вообще Rust один из очень немногих языков, которые собираются под вендой нативными средствами, а не mingw-отрыжками. Я думаю, даже одно это показывает, что к венде Rust относится довольно серьёзно.

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

Вообще Rust один из очень немногих языков, которые собираются под вендой нативными средствами

Это буквально прекрасно. Но почему за 7(!) лет коммерческими писетелями на rust'е написано было ничего? И да, насчет маргинальности сообщества, имелась в виду не только и не сколько винда.

Если подробнее, в сложных областях знания мы склонны доверять мнению авторитетов. Что говорят разработчики OpenBSD по поводу rust'а? Это значительно важнее бла-бла-бла-винда.

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

Еще один адепт «семи лет» три года назад на нем нельзя было ничего написать, потому что каждую неделю ломали совместимость, и приходилось заново переписывать все хелловорды.

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

Еще один адепт «семи лет» три года назад на нем нельзя было ничего написать, потому что каждую неделю ломали совместимость, и приходилось заново переписывать все хелловорды.

Еще никто так плохо как ты не отзывался о разработчиках этого недоязычка.

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

вы ведь фактически привязываете пользователей использовать «черный ящик», в котором только M$ знает, что находится помимо линкера и тулзов %)

Так это речь про виндосборку. В винде в этом плане есть вещи куда более опасные, чем link.exe.

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

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

pftBest ★★★★
()
Последнее исправление: pftBest (всего исправлений: 1)

Ну вот зачем Shaman007 одобрил новость? Я раньше вечера никак не могу ее исправить, а теперь она все в том же недоработанном виде. Давай ее назад в неподтвержденные.

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

это да, но не мой случай.

для меня, как для дистрибьютора бинарных сборок важна «чистота» дистрибутива(потому и собираю используя MinGW-W64 + Wine). а что произойдет потом, после установки на венду - меня слабо интересует, ибо некуй.

niXman ★★★
()

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

Просветите знакомые с си - как там их различают(какой элемент текущий)? Неужели каждый раз велосипедят с переизобретением enum'ов?

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

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

Сравним с «C». Собственно говоря, этим можно закончить. Это как сравнивать гения с ммм... мягко скажем с субъектом со способностями ниже среднего. Намного ниже.

anonymous
()
Ответ на: комментарий от NextGenenration
struct {
  enum {
    TYPE1,
    TYPE2,
    TYPE3
  } tag;
  union {
    type1 variant1;
    type2 variant2;
    type3 variant3;
  } data;
}

Да каждый раз велосипедят. Как в общем-то все делается в С.

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

За 2 года. Версия 1.0 вышла в мае 2015 года.

А с версией 2.0 растовики тоже будут вопить «не считается»?

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

А с версией 2.0 растовики тоже будут вопить «не считается»?

В Rust используется стандартное сементическое версионирование, в котором чётко сказано, что до версии 1.0.0 программа не обязана обеспечивать обратную совместимость, что и происходило, язык менялся каждую неделю.

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

Угу - ведь никто больше не знает, например ты даже пример не привел.

Попрошу всяким там анонимусам на «ты» ко мне не обращаться =) Да море их примеров, самые жирные из них КМК:

  • Redox - операционная система написанная на Rust
  • Servo - Браузерный движок написанный на Rust, но не только лишь на нём =)
  • Cargo - Это сайт, утилита, сборище крайтев, короче, то место где Rust обрастает библиотеками и позволяет этим удобно делиться.

Почему на нём нет таких проектов как Linux или LibreOffice!? Может потому что этим проектам более(около) 20 лет? А Rust версии 1.0 появился только в 2015-м

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

программа не обязана обеспечивать обратную совместимость

Неудивительно. И ожидаемо от маргиналов. Так что там про версию 2.0? Опять произойдет восстановление девственной плевы?

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

Вообще Rust один из очень немногих языков, которые собираются под вендой нативными средствами, а не mingw-отрыжками. Я думаю, даже одно это показывает, что к венде Rust относится довольно серьёзно.

а оно надо ?

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

Servo - Браузерный движок написанный на Rust, но не только лишь на нём =)

Хе-хе-хе. Знатный фейл вышел с миллионом потоков и полной неработоспособностью.

Cargo - Это сайт, утилита, сборище крайтев, короче, то место где Rust обрастает библиотеками и позволяет этим удобно делиться.

Хи-хи-хи. Этот 48 по счету пакетник не сильно проигрывает своим собратьям, написанным на питухоне?

Redox - операционная система написанная на Rust

Ха-ха-ха. Можно узнать число установок?

anonymous
()

Так завезут когда-то зависимые типы уже? Или и дальше будут копировать фичи с алгола68?

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

Хе-хе-хе. Знатный фейл вышел с миллионом потоков и полной неработоспособностью.

На столько, что решили запилить свой язык который будет лучше Си и Си++, собственно от сюда Rust и получился. Потому что разработчики Servo опплевались от имеющихся инструментов.

Хи-хи-хи. Этот 48 по счету пакетник не сильно проигрывает своим собратьям, написанным на питухоне?

Как я могу спорить с вами, если вы даже не понимаете что это такое и зачем нужно?

Ха-ха-ха. Можно узнать число установок?

Чувак первый релиз 1 декабря 2016-го, я уверен что ты диплом дольше делал чем они GUI ОС накатали.

Пока я могу сделать только вывод о том, что со мной разговаривает какой-то школотрон или недостудент

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

Выбор между «распространять 1 бинарь» vs «распространять 1 бинарь и 100500 либ» очевиден.

Да здравствуют минусы статической линковки.

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

Не различают, это не enum, используют их совсем не так. Различать не нужно.

Я не писал на си на таком уровне, вот и спрашиваю. А тут мне говорят то что я уже знаю.

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

Кстати, а сколько поломок обратной совместимости было после 1.0? Или весь софт, что был написан под 1.0 спокойно собирается под 1.1-1.19?

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

Во первых я против операторных скобок вида begin...end. Во-вторых речь шла не о них, сам-то почитай, о чём я писал.

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

Да каждый раз велосипедят. Как в общем-то все делается в С.

Вот уж точно мазохисты.

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

Неудивительно. И ожидаемо от маргиналов. Так что там про версию 2.0? Опять произойдет восстановление девственной плевы?

Да что же ананимусы такие тупые стали, сказали же до версии 1.0 совместимости нет, а после есть. Код с 1.0 будет компилироваться в 2.0

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

Последние версии в основном отличились добавлением сахара к соли.

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

Насколько я знаю, это костыль для тайпкастов.

Что им мешало вообще void * использовать?

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

И как потоки помогут преодолеть закон Амдала? Опять возврат к компьютерам пятого поколения?

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

На столько, что решили запилить свой язык который будет лучше Си и Си++, собственно от сюда Rust и получился. Потому что разработчики Servo опплевались от имеющихся инструментов.

Увы и ах, никто пока не может оценить это поделие непризнанных гениев.

Этот 48 по счету пакетник не сильно проигрывает своим собратьям, написанным на питухоне?

Как я могу спорить с вами, если вы даже не понимаете что это такое и зачем нужно?

Т.е. cargo действительно не нужен? Да и зачем, все равно все пользуются пакетниками операционной системы.

На столько от сюда опплевались

Пока я могу сделать только вывод о том, что со мной разговаривает какой-то школотрон или недостудент

Как скажешь.)))

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

Да что же ананимусы такие тупые стали, сказали же до версии 1.0 совместимости нет, а после есть. Код с 1.0 будет компилироваться в 2.0

«Солгавши раз, кто тебе поверит?»

И нет, не будет. Это противоречит духу сообщества rust. Правда, вероятнее всего, не выйдет по причине того, что помрет rust до версии 2.0.

anonymous
()

На расте пишет наш регион и все кто с нами. А кто не с нами, и кто мало на расте писал - тот под нами.

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

На расте пишет наш регион и все кто с нами. А кто не с нами, и кто мало на расте писал - тот под нами.

Я же говорил про смешных зверьков-маргиналов.))

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