TL; DR: поскольку у каждого есть набор инструментов C.
Небольшая коррекция: rustc не требует набора инструментов C ++, он требует только набор инструментов C.Примечательно, что двоичные файлы, созданные с помощью rustc, зависят только от libc
(или эквивалентного), но не от libstdc++
(или эквивалентного).
Как показал пример Go, можно не требовать CНабор инструментов.Вам нужно только повторно реализовать его функциональность:
- Вам необходимо реализовать свой собственный компоновщик, соблюдая формат целевой платформы.
- Вам необходимо реализовать свой собственный libc (он же слой ОС)).
У этого есть свои преимущества, такие как, возможно, более быстрая компиляция или более простая кросс-компиляция, однако при реализации есть затраты, и легко получить .что-то не так .
Сообщество Rust предпочло приложить больше усилий к языку, чем к инструментальной цепочке, и поэтому повторное использование стандартной инструментальной цепочки было проще.В частности, для rustc потребуется компоновщик платформы (ld
в Unix) и платформа, эквивалентная libc
.
Это не основной принцип проектирования, это просто прагматичный подход, и существуют проекты для сокращенияна этих зависимостях:
- Использование lld вместо ld позволит отправить один компоновщик с rustc, который может быть нацелен на все платформы.
- Использование cranelift в качестве альтернативного бэкенда может также удалить зависимость от ld.
- Проект Redox работает на relibc , переносимой реализации Rust API
libc
.
Все они находятся в стадии разработки, и в то же время для rustc потребуется набор инструментов C.Более того, даже в обозримом будущем я ожидаю, что rustc потребует инструментальную цепочку C для целей, еще не охваченных какой-либо цепочкой инструментов Rust, просто чтобы вы могли использовать цель, не дожидаясь некоторой гипотетической разработки.