Почему скомпилированный «Hello World», на Rust занимает на диске 10 Мегабайт?

Да и у меня также вопрос. Почему, если я напишу проект с использованием какой-то внешней библиотеки, то она будет скачана и скомпилирована, а затем в другом проекте мне понадобится таже библиотека, и в итоге она будет опять скачена и скомпилина, и в итоге на моем диске валяются проекты по 5+ GB.

Почему нельзя было сделать как в python, один раз установил либру, пользуешься везде!

Разработчики Rust собираются фиксить это?
  • Вопрос задан
  • 259 просмотров
Решения вопроса 1
ozkriff
@ozkriff
Rust э̶н̶т̶у̶з̶и̶а̶с̶т сектант, хобби игродел
Почему скомпилированный «Hello World», на Rust занимает на диске 10 Мегабайт?


10мб звучит многовато. порядка 2-5 скорее должен - точнее зависит от платформы.
А место во влоб собранном "пустом" helloworld'е занимают, по идее, куски стандартной либы - println! хоть и выглядит просто, но тянет за собой машинерию форматирования, обработки потенциальных ошибок, раскрутки, бектрейсов и т.п. И все это с отладочными символами.

Почему нельзя было сделать как в python, один раз установил либру, пользуешься везде!


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

Разработчики Rust собираются фиксить это?


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

1) прописать нанужном уровне в `.cargo/config`:

[build]
target-dir = "/hone/username/myrusttarget"


Или воспользоваться переменной окружения:

export CARGO_TARGET_DIR = "/hone/username/myrusttarget"


Но надо учитывать, что у некоторых нетривиальных зависимостей могут возникнуть проблемы с фичами или замороченной логикой build.rs скриптов и могут перестать работать не рассчитанные на это cargo плагины.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka
Токсичный шарпист
Почему нельзя было сделать как в python, один раз установил либру, пользуешься везде!

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

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

Почему скомпилированный «Hello World», на Rust занимает на диске 10 Мегабайт?

Зависит от параметров. Скорее всего что-то из этого в разных сочетаниях:
1. Много кода, включая зависимости
2. Собрано без оптимизаций по размеру
3. Включена информация для отладчика
Ответ написан
Почему, если я напишу проект с использованием какой-то внешней библиотеки, то она будет скачана и скомпилирована, а затем в другом проекте мне понадобится таже библиотека, и в итоге она будет опять скачена и скомпилина, и в итоге на моем диске валяются проекты по 5+ GB.

Т.е. вы хотите, чтобы Rust/Cargo тем или иным образом интегрировались с системным пакетным менеджером? Тогда предлагаю почитать вот эту статью: https://habr.com/ru/post/433052/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы