Как стать автором
Обновить

Комментарии 19

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

rustup update stable

Кто-нибудь может плз объяснить, почему бы этим не заниматься пакетному менеджеру дистрибутива?

Во-первых, кто будет каждые шесть недель оперативно выкатывать обновления во все репозитории? Во-вторых, rustup всё равно не лишний, хотя бы как и менеджер версий (не так и мало тех, кому нужны одновременно установленные stable и nightly или, скажем, x86_64 и wasm).

Во-первых, кто будет каждые шесть недель оперативно выкатывать обновления во все репозитории?

Эмм, участник команды разработчиков rust, отвечающий за поддержку в популярных дистрибутивах?

не так и мало тех, кому нужны одновременно установленные stable и nightly или, скажем, x86_64 и wasm

Известные мне менеджеры пакетов поддерживают одновременно наличие различных версий пакета в системе. У меня прямо сейчас стоят gcc7 и 8 под x86-64 и gcc под arm.

По мне так проще иметь на всех системах одинаковую инфраструктуру. Тем более пакеты я не создаю в процессе разработки

У меня Windows тут всё ясно, Gentoo nightly релизы пересобирать придется из исходников постоянно, это тяжеловато, Freebsd задержка в релизе заметная.

Потому что rustup умеет больше, нежели пакетный менеджер. Во-первых, скорость доставки выше, пока там еще соберут rustc из исходников. Во-вторых, rustup умеет ставить не только nightly/beta/stable, но и переключаться между версиями, устанавливать тулчейны для кросскомпиляции в другие архитектуры, устанавливать компоненты вроде clippy, fmt… и т.д.

умеет больше, нежели пакетный менеджер

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

rustup умеет ставить не только nightly/beta/stable, но и переключаться между версиями

apt тоже (+ update-alternatives)
устанавливать тулчейны для кросскомпиляции в другие архитектуры

apt тоже
устанавливать компоненты вроде clippy, fmt

почему не сделать их пакетами дистрибутива, зависящими от rust?
вы представляете, что будет, если каждый пакет в вашем дистрибутиве будет считать, что он лучше системного менеджера пакетов знает, как обновляться?
А в сфере разработки давно уже так и есть. Всё, что связано с npm, например TypeScript, обновляется не через системный менеджер. WebStorm тоже не из репа, а самостоятельно обновы качает. Всё, что в Python-инфраструктуре, обновляется через pip.
STM32CubeMX и прочее для разработки под stm32 обновы само качает. Android Studio само качает. Google Cloud SDK сам качает, MS Azure то же самое.
Ну и так далее.

Потому что это не так гибко и просто. Для разработки это неудобно.

Потому что система — это одно, а пользовательские эксперименты — это другое.
Точно так же при разработке на других языках — что там у себя ставят разработчики — никак не влияет на работу системы в целом. А когда доставляется конечный продукт — он запаковывается по всем правилам.
В той же Gentoo ничто не мешает сосуществовать системно устанавливаемому rustc, которым собираются различные пакеты, и пользовательскому, устанавливаемому через rustup, в который пользователь может наустанавливать не нужных в системе компонентов, возможно весьма "экспериментальных", не говоря уже о том, что не тестировавшихся на совместимость.
То же касается и библиотек. Многие библиотеки доступны в комплекте дистрибутива, но зачастую они там совсем не той версии, что нужна разработчику и поддержка нескольких установленных версий — далеко не всегда имеется. Поэтому библиотеки тянутся в проект в обход пакетных менеджеров, и хорошо, если у языка есть свой пакетный менеджер для этого.

Хм, а почему не про Cargo вопрос? Системные пакетные менеджеры библиотеки ставить умеют же.

Сrates гораздо ближе к пользовательским данным, чем к системным компонентам (т.е. я не вижу проблем чтобы иметь общесистемные crates и crates в .cargo одновременно. В perl я точно так же имею общесистемные плагины в /usr/share/perl5 и плагины, установленные в /home через metacpan — последнее ест-но на свой страх и риск). А вот компилятор Rust точно системный компонент.

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

Спс, я не знал про это, теперь ситуация понятнее

Большая фрагментация Линукс. Нужно оперативно доставлять все апдейты, в том числе и nightly. Во многих дистрах есть раст в пакетном менеджере, но не самой свежей версии.

Черт. До этого поста даже не подозревал что const fn могут работать не только с костантантными параметрами во время компиляции, но и как обычные функции.

НЛО прилетело и опубликовало эту надпись здесь

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации