LINUX.ORG.RU

Rust 1.24

 


3

9

Команда Rust рада сообщить о выпуске Rust 1.24.0. Rust — это системный язык программирования, нацеленный на безопасность, быстрое и параллельное исполнение программ.

Если у вас уже установлена предыдущая версия через rustup, для обновления просто выполните

$ rustup update stable

Для новой установки скачайте rustup и не забудьте прочитать примечания к выпуску 1.24.0 на GitHub.

Что нового в Rust 1.24.0?

rustfmt

Несколько лет мы ждали инструмент для автоматического приведения исходного кода на Rust в «стандартный вид». Встречайте предварительную версию rustfmt! Чтобы попробовать, просто выполните

$ rustup component add rustfmt-preview

Нужно отметить два важных момента: во-первых, вы должны использовать именно rustup component add, а не cargo install. Если вы ранее использовали rustfmt через cargo install, вам необходимо предварительно его удалить. Во-вторых, не забывайте о том, что rustfmt ещё не достиг версии 1.0. Некоторые детали пока в разработке, а баги в процессе исправления. Как только rustfmt достигнет версии 1.0, компонент rustfmt-preview будет объявлен устаревшим и заменён на rustfmt.

В ближайшее время мы планируем написать отдельный пост об этой стратегии выпусков. Для дополнительной информации смотрите страницу rustfmt на GitHub.

Пошаговая сборка

Ещё в сентябре 2016 года мы подробно писали об этом в нашем блоге. Идея пошаговой компиляции довольна проста: если поддерживается этот механизм, то пересобираться будет только тот код, который был изменён с момента предыдущей компиляции. Это намного быстрее, чем полностью собирать весь проект, даже если изменения исходного кода достаточно малы. Начиная с версии 1.24, пошаговая компиляция включена по умолчанию. Не забудьте о cargo check, если будете пытаться достигнуть минимально возможного времени сборки.

Важно отметить, что и работа над производительностью компилятора в целом, и над пошаговой сборкой в частности, будет продолжена. Кое-что доступно уже в этом выпуске 1.24.0 — значение codegen-units теперь 16 по умолчанию. Одно небольшое замечание об этом изменении: оно делает компиляцию быстрее, но исполняемый файл получается немного медленнее. Для максимальной скорости программы выставьте codegen-units в 1 в вашем Cargo.toml.

Другие изменения

Есть ещё одно изменение, о котором мы хотели бы поговорить: неопределённое поведение (undefined behavior). Как правило, Rust старается избегать неопределённого поведения, исключив его полностью из безопасного (safe) кода, и сведя к минимуму в небезопасном (unsafe) коде. Одним местом, где вы всё ещё могли получить неопределённое поведение, была ситуация, когда вызов panic! проходит через FFI.

extern "C" fn panic_in_ffi() {
        panic!("Test");
}

Это не может работать, поскольку точный механизм работы паник должен быть согласован с тем, как работает "C" ABI в этом примере, или любой другой ABI в других случаях.

В Rust 1.24 исполнение такого кода будет прерываться, а не порождать неопределённое поведение. Смотрите примечания к выпуску для более подробной информации.

Стабилизация библиотек

Если вы любитель функции str::find, которая используется для нахождения char в &str, вы будете рады узнать, что она стала быстрее в 10 раз! Этого удалось достигнуть использованием memchr. [u8]::contains теперь также его использует, хотя прирост скорости оказался более умеренным.

Несколько новых API были стабилизированы в этом выпуске:

Следующие функции теперь могут быть использованы в постоянных выражениях (constant expressions), например при инициализации static:

  • new функции для Cell, RefCell и UnsafeCell
  • new функции для различных целочисленных Atomic типов
  • {integer}::min_value и max_value
  • size_of и align_of для mem
  • ptr::null и null_mut

Смотрите примечания к выпуску для более подробной информации.

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

★★★★★

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

Если вы любитель функции str::find, которая используется для нахождения char в &str, вы будете рады узнать, что она стала быстрее в 10 раз!

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

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

Бывает что просто не хватает рук и пишут наивную, но корректную имплементацию чтобы потом ее исправить

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

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

anonymous
()

Видел тред на одной странице.

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

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

Ты вообще распарсил смысл комментария, на который ответил, или как всегда ?

Речь не о том, есть ошибки или нет, а о том что если после оптимизации скорость поднялась аж на такой порядок, значит до этой оптимизации на разработку забивали болт.

Представляешь себе автомобиль новой разработки 2010-хх годов, который после установки на него второго двигателя, турбины и обтекаемого кузова теперь может ехать в 10 раз быстрее, то есть целых 120 км\ч ? Смешно, да ? Вот то же самое имел в виду комментатор.

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

если после оптимизации скорость поднялась аж на такой порядок, значит до этой оптимизации на разработку забивали болт

Ещё раз, для тугодумов: при реализации крупного проекта некоторые места поначалу делают на уровне штоб было, и со временем доводят их до ума.

Представляешь себе автомобиль

Ты с таким детсадовским уровнем аргументации на Пикабу вали.

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

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

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

Ещё раз, для тугодумов: при реализации крупного проекта некоторые места поначалу делают на уровне штоб было, и со временем доводят их до ума.

Чушь. При реализации крупного проекта, его вначале проектируют на бумаге, учитывают все риски и целесообразности, а только затем начинают воплощать в жизнь. Сразу видно что ты бездельник, никогда не работал в организации крупнее ООО «Вектор».

Ты с таким детсадовским уровнем аргументации на Пикабу вали.

Эпичненько ты слился, неуч)

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

При реализации крупного проекта, его вначале проектируют на бумаге, учитывают все риски и целесообразности, а только затем начинают воплощать в жизнь

Ога, и сразу оптимизируют весь код, продумывают все мелочи наперёд, и вообще делают всё идеально.Твои диванные маняфантазии о реальном мире доставляют.

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

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

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

Мы уже перешли от радиуса кривизны разработки, к влиянию кривизны разработки на ее работу?

Шо ж ты так мечешься туда-сюда?

Я искренне желаю тебе пользоваться продуктами, которые после оптимизации смогут работать в 10 раз быстрее. Начни с автомобиля. Че, скорость в 12 км\ч не так уж и плоха. Оптимизируешь потом)))

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

Тебе в дверь соседи снизу не стучатся ещё? Твоя абстракция уже должна их затопить.

Virtuos86 ★★★★★
()

Таки да, это системный езык.

А вот как замена для 'чистово Си' rust избыточен. Си же голая процедурщина. Ей большего и не надо.

На rust переползут программисты C++. Rust — это альтернатива C++, но не Си.

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

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

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

То есть зачем вообще ЯП кроме Си? Эдик, перелогинься.

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

Чушь. При реализации крупного проекта, его вначале проектируют на бумаге, учитывают все риски и целесообразности, а только затем начинают воплощать в жизнь. Сразу видно что ты бездельник, никогда не работал в организации крупнее ООО «Вектор».

То-то у всех крупных проектах всплывают детские баги

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

Зачем ЭТО, если на Сях можно написать код любой сложности и любого функционала?

Совершенно ненужно, пойди разработчикам скажи, а то они без лоровской мудрости не догадаются

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

Чушь. При реализации крупного проекта, его вначале проектируют на бумаге

Действительно чушь. Может в секретных лабораториях такое и прокатывает, а в наебизнесе agile-конкуренты тебя сожрут вместе с бумажками.

anonymous
()

Убийца C++

Реализация быстрой сортировки требует unsafe в коде. Это все самое существенное, что нужно знать о rust'е.

anonymous
()
Ответ на: Убийца C++ от anonymous

Да, Раст позволяет разыменовывать сырые указатели только в unsafe. По-твоему, Раст должен разрешать это делать вольно? О какой тогда безопасности можно будет говорить?

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

