什么是 MSVC ?
the Microsoft Visual C++ compiler and libraries toolset 。微软 Visual C++ 编译器和库工具集。
为什么要有 MSVC ?
MSVC的目标是成为Windows上针对Windows的最佳编译器选择,无论您选择使用哪种编辑器或IDE。 我们旨在通过在以下关键领域上进行持续投资来实现我们的目标:完全符合C ++,更好的错误和警告,运行时性能,可靠性,构建吞吐量和最佳安全性。
Rust 为什么要支持 MSVC 以及如何支持 ?
因为 Rust 要支持 Windows 开发,而 Windows 上面有两类 ABI :
- Visual Studio使用的本机(MSVC)ABI
- GCC工具链使用的GNU ABI。
您需要哪种版本的Rust很大程度上取决于您要与哪些C / C ++库进行互操作:
- 要与Visual Studio生产的软件互操作,请使用Rust的MSVC版本;
- 要与使用MinGW / MSYS2工具链构建的GNU软件互操作,请使用GNU构建。
以MSVC ABI为目标时,Rust还需要安装Visual Studio 2013(或更高版本)或Visual C ++ Build Tools 2019,以便rustc可以使用其链接器。 对于Visual Studio,请确保选中“ C ++工具”和“ Windows 10 SDK”选项。 基本使用GNU构建不需要额外的软件安装。
如果你计划仅使用 Rust 库和可以与 MinGW 一起构建和使用的各种开源库,则可以完全避免使用Microsoft 的工具。 只需将 Rust 切换到x86_64-pc-windows-gnu目标即可。
但是,如果你打算使用本地Windows库进行Windows开发,则需要Microsoft的链接器,并且应该使用 Rust 的 x86_64-pc-windows-msvc 目标与之兼容。 由于Windows上的大多数人都对Windows开发感兴趣,因此这是默认设置。
而 Rust却还需要几个G的 msvc 才能编译?
因为找不到人实现必要的功能,不得不依赖Windows sdk 。
go 为什么不需要 MSVC ?
因为go根本没做 msvc 的支持(不是默认支持,需要你自己手工再做处理),你用 cgo 只支持用 GCC。 (不晓得现在支持 msvc 没有)。
为什么 Rust 不能像 go 那样,不依赖 msvc ?
所以,你觉得呢?
这正是 Rust 和 Go 设计目标的差别了。
Rust 语言是一个通用的系统级语言,Go 语言则不是这个目标。所以 Go 可以不依赖 MSVC ,Rust 则不可以。
未来,Rust 将越来越倾向于使用 LLVM LLD 链接器,而不是平台本机链接器(Microsoft或GNU binutils)。 LLD 是通用的,旨在支持所有平台和ABI。 因此,未来预计将不需要任何其他工具。