LINUX.ORG.RU

Rust 1.9

 


0

3

Анонсирована очередная версия языка программирования Rust 1.9, разрабатываемого Mozilla совместно с сообществом. Примечательно то, что с момента релиза первого стабильного выпуска прошел 1 год.

Основные изменения:

  • Стабилизирован модуль std::panic, позволяющий перехватывать раскрутку стека. Соответствующие функции рекомендуется применять только в исключительных ситуациях, но никак не для эмуляции механизма try-catch.
  • Стабилизированы методы настройки TCP и UDP соединений; расширены возможности OsString, BTreeSet и HashSet; char может быть получен из UTF-16 последовательности; стабилизирована функция copy_from_slice(); появилась возможность работы с волатильными переменными с помощью read_volatile и write_volatile; сырые указатели обрели .as_ref() и .as_mut(), которые возвращают Option<&T>, где null будет представлен как None; в libcore для всех типов реализован Debug.
  • Разработчикам библиотек доступен атрибут #[deprecated], разрешающий компилятору слать предупреждения при использовании устаревшего API.
  • Специализация уже используется в ночном релизе и будет доступна в стабильном 1.11 через 3 месяца, но оптимизация .to_owned() и .to_string() таки попала в текущий стабильный выпуск.
  • Расширен список поддерживаемых платформ: mips-unknown-linux-musl, mipsel-unknown-linux-musl, i586-pc-windows-msvc.
  • Ускорено время компиляции монады с одинаковыми функциями.

Изменения в менеджере зависимостей Cargo:

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

Для кросс-компиляции подготовлен инструмент rustup, обеспечивающий тривиальное взаимодействие с каналами сборок компилятора (stable, beta, nightly), стандартными библиотеками и их документацией к различным операционным системам, а также обновление всего этого зоопарка одной командой.

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



Проверено: Falcon-peregrinus ()
Последнее исправление: shaiZaigh (всего исправлений: 2)
Ответ на: комментарий от anonymous

В rust - RAII доп. фишка, а не основная конструкция языка, как в C++.

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

Исключения это всегда лишний геморрой, везде.
Есть тип Result | Option, который прекрасно документирует, что в этом месте что-то может пойти не так.
Не надо писать возле функции throws, просто возвращаем результат, а затем обрабатываем его стандартными фичами языка, без всякого синтаксического мусора типа try-catch.
Это гениально же

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

Простота (хуже воровства?). Можно ознакомиться с языком за выходные.

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

Rusult позволяет делать тоже самое, только с большей производительностью.

Большинство современных, популярных языков (rust, swift, go) не поддерживают исключения, и видимо авторам языков виднее.

PS: хейтер исключений

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

Но ведь в той же Java, например, если хочем сделать чтоб функция выбрасывала ошибку, нужно дописывать throws, а затем все вызовы в try оборачивать. Точно так же.
Я всегда с этих конструкций недоумевал

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

хотелось бы написать python, но rust компилируемый. Тогда просто спрошу — стоит ли изучать rust?

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

После python это может быть мучительно. Легче использовать python совместно с cython.

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

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

Тому же Go 4-е года,

Язык Go был предъявлен широкой общественности осенью 2009-го года. О каких 4-х годах вы говорите?

а проектов все так же нет.

Docker же. Нет?

eao197 ★★★★★
()

Стабилизирован модуль std::panic, позволяющий перехватывать раскрутку стека. Соответствующие функции рекомендуется применять только в исключительных ситуациях, но никак не для эмуляции механизма try-catch.

Открыли окно Овертона, лет через десять запилят исключения.

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

V1.0

Не припомню, чтобы перед выходом v.1.0 в Go все менялось так же динамично, как в Rust.

Вот именно он. Один.

У какого-нибудь D и этого нет.

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

Rusult позволяет делать тоже самое....

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

... только с большей производительностью.

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

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

Но ведь в той же Java, например, если хочем сделать чтоб функция выбрасывала ошибку, нужно дописывать throws, а затем все вызовы в try оборачивать. Точно так же.

Для Unchecked исключений не надо. Checked исключения в современной Java никто не использует, они практически общепринято признаны неудачным экспериментам.

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

Можно четкую ссылку на строку с ужасом? Да, писанины много. Но она дисциплинирует и заставляет обрабатывать все случаи.

Никаких проблем с пробросом по стеку не вижу:

Искусственный пример:

fn f1() -> Result<bool, ()> {
    Ok(try!(f2()))
}

fn f2() -> Result<bool, ()> {
    Ok(try!(f3()))
}

fn f3() -> Result<bool, ()> {
    Ok(true)
    // Err(())
}

fn main() {
    println!("{:?}", f1());
}

Если не важна производительность - не используют rust.

RazrFalcon ★★★★★
()

rustup

Выглядит как начало нацпола.

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

Тем что зарелизилось?
Ba dum tss!

А толку-то от этих формальностей? Линукс и всякий софт под него релизится давно и часто, однако он по прежнему не готов для десктопа, плазма падает и т.д.

А Nim, что ему релиз? Ну взял и написал программу на версии текущей версии и она работает, всё равно же он просто транслирует в C всего лишь. От того что потом выйдет другая версия языка и там может что-то и сломают, написанная программа от этого работать не перестанет. А другим языкам их «стабильность» не мешает ломать API и ABI библиотек. Так что не вижу смысла заморачиваться на этих формальностях, у разработчиков под линуксы нет понятия стабильности, тут всё ломают постоянно just for fun.

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

Так вы бы определились: широко известный Docker и куча закрытого софта на Go всего за 6 лет после появления на публике — это успех или неудача? Вот у того же D, который находится ровно в той же нише, что и Go, за 17 лет ничего подобного нет.

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

куча закрытого софта

Пруфы? Раст вон тоже используют во всю.

А про D vs Go. Я бы не сказал, что они в одной нише. Первый замена плюс, второй - питона. Ну и не будем забывать самое главное для языка - дядю, который стоит за его созданием. У Go это крупнейшая в мире корпорация. О чём еще говорить?

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

не готов для десктопа, плазма падает

Дальше не читал.

Правда глаза колет? :D Ну плазма в текущей версии может и падает крайне редко, однако как обычно очень много мелких багов. Например тачпад не блокируется при наборе текста, несмотря на соответствующую опцию в настройках. Надо эту опцию переактивировать после каждого логина в кеды. Ещё косяки с драгндропом из одной программы в другую, если пытаться это сделать через панель (зацепить объект курсором, навести курсор на иконку на панели задач чтобы нужное окно развернулось, куда этот объект бросить). Вот после наведения курсора на панель происходит фейл. Про то что удобное управление звуком они родить не могут до сих пор, хотя в третьих кедах было норм. Это всё тянет на альфа версию, а никак не на 5.6.

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

Пруфы?

Тут уже упоминали про Dropbox, в котором часть софта переписывают с Python на Go.

В Google куча софта написана на Go.

Раст вон тоже используют во всю.

Пруфы?

А про D vs Go. Я бы не сказал, что они в одной нише.

Безопасные нативные языки со сборкой мусора. Не в одной нише? Ну Окай.

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

Вот именно он. Один.

То что на лоре ничем больше не пользуются, не значит что его нет. Проектов на го сейчас развелось как слово, что на русском с этого слога начинается.

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

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

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

Правда глаза колет?

Жирность определяю сходу.

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

Тут уже упоминали про Dropbox

Почитайте внимательно. Там Python -> Go -> Rust.

Пруфы?

Нету. То и дело мелькают заметки на HN, о переходе на раст в некоторых компаниях. Язык сильно молодой.

Не в одной нише?

У вас сравнение только по одному критерию. Все остальное у них ой как разное.

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

Но ведь в той же Java, например, если хочем сделать чтоб функция выбрасывала ошибку, нужно дописывать throws, а затем все вызовы в try оборачивать. Точно так же.

Для Unchecked исключений не надо.

Unchecked не видны в сигнатуре функции. Хотя, конечно, для обработки уровня «занес в лог и показал пользователю диалог» это неважно.

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

Почитайте внимательно. Там Python -> Go -> Rust.

Вы сами почитайте. Там всего несколько тысяч строк на Rust.

Язык сильно молодой.

Вопрос не в этом. Вопрос в том, считаете ли вы Go успешным. Поскольку, если не считаете, то в обозримой перспективе у Rust-а и того может не быть.

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

Никаких проблем с пробросом по стеку не вижу ... Искусственный пример

А где в твоём примере, собственно, ошибки? Накидай в каждую из функций хотя бы по 2-3 ошибочки и покажи как ты не видишь проблем. А потом сделай дерево из ф-ий так чтобы мн-ва ошибок в некоторых листьях частистно пересекались и повтори ещё раз. Собственно об этом по ссылке целая глава с набором рецептов и костылей пробросов ошибок через множества композиций enum-ами в Result.

Да, писанины много. Но она дисциплинирует и заставляет обрабатывать все случаи.

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

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

Там всего несколько тысяч строк на Rust.

А я и не говорил об обратном. Я оспаривал ваш тезис о том, что там всё на Go.

Вопрос в том, считаете ли вы Go успешным.

Конечно считаю. Мне коробит фраза «а что на нём написано», в контексте любого языка.

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

И как с этим помогут исключения? Их не нужно обрабатывать?

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

Имхо, попахивает кривой архитектурой.

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

Тут уже упоминали про Dropbox, в котором часть софта переписывают с Python на Go.

Но упоминали в контексте Rust, а не Go.

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

Unchecked

Но ведь что-то подобное сломает всю философию Rust.
Всёравно, на фоне остальных проблем, лишняя проверка — мелочь

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

То-есть как зачем потоки. Всюду потоки, а он «зачем потоки»)

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

И как с этим помогут исключения? Их не нужно обрабатывать?

У самого совсем не будет никаких вариантов овета?

Имхо, попахивает кривой архитектурой.

Тебе пока, видимо, рано рассуждать о таких вещах.

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

Накидай в каждую из функций хотя бы по 2-3 ошибочки

Но зачем? Свой тип ошибок определяет, условно говоря, крейт, и он же определяет функции отображения своих ошибок в стандартные.

http://blog.burntsushi.net/rust-error-handling/ Composing custom error types

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

Исключения позволяют отложить их обработку до определённого места в стеке вызовов. Тоесть если твоя функция не предназначена для перехвата какого-то исключения, она просто выбрасывает его наверх. И так до тех пор, пока исключение не дойдёт до функции, в котором есть соответствующий обработчик. Это позволяет унифицировать обработку исключений. А что, вместо этого, предлагают Rust, Go и прочии Swift-ы?

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