LINUX.ORG.RU

Rust 1.93

 


0

4

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

Обновление встроенной библиотеки musl до версии 1.2.5

Различные целевые платформы *-linux-musl теперь поставляются с musl 1.2.5. В первую очередь это касается статических сборок musl для x86_64, aarch64 и powerpc64le, которые ранее использовали версию 1.2.3. Это обновление включает несколько исправлений и улучшений, а также одно «ломающее» изменение, затрагивающее экосистему Rust.

Основной мотивацией для этого обновления стали значительные улучшения в DNS-резолвере musl, появившиеся в версии 1.2.4 и доработанные в 1.2.5. При использовании musl для статической линковки это должно повысить надежность сетевых функций переносимых бинарных файлов Linux, особенно при работе с большими DNS-записями и рекурсивными серверами имен.

Однако версия 1.2.4 также содержит критическое изменение: удаление нескольких устаревших символов совместимости, которые использовал крэйт libc на GitHub. Исправление для этого было выпущено в libc 0.2.146 еще в июне 2023 года (2,5 года назад), и мы считаем, что оно распространилось достаточно широко, чтобы мы могли внести изменения в целевые платформы Rust.

Разрешение глобальному аллокатору использовать TLS

Rust 1.93 корректирует внутренние механизмы стандартной библиотеки, позволяя глобальным аллокаторам, написанным на Rust, использовать std::thread_local! и std::thread::current без риска re-entrancy за счет использования системного аллокатора. Подробности можно найти в документации стандартной библиотеки Rust.

Атрибуты cfg в строках asm!

Ранее, если отдельные части секции встроенной сборки требовали условной компиляции cfg, приходилось дублировать весь блок asm! целиком. В версии 1.93 атрибут cfg можно применять к отдельным инструкциям внутри блока:

asm!( // or global_asm! or naked_asm!
    "nop",
    #[cfg(target_feature = "sse2")]
    "nop",
    // ...
    #[cfg(target_feature = "sse2")]
    a = const 123, // only used on sse2
);

В разряд стабильного API переведено:

<[MaybeUninit<T>]>::assume_init_drop
<[MaybeUninit<T>]>::assume_init_ref`
<[MaybeUninit<T>]>::assume_init_mut`
<[MaybeUninit<T>]>::write_copy_of_slice`
<[MaybeUninit<T>]>::write_clone_of_slice`
String::into_raw_parts`
Vec::into_raw_parts`
<iN>::unchecked_neg`
<iN>::unchecked_shl`
<iN>::unchecked_shr`
<uN>::unchecked_shl`
<uN>::unchecked_shr`
<[T]>::as_array`
<[T]>::as_array_mut`
<*const [T]>::as_array`
<*mut [T]>::as_array_mut`
VecDeque::pop_front_if`
VecDeque::pop_back_if`
Duration::from_nanos_u128`
char::MAX_LEN_UTF8`
char::MAX_LEN_UTF16`
std::fmt::from_fn`
std::fmt::FromFn`

>>> Источник

★★

Проверено: CrX ()
Последнее исправление: CrX (всего исправлений: 2)

Вот за что не люблю ржавчину, так это за словоблудие. ::someting ::something_else ::something_on_full_moon ::something_if_moon_full ::if_moon_full_something ::moon_full_and_goat_sacrificed_do_something_not …

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

Мне, как человеку, пишущему на Rust, не совсем нравится наличие двух механизмов - редакций и MSRV (minimal supported rust version, указывается в параметре package.rust-version файла Cargo.toml). Разные версии компилятора Rust в рамках определённой редакции, стало быть, совместимы друг с другом, так что код, который написан, скажем, на Rust 1.81, скомпилируется компилятором rustc версии 1.93. Так ведь? Не всегда - некоторые авторы-идиоты указывают минимальную версию компилятора, ниже которой (даже если более старые версии находятся в рамках одной редакции) собрать программу/крейт не получится. Самое дерьмовое, что только могло случиться с языком - это именно MSRV.

(с другой стороны, использование MSRV оправдано, если в проекте используется новая редакция Rust’а, например, 2024, но код может быть скомпилирован и более старой версией rustc, скажем, из редакции 2021, но я не знаю, допустимо ли указывать в package.rust-version версию компилятора, выходящую за пределы текущей используемой редакции)

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

Альтернатива - функции с разным типом, имеющие одинаковое название. Лучше ли это? И что тогда делать с выводом типов?

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

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

Ну, если ты будешь использовать в своей программе, например, Duration::from_nanos_u128, то очевидно, что тебе нужен минимум раст 1.93, в более ранних этой функции нет. Что тут не так?

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

Может оно нужно. Может - не нужно. Не знаю :) . Каждый раз подгорает, когда ради какого-то одного крейта нужно обновлять инструментарий Rust’а, пусть это и делается всего одной командой rustup update.

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

пусть это и делается всего одной командой rustup update.

Это же прекрасно. Гораздо хуже когда пытаешься повторить какое-то исследование по нейронкам или новую модель потестить, а там нужна определенная версия torch, которая тянет torchvideo, torchaudio, все nvidia сu* пакеты суммарно на гигабайт и flash attention 2 определённой версии который компилируется из исходников 1.5 часа. Вот где боль.

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

Эта борьба с удобным инструментом напоминает, если бы изобрели бензопилу и куча идиотов пошли бы валить лес, потому что теперь могут. Но воевали бы не с идиотами, а с бензопилами.

Вы еще с автодополнением повоюйте и IDE.

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

Эта борьба с удобным инструментом

В корне ошибаешься в своей интерпретации окружающей действительности…

