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)
Ответ на: комментарий от AntonyRF

Таки сколько за 7 лет появилось новых системных либ?

Вагон и маленькая тележка. Более того скажу тебе, мой юный друг, существующие изменились практически полностью.

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

Кто будет всё это переделывать на rust?

Что переделывать? Библиотеки уже есть.

Кто будет делать rust компиляторы для всего?

Уже сделаны.

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

тупо подтирать за собой
функциональные языки

Ясно.

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

Если коротко - опять всё переделывать, опять самый-лучший-язык, опять обосрутся и все по новой.

c - 1972

c++ - 1983

rust - 2010

Раз в 40 лет можно и переписать несколько библиотек

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

И где этот твой зоопарк? Берем те же самые ардуины, на каком языке ты сможешь хоть что-то под них написать? с, с++, может еще ada, вот и все, никакого разнообразия. А скоро еще будет раст. Разве это плохо?

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

ssl

Это тот, который с heartbleed?

Что мешает реализовать эти либы на Rust (что уже и так делают), не считая синдрома утёнка?

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

Таки почему за 7 лет появилось системных либ на rust'е чуть меньше чем нисколько?
К окулисту сходи

Сходил: зрение отличное, системных либ на русте ни одной. Существующие написаны на каком-то крипторусте?

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

Если коротко - опять всё переделывать, опять самый-лучший-язык, опять обосрутся и все по новой.

Внезапно да? Это прогресс, детка. Всега будет что улучшить. Что в этом плохого то?

Да ну тебя нахуй с твоим колесом, пацаны делали все из говна и палок, столько времени убили, а ты предлагаешь все переделать? Да, оно прикольное, круглое, удобное, но в продакшене не взлетит. Фанбои, они такие.

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

Вагон и маленькая тележка. Более того скажу тебе, мой юный друг, существующие изменились практически полностью.

Хорошо, хоть одну из них переписали на другой ЯП?

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

Явление утечки памяти чрезвычайно редкое

Ааааааааааа

Этот крик у тебя после романтического свидания с другом?))

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

Ну теперь полностью понятна Ваша мысль. Ну эт ваше субъективное. Поживём и увидим.

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

Вагон и маленькая тележка. Более того скажу тебе, мой юный друг, существующие изменились практически полностью.

Хорошо, хоть одну из них переписали на другой ЯП?

Нет, разумеется. Инструментов лучше чем «С» (в крайнем случае - плюсы) пока не придумано.

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

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

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

Это в котором на любой чих надо велосипедить? Ну для мазохистов и велосипедистов да.

Только для креативных творцов, отвергающих все мракобесное. А так все без малейшего стеснения пользуются библиотеками. В коммерческих конторах бьют по рукам, голове и кошельку за «творчество».

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

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

Ты серьезно? gdb - отлично справляется для отладки. Рекомендую тебе прочесть его незатейливый man.

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

Нет, разумеется. Инструментов лучше чем «С» (в крайнем случае - плюсы) пока не придумано.

Их не переписали, потому что нельзя просто так взять и переписать. Т.к. время переписывание стремиться к времени затраченному на написание с нуля. А когда у тебя сотни тысяч строк кода, то это выглядит ужасающе. Тем более автор библиотеки\приложения может быть старый пердун, который Си выучил ещё в 1979-ом и для него сама мысль о других языках выглядит как костыль =)

А вообще, Rust явно лучше Си. И многие утверждают, что лучше и проще С++. А теперь немного копипасты из документации. С Rust невозможно совершить такие ошибки:

  • Недействительный итератор - Такое может произойти, когда вы пытаетесь изменить коллекцию, которую в данный момент обходите.
  • Использование после освобождения (use after free) - Ссылки не должны жить дольше, чем ресурс, на который они ссылаются. Rust проверяет области видимости ваших ссылок, чтобы удостовериться, что это правда.
  • На ресурс может существовать только одна изменяемая ссылка - таким образом пока Ваш код работает с ресурсом, другой код не может изменить его.
AntonyRF ★★★★
()
Ответ на: комментарий от anonymous

Только для креативных творцов, отвергающих все мракобесное. А так все без малейшего стеснения пользуются библиотеками. В коммерческих конторах бьют по рукам, голове и кошельку за «творчество».

Потом в «коммерческих конторах» обнаруживается баг живший 20 лет, или они в 2017 году до сих пор не перешли на 64 разрядные сборки. Вот такие вот мракобесы, смузи-тян.

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

Тогда как можно перепутать 0 с 10 489

Не кокетничай. Сколько из них в репозитории твоего дистрибутива? В моем вроде 10 - но они для rust'а самого. Вроде бы. (cargo там и прочий шлак.)

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

gdb - отлично справляется для отладки

Лучше кода ошибки проявляются во время компиляции, а не во время рантайма

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

Потом в «коммерческих конторах» обнаруживается баг живший 20 лет, или они в 2017 году до сих пор не перешли на 64 разрядные сборки. Вот такие вот мракобесы, смузи-тян.

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

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

Этот крик у тебя после романтического свидания с другом?))

я ему не друг

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

При чём тут gdb? Чтобы отлавливать баги, которые в rust проверяются на этапе компиляции?

Логические ошибки, угу. А ты думал: какой основной класс ошибок в многопоточных приложениях?

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

То есть асинхронный доступ к памяти из двух и более потоков уже проверяется на этапе компиляции? Отлично.

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

То есть асинхронный доступ к памяти из двух и более потоков уже проверяется на этапе компиляции? Отлично.

Нет, операционной системой. А что?

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

Качество кода никак не связано с тем, открытый проект или коммерческий

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

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

Дык для этого и создают такие языки как раст и C++, чтобы было удобно писать быстрый код. Zero cost abstractions и т.д. и т.п.

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

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

Нет, операционной системой. А что?

Привести пример из исходников ядра Linux, наш пухленький, конечно же, не сможет?

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

Нет, операционной системой. А что?

А потом в особую фазу луны софт падает, смузи-тян

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

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

Профилирование в помощь. Наверняка там есть несколько функций слишком медленных для данной задачи.

NextGenenration ★★
()

Чё та совсем скучно в темах по расту стало, всего 9 страниц срача...

Эй, фанбои С++, ваш язык асасай у Rust'a. У Вас даже дибильный огрызок вместо нормального namespace, уже не говоря об остальных фичах =)

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

Название дистрибутива и список плагинов в студию

uname -rs
FreeBSD 11.0-RELEASE-p10

И я горжусь этим.)) Насчет списка плагинов: их 93.Будет портянка. И да, на лжи я не попадалсяю))

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

Боже мой, эта шутка толще твоей мамы

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

Это только в винде есть HeapCreate с HEAP_NO_SERIALIZE, это не касается стандартной кучи процесса, и да, HEAP_NO_SERIALIZE никто не пользуется. В никсах доступ к памяти - последовательный. Et in transitum, об этих фактах неизвестно исключительно дебилу.

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

Нет, операционной системой. А что?

А у rust - компилятором. Круто, да?

Зачем? Авторы rust'а дебилы?

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

опять самый-лучший-язык

Эмм. В этой нише (языки без жирного рантайма, способные генерировать код для выполнения на голом железе) припоминаю Ada, C, C++, Forth, Modula-2, Pascal, может когда-нибудь D.

Если подсмотреть в википедии, то ещё BCPL, PL/I, PL360, Modula-3 и прочие.

Самый свежий - С++ 38-ми летней давности.

Так что «опять самый-лучший-язык» как-то не звучит.

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

Ты вообще когда-нибудь занимался разработкой ПО?

Тебя свидание с другом воздвигло на новое занятие, помимо продажи спинеров?

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

а теперь представь, насколько скучно здесь страдающим от тяги к игнору, вроде меня?

Показано 5 сообщений из 48

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