Реализация быстрой сортировки требует unsafe в коде. Это все самое существенное, что нужно знать о rust'е.

Да, Раст позволяет разыменовывать сырые указатели только в unsafe. По-твоему, Раст должен разрешать это делать вольно? О какой тогда безопасности можно будет говорить?

Да какая там безопасность... Просто получается, что для реализации этого нехитрого алгоритма rust не особенно пригоден. Да и по размышлению зрелому, такой инструмент не особенно и нужен. Значительно легче и дешевле обойтись внутрикорпоративными правилами и мероприятиями при написании кода на C/C++.

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

Просто получается, что для реализации этого нехитрого алгоритма rust не особенно пригоден.

unsafe это не инородный сторонний костыль, а часть языка. Поэтому вывод о пригодности Раста непонятен. Заимствование и времена жизни это абстракции для обеспечения безопасности, которые кое-где неудобны, а кое-где протекают. unsafe — затычка. А бесплатный сыр в мышеловке.

Значительно легче и дешевле обойтись внутрикорпоративными правилами и мероприятиями при написании кода на C/C++.

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

И наверное, хватит реагировать на Раст как на чьего-то «убийцу».

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

Заимствование и времена жизни это абстракции для обеспечения безопасности, которые кое-где неудобны, а кое-где протекают.

«Велик могучим русский языка».

unsafe это не инородный сторонний костыль, а часть языка... unsafe — затычка.

«Я вся такая протеворечивая. Я вся внезапная такая».

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

«Это ты самую суть ухватил». rust не дает новых возможностей. Он просто бьет по рукам. Посетителям антикафе это по нраву, но мир состоит далеко не только из них.

anonymous
()
Ответ на: Убийца C++ от anonymous

Реализация быстрой сортировки требует unsafe в коде. Это то, что нужно знать о rust'е, когда начинаешь его изучать

пофиксил

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

пофиксил

Это все самое существенное, что нужно знать о поклонниках rust'а: для оправдания существования своего недоязычка они только и могут, что искажать чужие фразы.

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

пофиксил

Это все самое существенное, что нужно знать о поклонниках rust'а: для оправдания существования своего недоязычка они только и могут, что искажать чужие фразы.


unsafe это не инородный сторонний костыль, а часть языка... unsafe — затычка.

«Я вся такая протеворечивая. Я вся внезапная такая».

anonymous (18.02.2018 4:23:05)

Ой, всё.

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

rust не дает новых возможностей.

Ну как же. Он дал тебе возможность приходить и срать на чужом празднике жизни.

Virtuos86 ★★★★★
()
Ответ на: Убийца C++ от anonymous

Реализация быстрой сортировки требует unsafe в коде. Это все самое существенное, что нужно знать о rust'е.

Зачем unsafe? https://rosettacode.org/wiki/Sorting_algorithms/Quicksort#Rust

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

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

rust не дает новых возможностей.

Ну как же. Он дал тебе возможность приходить и срать на чужом празднике жизни.

Ну что тебе можно предложить? Ледку? Ментольчик? Просто музычку послушай..

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

Реализация быстрой сортировки требует unsafe в коде. Это все самое существенное, что нужно знать о rust'е.

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

Хе-хе-хе. Хипсторы познают мир. Оказывается, проверка аргументов - основная часть при написании кода, а не яркое креативное творчество.

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

Там же написано, что теперь используют memchr из libc

Это еще депрессия, или уже принятие?

В rust simd ещё не завезли.

А, нет, это все ещё торг...

Кстати, а как это будет работать не на x86?

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

Rust is a systems programming language focused on safety, speed, and concurrency.

Пожалуй слово «надёжность» подошло бы больше.

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

Не знаю кто такой Эдик, но я знаю кто тут на лоре гипер рефлекторный.

cheshire_cat ★★
()

Печаль-беда с динамической типизацией, это очень сложно в Rust и нужно очень основательно разбираться с типажами-объектами и структурой памяти =(

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