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)

mips-unknown-linux-musl, mipsel-unknown-linux-musl

При помощи musl, можно собирать статический бинарник, как в Go.

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

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

Звучит как что-то очень извращённое.

anonymous
()

Разработчикам библиотек доступен атрибут #[deprecated], разрешающий компилятору слать предупреждения при использовании устаревшего API.

Что-то какой-то не rust-way. Атрибуты должны разрешать компилятору не слать предупреждения.

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

Dropbox Infra is mostly a Go shop.

Т.е., по сути, это мелочи для rust, и тут ещё говорят про servo. Как я понял, распространённость этого языка крайне невелика?

conformist ★★★
()

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

Rust does not currently have a rigorously and formally defined memory model, so the precise semantics of what «volatile» means here is subject to change over time.

Версия один-девять, господа!

CARS ★★★★
()

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

Почему?

Legioner ★★★★★
()

Ускорено время компиляции монады с одинаковыми функциями

Кстати о монадах, там higher-kinded types планируются вообще?

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

Dropbox Infra is mostly a Go shop.

Т.е., по сути, это мелочи для rust

То есть компонент, который по сути является ядром бизнеса Dropbox, написан на Rust.

Как я понял, распространённость этого языка крайне невелика?

Смотря с чем сравнивать.

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

там higher-kinded types планируются вообще?

В светлом будущем.

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

Смотря с чем сравнивать.

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

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

стоит ли изучать rust?

Зависит от того, с какой целью, кем ты работаешь, кем хочешь работать... Для веба - нет.

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

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

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

Если ты не профессиональный прогер - совершенно точно не нужно.

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

Да, но ++'вики многие заинтересованы в продвижение. Его идея владений оказалась очень интересной. Я например до этого думал, что существует только две модели управлению памятью. Полный автомат с GC и ручное aka C++ (ну можно еще отдельно выделить умные указатели).

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

Rust

Зачем это нужно если есть MoscowML?

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

ну можно еще отдельно выделить умные указатели

это и есть модель управления памятью в rust: там RAII и там RAII, разве нет?

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

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

deterok ★★★★★
()

Ура! пойду еще один хеловорд напишу до следующей новости.

anonymous
()

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

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

Что-то какой-то не rust-way. Атрибуты должны разрешать компилятору не слать предупреждения.

Не совсем пойму как именно ты предполагаешь это делать. Допустим, пишем библиотеки у хотим пометить часть функций устаревшими. И что дальше?

Ни и #[must_use] ведь атрибутом сделано.

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

Раскрутка стека происходит при панике, однако вместо этого паникующая программа может сразу упасть. Задается всё на стадии компиляции и называется «panic runtime». Подробнее в RFC. В качестве исключений необходимо использовать Result.

shaiZaigh
() автор топика
Ответ на: комментарий от DarkEld3r

Да я никак не понимаю. У ТСа отличный перевод получился.

This attribute allows you to tag an API with a deprecation warning

разрешающий компилятору слать предупреждения при использовании устаревшего API.

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

У ТСа отличный перевод получился.

Ясно. Не понял, что претензия к переводу.

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

Тоже потокофобия?) Надо с ней бороться. Тем более, в расте потоки чуть ли не в стандартной библиотеке. Да еще и кросплатформенные (вроде). Да еще и максимально безопасные, в силу природы языка

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

Да я никак не понимаю. У ТСа отличный перевод получился.

This attribute allows you to tag an API with a deprecation warning

разрешающий компилятору слать предупреждения при использовании устаревшего API.

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

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

Тоже потокофобия?

а? да как бы наоборот. asio вообще замечтально с потоками.

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

похоже сделали как в Go, там тоже panic и recover не рекомендуется использовать для эмуляции try catch

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

Не только в расте, google, например, не использует exceptions в своих C++ проектах (таких как webkit и chromium).
Qt coding conventions тоже запрещает использовать исключения и RTTI.
LLVM и clang не используют исключения и RTTI.
Короче очень много крупных и серьезных проектов на C++ отказываются от использования исключений. Так что это не удивительно что молодые языки такие как rust и go не ставят себе задачу сделать поддержку исключений.

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

Потому что в раст-сообществе бытует мнениe, что «исключения не нужны».

Т.е. это рекомендация исходя из религиозных соображений, а не технических? Может быть там память утекает при раскрутке стека или ещё чего, меня это интересует. А у кого там какое мнение бытует, это не так интересно.

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

Раскрутка стека происходит при панике, однако вместо этого паникующая программа может сразу упасть. Задается всё на стадии компиляции и называется «panic runtime». Подробнее в RFC.

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

В качестве исключений необходимо использовать Result.

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

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

А у кого там какое мнение бытует, это не так интересно.

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

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

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

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