Комментарии 19
Как совсем недавно уточнялось в гиттере, смысл Pin
не просто в сохранении адреса объекта в памяти, но и сохранения там самого объекта, то есть невозможность его перезаписи другим объектом такого же типа по данному неизменному адресу.
rustup update stable
Кто-нибудь может плз объяснить, почему бы этим не заниматься пакетному менеджеру дистрибутива?
Во-первых, кто будет каждые шесть недель оперативно выкатывать обновления во все репозитории? Во-вторых, rustup всё равно не лишний, хотя бы как и менеджер версий (не так и мало тех, кому нужны одновременно установленные stable и nightly или, скажем, x86_64 и wasm).
Во-первых, кто будет каждые шесть недель оперативно выкатывать обновления во все репозитории?
Эмм, участник команды разработчиков rust, отвечающий за поддержку в популярных дистрибутивах?
не так и мало тех, кому нужны одновременно установленные stable и nightly или, скажем, x86_64 и wasm
Известные мне менеджеры пакетов поддерживают одновременно наличие различных версий пакета в системе. У меня прямо сейчас стоят gcc7 и 8 под x86-64 и gcc под arm.
Потому что 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 вопрос? Системные пакетные менеджеры библиотеки ставить умеют же.
А работы по проталкиванию раста в пакетные менеджеры популярных осей вполне себе ведутся (под федору с дебианом, как минимум), но возня с заморочками и политиками каждого пакетного менеджера и его экосистемы это на порядок более сложный и долгий процесс, чем сделать самим хорошее частное решение для конкретных проблем.
Большая фрагментация Линукс. Нужно оперативно доставлять все апдейты, в том числе и nightly. Во многих дистрах есть раст в пакетном менеджере, но не самой свежей версии.
Черт. До этого поста даже не подозревал что const fn могут работать не только с костантантными параметрами во время компиляции, но и как обычные функции.
Выпуск Rust 1.33