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

Ты же распинался про то что не юниксвейно?

В юниксвее есть

жертвуйте скоростью ради переносимости

но нет

жертвуйте безопасностью ради портабельности

Управления пакетами же! Но это не повод впихивать в apt механизм для определения зависимостей на git репозиториях же!

Но повод запилить ещё один пм и впихнуть в него этот функционал, получить огромный малоподвижный комбайн?

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

«С» создавался в совсем другое время.

Увы и ах - тогда люди были нацелены на результат и были чрезвычайно эффективны. Сейчас время громких слов и мелких людишек.

Ну и напоминаю, что С - это просто сахарок над asm.

Ч0? C - высокоуровневый язык структурного программирования. Чрезвычайно удобный.

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

Виндузятник?

Частично.

У тебя есть непортабельная сборка tor?

tor-проблемы.

У тебя есть версия плагинов для фокса лежащая не в хомяке каждого пользователя?
Плаги́н[1] (англ. plug-in, от plug in «подключать») — независимо компилируемый программный модуль, динамически подключаемый к основной программе и предназначенный для расширения и/или использования её возможностей

Сам додумаешь?

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

Cargo - это скорее система сборки, которая имеет встроенный менеджер пакетов, а не пакетный менеджер.

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

C - высокоуровневый язык структурного программирования. Чрезвычайно удобный.

Толсто

Так выплюнь, не соси, если не нравится.

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

В юниксвее есть

Ещё раз: перечисление в README.md списка пакетов - это не то. Если README.md писали на арче, а у тебя убунта, то ты даже скопипастить и нажать Enter не сможешь - у тебя нет пакетов с этими названиями. Если же в README.md сказал просто sdl, то в момент сборки может выяснится что нужен ещё и sdl-ttf(к примеру). Ты не можешь зайти в папку с проектом и сказать apt install-from-file-and-build-project - у тебя просто нет такой функции.

получить огромный малоподвижный комбайн?

Он не огромный и тем более не подвижный и ещё более не комбайн.

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

Чрезвычайно удобный.

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

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

и были чрезвычайно эффективны

И делали кучу лишней работы.

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

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

Он не огромный и тем более не подвижный и ещё более не комбайн.

Может и не огромный, но вполне себе комбайн.

cargo is the package manager and crate host for rust.

Тебе не видно, что это не только пм?

Ещё раз: перечисление в README.md списка пакетов - это не то. Если README.md писали на арче, а у тебя убунта, то ты даже скопипастить и нажать Enter не сможешь - у тебя нет пакетов с этими названиями. Если же в README.md сказал просто sdl, то в момент сборки может выяснится что нужен ещё и sdl-ttf(к примеру). Ты не можешь зайти в папку с проектом и сказать apt install-from-file-and-build-project - у тебя просто нет такой функции.

Это проблемы линуксозоопарка.

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

tor-проблемы

Да ладно.

Сам додумаешь?

В этом случае ты ставишь софт в обход столь нежно любимого пм дистрибутива.

ЗЫ хочу тебя расстроить: плагины можно писать и на интерпретируемых языках.

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

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

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

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

В этом случае ты ставишь софт в обход столь нежно любимого пм дистрибутива.
ЗЫ хочу тебя расстроить: плагины можно писать и на интерпретируемых языках.

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

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

To accomplish this goal, Cargo does four things:

  • Introduces two metadata files with various bits of project information.
  • Fetches and builds your project’s dependencies.
  • Invokes rustc or another build tool with the correct parameters to build your project.
  • Introduces conventions to make working with Rust projects easier.

Это похоже на типичный пакетный менеджер? Это типичная система сборки. Единственное отличие от типичной системы сборки я выделил.

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

Тебе не видно, что это не только пм?

А что, нельзя?

Это проблемы линуксозоопарка.

Аргументированно. Вместо решения проблемы предлагаешь страдать? Гуманист.

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

Т. е. оно ещё и в итоге оказалось жирный комбайном?

Т.е. как я и считал ты понятия не имеешь, что это такое, но спорить начинаешь =) Ай маладца

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

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

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

Т.е. примеров не будет. ВНЕЗАПНО не удивлен.

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

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

Маны не равены софту, значит через пм не надо их распространять.

Заголовочные файлы не равены софту, значит через пм не надо их распространять.

Темы не равены софту, значит через пм не надо их распространять.

... не равены софту, значит через пм не надо их распространять.

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

Это похоже на типичный пакетный менеджер? Это типичная система сборки.

Система сборки, которую называют пакетным менеджером. Тут прекрасно все.

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

Маны не равены софту, значит через пм не надо их распространять.

Маны можно распространять вместе с софтом как документацию, не?

Заголовочные файлы не равены софту, значит через пм не надо их распространять.

Инструменты разработчика же.

Темы не равены софту, значит через пм не надо их распространять.

Ну да.

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

Т.е. примеров не будет. ВНЕЗАПНО не удивлен.

Нет смысла копипастить сюда то, что ты можешь найти за пять^W две минуты гугла. Какой смысл разбирать в 100500 раз к примеру про управление памятью, если ты всё равно это не поймёшь?

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

Решать нужно линуксозоопарк, не?

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

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

Система сборки, которую называют пакетным менеджером. Тут прекрасно все.

Смешивать но не взбалтывать.

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

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

Совсем наркоман?

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

Маны можно распространять вместе с софтом как документацию, не?

Но ведь это же не софт!

Инструменты разработчика же.

И качать их нужно wget'ом а не пм, да?

Ну да.

А потом после установки из консоли wget'ом закачивать, а то гуи без тем не юзабельно, да?

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

Какой смысл разбирать в 100500 раз к примеру про управление памятью, если ты всё равно это не поймёшь?

Ну-ну-ну, расскажи про особенности jemalloc по сравнению... Неважно. Как это, «что ж ты, фраер, сдал назад?»(c)

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

Но ведь это же не софт!

Вместе с софтом, не?

И качать их нужно wget'ом а не пм, да?

Н0ркоман, с тобой всё ясно.
Чтобы ты не мучался: через пм.

А потом после установки из консоли wget'ом закачивать, а то гуи без тем не юзабельно, да?

Ты сам понял, что написал?

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

Чтобы ты не мучался: через пм.

Ну то есть ты сначала говоришь, что им не место в пм, ибо это инструменты разработчика. Но при этом Cargo - система сборки Rust со встроенным пм для «инструментов разработчика» - не нужен. Ты сам себе противоречишь.

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

Ну-ну-ну, расскажи про особенности jemalloc по сравнению

Тебе рассказать сколь героические усилия предпринимают некоторые, чтоб память не текла? Про хитрые инстументы для выявления сего дела?

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

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

А зачем мне тебе что-то объяснять, если ты несешь какую-то х%#нь невпопад?

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

Ну то есть ты сначала говоришь, что им не место в пм, ибо это инструменты разработчика. Но при этом Cargo - система сборки Rust со встроенным пм для «инструментов разработчика» - не нужен. Ты сам себе противоречишь.

Противоречие-то легко разрешается: просто надо выбросить ненужный руст, и тогда наступит покой, радость и всеобщая удовлетворенность.

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

Чего я говорю?

А у тебя короткая память

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

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

Чтобы ты не мучался: через пм.

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

Ты сам понял, что написал?

Создай и примени пустую тему. Удачи в поисках среди пустых значков.

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

А-а-а, да в тредах по расту одни наркоманы что ли?

Заголовочные файлы не равены софту, значит через пм не надо их распространять.

Инструменты разработчика же.

Так я и говорю, что через пм распространяется, потому что это интрументы разработчика.

Удаляюсь из треда, тут какой-то цирк с понями.

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

Ты чрезвычайно далек от 2D-графики

Причем тут 2д графика, когда речь про рендеринг DOM дерева?

И, да, 330 потоков - это позорище стыдное.

А сколько надо, сколько не стыдно?

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.