Sm0ke85
()
Ответ на: комментарий от Sm0ke85
local frame = CreateFrame("Frame")
frame:RegisterEvent("CHAT_MSG_GUILD")
frame:SetScript("OnEvent", function(self, event, text, author)
    print(author .. ": " .. text)
end)

Этот код был сгенерирован ИИ. Расскажи мне почему его надо не принимать. И расскажи почему я всю эту стандарщину должен писать вручную. Очень интересно послушать.

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

Этот код был сгенерирован ИИ. Расскажи мне почему его надо не принимать.

Посмотри Весь сгенерированный код, а не кусок, который тебя устраивает…

И расскажи почему я всю эту стандарщину должен писать вручную. Очень интересно послушать.

Я тебя может удивлю, но любые системы состоят из «стандарТщины», можно кнтрл-С - ктрл-В даже использовать, но когда начинают использовать «ИИ», то вдруг ему начинают «НестандарТщину» поручать и даже проверять за ним забывают, как пример ссылку давал уже…

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

А что мешает наклепать мусора вручную точно так же без тестов, проверки? Тебе не кажется, что тут проблема не в инстурменте, а в том, кто им пользуется?

Просто без удобного инструмента и позитивное и негативное производится гораздо медленнее - вся разница.

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

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

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

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

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

Каждый раз подгорает, когда ради какого-то одного крейта нужно обновлять инструментарий Rust’а,

Так не используй такие крейты. Базовые пакеты вполне себе способны работать и на старых компиляторах.

  • serde: 1.56
  • byteorder: 1.60
  • nom: 1.65
  • serde_json: 1.68
  • log: 1.68
  • thiserror: 1.68
  • nix: 1.69
  • env_logger: 1.71
  • tokio: 1.71
  • clap: 1.74
  • config: 1.75
  • toml: 1.78
AlexVR ★★★★★
()
Ответ на: комментарий от AlexVR

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

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

Это называется перегрузка функций и да, вывод типов таки работает.

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

Пакеты требующие rust, собираются компилятором из дистрибутива/SDK.

Другой пример, в Debian librsvg - собирается компилятором из дистрибутива. Ограничение сверху: версия rustc в дистрибутиве. (https://deb.debian.org/debian/pool/main/libr/librsvg/librsvg_2.60.0+dfsg-1.dsc)

Аналогично Yocto предлагает два варианта сборки rust-пакетов.

  • Основной: использует тот компилятор что в SDK.
  • Альтернативный: компилятор из хостовой системы.
AlexVR ★★★★★
()
Ответ на: комментарий от LightDiver

А что мешает наклепать мусора вручную точно так же без тестов, проверки?

Ну так зато на ИИ свернуть нельзя, т.к. это ты сам наклипал, ты и ответственность несешь…

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

Именно тут я проблему и вижу, поэтому и «ругаюсь», когда «ИИ» пихают куда ни попади…

Просто без удобного инструмента и позитивное и негативное производится гораздо медленнее - вся разница.

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

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

Мешают Ограниченная применимость («проблема не в инструменте, а в том, кто им пользуется»)

Ой чую заменят их молодые и более шустрые.

Это будет трагедия, т.к. нейрослопить и обезьяна сможет, а пользоваться этим потом миллионы будут…

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

Это ещё неплохо. Я постоянно натыкаюсь на такой код, где авторы вообще не написали никакой requirements.txt или его аналог, понять какие там были версии становится задачей со звёздочкой. Ещё интереснее когда разработчики какого-то ключевого пакета (даже с торчом такое происходит) смогли сломать обратную совместимость в рамках одной мажорной версии

rk-d
()
Ответ на: комментарий от LightDiver

И расскажи почему я всю эту стандарщину должен писать вручную. Очень интересно послушать.

Расскажи почему кодер за такую работу должен получать тысячи у.е. Будешь отдавать 3/4 в фонд развития ИИ.

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

нейрослопить и обезьяна сможет

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

Вообще, проблема нейрослопа не в нейронках, а в новых поколениях с СДВГ которые суют выхлоп сети в код даже не смотря его и забивая на проверку и постобработку.

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

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

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

Интересно, в 1.100 завезут арифметику над константными параметрами?

Bill-Labs
()
Ответ на: комментарий от Obezyan

Вообще, проблема нейрослопа не в нейронках, а в новых поколениях с СДВГ которые суют выхлоп сети в код даже не смотря его и забивая на проверку и постобработку.

Так им из каждого чайника вещают «какой же прекрасный мир нынче сейчас наступает», а критического мышления у них нет… Так еще и попсовое название «ИИ» намекает, что Это поделие что-то может понимать как-будто бы…

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

критического мышления у них нет

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

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

Как будто бы естественный интеллект может что-то понимать. Такой же эпифеномен электрических процессов ЦНС. (В этом месте я тоже просто сложил типа умные слова без всякого понимания смысла, как действует большинство гуманоидов, если не все).

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

Как будто бы естественный интеллект может что-то понимать.

у естественного интеллекта есть представление об окружающей действительности, через взаимодействие с этой действительностью ьон и мыслит собственно, да и мышление его ограничено опытом, как правило… Также нужно учитывать, что естественный интеллект получает информацию об окружающей действительности из очень большого количества органов чувств, также ЕС много тысяч лет приспосабливался к этому миру, те кто не смогли просто отсеялись…

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

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

Потому что важно не ударить кувалдой один раз, а знать куда ударить кувалдой один раз.

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

да да не

прикол с ai (algoritmic invasion если что я в домике) что по факту у большинсва носителей естественного он слабый и следовательно заменим слабым искуственным

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

а ваще солипсизм малоинформативен

qulinxao3 ★☆
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.