Rust 编译器平台支持体系详解:Target 三级分层、目标三元组与 rustc_target 源码实现
2026/9/13 7:20:14 网站建设 项目流程

Rust 编译器平台支持体系详解:Target 三级分层、目标三元组与 rustc_target 源码实现

【免费下载链接】rustEmpowering everyone to build reliable and efficient software.项目地址: https://gitcode.com/GitHub_Trending/ru/rust

本文基于 rustc 官方文档src/doc/rustc/src/platform-support.md及其配套的 Target Tier Policy 展开,系统讲解 Rust 平台支持的三级(Tier)保障模型、target triple 命名机制、各层级目标的完整清单与基线要求,并结合 rustc_target 的源码结构剖析目标规格(Target spec)在编译器中的落地方式,帮助读者准确判断“我的目标平台能编译吗、能跑测试吗、能作为开发平台吗”这三个核心问题。

一、总体模型:三个 Tier 与 target triple

rustc 的平台支持文档将不同平台("targets")划分为三个层级(tier),每个层级对应不同的保障承诺(guarantees)。这是理解整篇文档的骨架:

层级保障语义官方构建产物自动化验证
Tier 1"guaranteed to work"(保证可用)为每个 Tier 1 目标构建官方二进制发布每次变更都会自动构建并跑测试,保证 Tier 1 目标构建成功且测试通过
Tier 2"guaranteed to build"(保证能构建)为每个 Tier 2 目标构建标准库(个别情况仅core)官方二进制自动构建保证目标仍可作为构建目标;但不总是跑测试,因此不保证一定产出可工作的构建
Tier 3代码库中存在支持,但 Rust 项目不自动构建或测试无官方构建可能工作也可能不工作

目标由target triple(目标三元组)唯一标识——即告诉编译器"应产生何种输出"的字符串,例如x86_64-unknown-linux-gnuaarch64-apple-darwin。在仓库中,每个内置目标的完整规格都对应一个源码文件,位于 compiler/rustc_target/src/spec/targets 目录,文件名即目标三元组(-换成_),例如 aarch64_apple_darwin.rs、x86_64_unknown_linux_gnu.rs。

原文档还提到:组件(如 rust-std、rustc、cargo 各组件)在各平台上的可用性历史可通过 rustup-components-history 页面查询(该链接为外部站点,此处不赘述),实际选型时可结合 platform-support.md 中的层级判断。

"Host Tools" 的额外含义

Tier 1 和 Tier 2 都可能额外支持host tools:即在目标上原生运行rustccargo等工具。带 host tools 的目标不仅可以作为交叉编译目标,还可以作为开发平台使用,并且自动化测试/构建会同时覆盖 host tools。所有 Tier 1(with host tools)与 Tier 2(with host tools)目标都支持完整标准库

二、Tier 1 with Host Tools:保证可用的核心平台清单

文档给出的 Tier 1 with host tools 完整清单如下(含基线要求与已知 ABI 限制脚注):

target说明
aarch64-apple-darwinARM64 macOS(11.0+,Big Sur+)
aarch64-pc-windows-msvcARM64 Windows MSVC
aarch64-unknown-linux-gnuARM64 Linux(内核 4.1+,glibc 2.17+)
i686-pc-windows-msvc32 位 MSVC(Windows 10+、Windows Server 2016+、Pentium 4)23
i686-unknown-linux-gnu32 位 Linux(内核 3.2+,glibc 2.17+,Pentium 4)2
x86_64-pc-windows-gnu64 位 MinGW(Windows 10+、Windows Server 2016+)
x86_64-pc-windows-msvc64 位 MSVC(Windows 10+、Windows Server 2016+)
x86_64-unknown-linux-gnu64 位 Linux(内核 3.2+,glibc 2.17+)

原文档同时声明:目前所有 Tier 1 目标都带有 host tools("At this time, all Tier 1 targets are Tier 1 with Host Tools"),因此独立的 "Tier 1" 小节当前没有单独列出目标。

从源码结构看,这些目标的规格文件集中在 compiler/rustc_target/src/spec/targets,例如 x86_64_pc_windows_msvc.rs、aarch64_unknown_linux_gnu.rs。而跨目标共享的 OS/工具链级配置(如 MSVC、MinGW、musl 链接行为)抽象在 compiler/rustc_target/src/spec/base 中,如 msvc.rs、windows_gnu.rs、linux_musl.rs,这解释了为何同名 OS 后缀(-windows-msvc-linux-musl)的多个目标可以复用同一套链接器与运行时假设。

三、Tier 2 with Host Tools:可作为开发平台的次级清单

Tier 2 目标"保证能构建":Rust 项目会为每个 Tier 2 目标构建标准库(个别情况仅core)的官方二进制,自动化构建确保目标每次变更后仍可作为构建目标;但由于不总是运行测试,不能保证产出一定可工作的构建——不过 Tier 2 目标往往也能工作得相当好,社区补丁始终欢迎。

另外两点与 Tier 3 相同的治理说明:

  • Tier 2 的目标特定代码在修改时不会被 Rust 团队严格审查,bug 是可能存在的,质量控制水平预期更低;
  • 注意rust-docs组件通常不为 Tier 2 目标构建,rustup 可能会安装相似 Tier 1 目标的文档作为替代。

Tier 2 with host tools 目标同样支持完整标准库。完整清单:

target说明
aarch64-pc-windows-gnullvmARM64 MinGW(Windows 10+),LLVM ABI
aarch64-unknown-freebsdARM64 FreeBSD
aarch64-unknown-linux-muslARM64 Linux,musl 1.2.5
aarch64-unknown-linux-ohosARM64 OpenHarmony
arm-unknown-linux-gnueabiArmv6 Linux(内核 3.2+,glibc 2.17)
arm-unknown-linux-gnueabihfArmv6 Linux,hardfloat(内核 3.2+,glibc 2.17)
armv7-unknown-linux-gnueabihfArmv7-A Linux,hardfloat(内核 3.2+,glibc 2.17)
armv7-unknown-linux-ohosArmv7-A OpenHarmony
loongarch64-unknown-linux-gnuLoongArch64 Linux,LP64D ABI(内核 5.19+,glibc 2.36),要求 LSX
loongarch64-unknown-linux-muslLoongArch64 Linux,LP64D ABI(内核 5.19+,musl 1.2.5),要求 LSX
powerpc-unknown-linux-gnuPowerPC Linux(内核 3.2+,glibc 2.17)
powerpc64-unknown-linux-gnuPPC64 Linux(内核 3.2+,glibc 2.17)
powerpc64-unknown-linux-muslPPC64 Linux(内核 4.19+,musl 1.2.5)
powerpc64le-unknown-linux-gnuPPC64LE Linux(内核 3.10+,glibc 2.17)
powerpc64le-unknown-linux-muslPPC64LE Linux(内核 4.19+,musl 1.2.5)
riscv64gc-unknown-linux-gnuRISC-V Linux(内核 4.20+,glibc 2.29)
riscv64gc-unknown-linux-muslRISC-V Linux(内核 4.20+,musl 1.2.5)
s390x-unknown-linux-gnuS390x Linux(内核 3.2+,glibc 2.17)
x86_64-apple-darwin64 位 macOS(10.12+,Sierra+)
x86_64-pc-windows-gnullvm64 位 x86 MinGW(Windows 10+),LLVM ABI
x86_64-unknown-freebsd64 位 x86 FreeBSD
x86_64-unknown-illumosillumos
x86_64-unknown-linux-musl64 位 Linux,musl 1.2.5
x86_64-unknown-linux-ohosx86_64 OpenHarmony
x86_64-unknown-netbsdNetBSD/amd64
x86_64-pc-solaris64 位 x86 Solaris 11.4
sparcv9-sun-solarisSPARC V9 Solaris 11.4

从源码结构看,"带 host tools" 与 "仅编译目标" 的差异体现在目标规格的多个选项上(如链接器、动态库扩展、panic 策略等)。以 x86_64_apple_darwin.rs 这类 Tier 1 目标为例,其规格直接内联了完整的Target定义;而 spec/mod.rs 中提供了load_builtinload_all_builtinsexpect_builtin等函数,说明内置目标是通过"按三元组查表"的方式被rustc加载的——这也解释了为什么目标命名必须与既有目标保持一致(命名即 API)。

四、Tier 2 without Host Tools:编译目标全景(含 std 支持列)

该层级同样是"保证能构建",但不提供在目标上原生运行rustc/cargo的保证(个别目标仍可在 host 列 标记,见下文 Tier 3)。表格中std列的取值含义(这是选型时最关键的信号):

  • :完整标准库可用;
  • *:目标仅支持no_std开发;
  • ?:标准库支持是 work-in-progress(进行中)。

完整清单(按原文档分组,覆盖 Apple 移动平台、Android、裸机、WebAssembly、UEFI、SGX 等类别):

Apple 生态(iOS / tvOS / visionOS / watchOS / Mac Catalyst)

targetstd说明
aarch64-apple-iosARM64 iOS
aarch64-apple-ios-macabiARM64 Mac Catalyst
aarch64-apple-ios-simARM64 iOS 模拟器
aarch64-apple-tvosARM64 tvOS
aarch64-apple-tvos-simARM64 tvOS 模拟器
aarch64-apple-visionosARM64 visionOS
aarch64-apple-visionos-simARM64 visionOS 模拟器
aarch64-apple-watchosARM64 watchOS
aarch64-apple-watchos-simARM64 watchOS 模拟器
x86_64-apple-ios64 位 x86 iOS
x86_64-apple-ios-macabix86_64 Mac Catalyst

Android 与 Fuchsia

targetstd说明
aarch64-linux-androidARM64 Android
arm-linux-androideabiArmv6 Android
armv7-linux-androideabiArmv7-A Android
thumbv7neon-linux-androideabiThumb2 模式 Armv7-A Android,带 NEON
x86_64-linux-android64 位 x86 Android
i686-linux-android32 位 x86 Android(Pentium 4 及若干扩展)2
aarch64-unknown-fuchsiaARM64 Fuchsia
x86_64-unknown-fuchsia64 位 x86 Fuchsia

裸机(no_std)目标

targetstd说明
aarch64-unknown-none*裸机 ARM64,hardfloat
aarch64-unknown-none-softfloat*裸机 ARM64,softfloat
armv7a-none-eabi/armv7a-none-eabihf*裸机 Armv7-A(hardfloat 变体)
armv7r-none-eabi/armv7r-none-eabihf*裸机 Armv7-R
armv8r-none-eabihf*裸机 Armv8-R,hardfloat
thumbv7a-none-eabi/thumbv7a-none-eabihf*Thumb 模式裸机 Armv7-A
thumbv7r-none-eabi/thumbv7r-none-eabihf*Thumb 模式裸机 Armv7-R
thumbv8r-none-eabihf*Thumb 模式裸机 Armv8-R,hardfloat
thumbv6m-none-eabi*裸机 Armv6-M
thumbv7em-none-eabi/thumbv7em-none-eabihf*裸机 Armv7E-M
thumbv7m-none-eabi*裸机 Armv7-M
thumbv8m.base-none-eabi*裸机 Armv8-M Baseline
thumbv8m.main-none-eabi/thumbv8m.main-none-eabihf*裸机 Armv8-M Mainline
loongarch32-unknown-none/loongarch32-unknown-none-softfloat*LoongArch32 裸机(ILP32D / ILP32S ABI)
loongarch64-unknown-none/loongarch64-unknown-none-softfloat*LoongArch64 裸机(LP64D / LP64S ABI)
s390x-unknown-none-softfloat*裸机 S390x(softfloat ABI)
x86_64-unknown-none*Freestanding/裸机 x86_64,softfloat

RISC-V 裸机

targetstd说明
riscv32i-unknown-none-elf*裸机 RISC-V(RV32I)
riscv32im-unknown-none-elf*裸机 RISC-V(RV32IM)
riscv32imac-unknown-none-elf*裸机 RISC-V(RV32IMAC)
riscv32imafc-unknown-none-elf*裸机 RISC-V(RV32IMAFC)
riscv32imc-unknown-none-elf*裸机 RISC-V(RV32IMC)
riscv64gc-unknown-none-elf*裸机 RISC-V(RV64IMAFDC)
riscv64im-unknown-none-elf*裸机 RISC-V(RV64IM)
riscv64imac-unknown-none-elf*裸机 RISC-V(RV64IMAC)

32 位 x86 Linux 与其他系统目标

targetstd说明
i586-unknown-linux-gnu32 位 Linux(内核 3.2+,glibc 2.17,初代 Pentium)1
i586-unknown-linux-musl32 位 Linux(musl 1.2.5,初代 Pentium)1
arm-unknown-linux-musleabi/arm-unknown-linux-musleabihfArmv6 Linux,musl 1.2.5(hardfloat 变体)
armv5te-unknown-linux-gnueabi/armv5te-unknown-linux-musleabiArmv5TE Linux(内核 4.4+,glibc 2.23;或 musl 1.2.5)
armv7-unknown-linux-gnueabi/armv7-unknown-linux-musleabi/armv7-unknown-linux-musleabihfArmv7-A Linux(内核 4.15+,glibc 2.27;或 musl 1.2.5)
i686-unknown-freebsd32 位 x86 FreeBSD(Pentium 4)2
i686-unknown-linux-musl32 位 Linux,musl 1.2.5(Pentium 4)2
i686-pc-windows-gnu/i686-pc-windows-gnullvm32 位 MinGW(Windows 10+,Pentium 4)2(后者为 LLVM ABI)
sparc64-unknown-linux-gnuSPARC Linux(内核 4.4+,glibc 2.23)
thumbv7neon-unknown-linux-gnueabihfThumb2 模式 Armv7-A Linux,带 NEON(内核 4.4+,glibc 2.23)
riscv64a23-unknown-linux-gnuRISC-V Linux(内核 6.8.0+,glibc 2.39),见 riscv64a23-unknown-linux-gnu.md
x86_64-unknown-linux-gnux3264 位 Linux(x32 ABI,内核 4.15+,glibc 2.27)
x86_64-unknown-redoxRedox OS
x86_64-fortanix-unknown-sgx64 位 Intel SGX,Fortanix ABI

特殊用途目标(UEFI、WASM、GPU、Sanitizer)

targetstd说明
aarch64-unknown-uefi?ARM64 UEFI
i686-unknown-uefi?32 位 UEFI(Pentium 4,softfloat)3
x86_64-unknown-uefi?64 位 UEFI
wasm32-unknown-unknownWebAssembly
wasm32-unknown-emscripten经由 Emscripten 的 WebAssembly
wasm32-wasip1/wasm32-wasip1-threadsWASI Preview 1(线程变体)
wasm32-wasip2/wasm32-wasip3WASIp2 / WASIp3
wasm32v1-none*限制为 WebAssembly 1.0 特性且无 imports
arm64ec-pc-windows-msvcArm64EC Windows MSVC
nvptx64-nvidia-cuda*--emit=asm生成可在 NVIDIA GPU 上运行的 PTX 代码
x86_64-unknown-linux-gnuasan64 位 Linux(内核 3.2+,glibc 2.17+),默认开启 ASAN
x86_64-unknown-linux-gnumsan同上,默认开启 MSAN
x86_64-unknown-linux-gnutsan同上,默认开启 TSAN

五、Tier 3:代码库中存在但不保证构建与测试

Tier 3 目标是 rustc 代码库中存在支持、但 Rust 项目不自动构建或测试的目标——"may or may not work",也没有官方构建。其表格比 Tier 2 多一列host,标记代码库是否包含为这些目标构建 host tools(即在本机运行rustc/cargo)的支持。该层级的目标清单覆盖非常广,此处按类别摘录代表性条目(完整清单见原文档):

操作系统类(QNX、FreeBSD/OpenBSD/NetBSD 变体、Redox、NuttX、VxWorks 等)

targetstdhost说明
aarch64-unknown-nto-qnx700/aarch64-unknown-nto-qnx710/aarch64-unknown-qnx?/✓/✓QNX SDP 7.0 / 7.1(io-pkt / io-sock 网络栈)/ 8.0+
aarch64-unknown-openbsdARM64 OpenBSD
x86_64-unknown-openbsd64 位 OpenBSD
x86_64-unknown-dragonfly/x86_64-unknown-haiku/x86_64-unknown-hurd-gnuDragonFlyBSD / Haiku / GNU/Hurd
x86_64-unknown-redox/aarch64-unknown-redox/riscv64gc-unknown-redoxRedox OS
aarch64-unknown-nuttx及各 ARM/Thumb 变体NuttX 嵌入式 OS
x86_64-wrs-vxworks/aarch64-wrs-vxworksVxWorks
x86_64-pc-cygwin64 位 x86 Cygwin
powerpc64-ibm-aix?64 位 AIX(7.2 及以上)

主机工具可用(host ✓)的例子aarch64-unknown-linux-gnu_ilp32aarch64_be-unknown-linux-gnui686-apple-darwinmips-unknown-linux-gnumips64-unknown-linux-gnuabi64等——从表格可见 host 列与 Tier 2 的 host tools 是两套独立的标注:Tier 3 的host ✓仅表示"代码库包含构建 host tools 的支持",并不附带 Tier 2/1 的 CI 保障。

裸机/微控制器与游戏机

targetstd说明
avr-none*AVR 微控制器,需要-Zbuild-std=core-Ctarget-cpu=...
bpfel-unknown-none/bpfeb-unknown-none*BPF(小端/大端)
[msp430-none-elf](msp430-none-elf*16 位 MSP430 微控制器
mipsel-sony-psp同类 /mipsel-sony-psx/powerpc64-sony-ps3/armv6k-nintendo-3ds/aarch64-nintendo-switch-freestanding*/?游戏机目标(PSP、PSX、PS3、3DS、Switch Horizon)
armv7-sony-vita-newlibeabihfPS Vita(需 VITASDK 工具链)
xtensa-esp32-espidf/xtensa-esp32s2-espidf/xtensa-esp32s3-espidfXtensa ESP32 系列(ESP-IDF)
xtensa-esp32-none-elf*Xtensa 裸机变体
riscv32imac-esp-espidf/riscv32imafc-esp-espidfRISC-V ESP-IDF
amdgcn-amd-amdhsa*AMD GPU,用-Ctarget-cpu=gfx...指定具体 GPU

MIPS 家族(含 sNaN 限制脚注)

targetstd说明
mips-unknown-linux-gnu/mips-unknown-linux-musl/mips-unknown-linux-uclibcMIPS Linux(内核 4.4,glibc 2.23 等)4
mips64-unknown-linux-gnuabi64/mips64el-unknown-linux-gnuabi64MIPS64 N64 ABI Linux(内核 4.4,glibc 2.23)4
mipsel-unknown-linux-gnu/mipsel-unknown-linux-musl/mipsel-unknown-linux-uclibcMIPS 小端 Linux 各 libc 变体4
mipsel-sony-psx/mipsel-nonemipsel-unknown-none*裸机/游戏机 MIPS(LE)4
mips-mti-none-elf/mipsel-mti-none-elf*裸机 MIPS32r2(BE/LE)softfloat4
mipsisa32r6-unknown-linux-gnu等 MIPS Release 6 变体?/✓MIPS R6 Linux

从源码结构看,Tier 3 目标与 Tier 1/2 目标在rustc_target中的地位是相同的——都在 spec/targets 下有一等公民的规格文件(如 avr_none.rs、bpfel_unknown_none.rs、xtensa_esp32_espidf.rs),层级差异体现在CI 构建/测试配置而非编译器代码本身。此外,rustc_target还支持以 JSON 形式外部提供目标规格(见 spec/json.rs),这是rustc --print target-list之外的第三方目标扩展通道,也是--target指定 JSON 文件时走的路径。

六、各目标专项文档的入口

每个有专项文档的目标,其说明页位于 src/doc/rustc/src/platform-support 目录,由 TEMPLATE.md 统一模板生成。典型的入口页包括:

  • apple-darwin.md:macOS(含aarch64-apple-darwinx86_64-apple-darwin
  • windows-msvc.md / windows-gnu.md / windows-gnullvm.md:Windows 三种工具链
  • freebsd.md、netbsd.md、openbsd.md
  • android.md:Android NDK 各 ABI
  • riscv64gc-unknown-linux-gnu.md / riscv64gc-unknown-linux-musl.md:RISC-V Linux
  • wasm32-unknown-unknown.md、wasm32-wasip1.md 等 WASM 系列
  • unknown-uefi.md:UEFI 驱动开发(注意 UEFI 目标的 std 仍标为?,即标准库支持进行中)

七、层级如何落地:源码视角的三层证据链

把文档与仓库对应起来,可以形成一条清晰的证据链:

  1. 目标规格定义:每个内置目标在 compiler/rustc_target/src/spec/targets 有一个.rs文件,按三元组命名;OS/工具链级共享逻辑(MSVC 链接、MinGW、musl、FreeBSD、WASM 等)抽到 spec/base 中复用。
  2. 规格加载:spec/mod.rs 提供load_builtin(按目标名查找内置规格)、load_all_builtins(枚举全部内置目标)与expect_builtin(要求必须存在的内置目标,供构建系统使用)等入口;文件头注释即说明目标来源之一是"checking builtin targets for${TUPLE}"。
  3. 一致性校验:spec/consistency.rs 对规格做约束检查,spec/tuple.rs 定义了TargetTuple(即三元组的结构化解析),这也是平台支持文档中"命名必须与既有目标一致"这一政策得以在编译层面执行的机制。
  4. 调用约定与 ABI 细节:callconv/ 目录承载各架构的调用约定实现,abi_map.rs 描述目标 ABI 映射——这正是文档脚注中"x87 浮点返回"、"MSVC 对齐"等 ABI 限制在编译器中的对应位置。
  5. 构建系统:src/bootstrap 驱动整个发行版构建,其 defaults 目录提供x.py的默认配置(bootstrap.dist.toml 等),各 Tier 目标在 CI 中"是否构建、是否跑测试"正是由这一层配置决定的,而非由rustc_target的规格决定。

八、新增/提升目标的操作路径

如果读者需要为自己的平台争取 Tier 2 支持或引入 Tier 3 目标,Target Tier Policy 给出了明确的流程与要求摘要:

  • 新目标一律从 Tier 3 起步,在rust-lang/rust提交 PR:在 PR 描述中引用 Tier 3 政策逐条响应;在 src/doc/rustc/src/platform-support 下用模板 TEMPLATE.md 新增目标说明页;把目标加入文档 SUMMARY 与 platform-support.md(后者必须逐字列出所有目标名),并链接新建的说明页;最后通过r? compiler把 PR 指派给编译器团队。
  • 命名即承诺:Tier 3 要求目标命名与既有目标保持一致(同一 CPU/OS 用同一名字)、尽量避免易产生误解的名字、优先只使用字母/数字/连字符/下划线(点号会在 Cargo 中引发问题)。
  • 渐进式引入技巧:若新目标想支持std,会传递性地需要cclibc的支持。建议先加入一个最小的#![no_core]目标规格rustc认识该目标,待cclibc支持到位后再跟进std支持,以打破循环依赖。
  • 升级(promotion)要求:目标必须先获得下一低层级的批准,并在该层级"度过合理时间"(通常至少跨越多个 stable 发布)才能提出升级提案;Tier 2 需要至少 2 名维护人、CI 可靠构建、文档说明交叉编译与(尽量通过模拟)运行测试的方法、基线期望(CPU/OS/库版本)文档化;Tier 1 需要至少 3 名维护人、CI 中构建并全量通过测试、完整(或尽可能完整)的标准库、以及跨组织生产级使用需求。
  • 降级与移除:不达标目标可被降级或移除,提案会广泛通告;历史上在目标维护方无法及时适配新语言特性时(例如引入u128/i128时),Rust 团队也可能临时在 nightly 中禁用相关目标。

九、选型速查:如何读这张平台支持表

  1. 看 Tier:需要"改了 Rust 也不会坏"的保证 → Tier 1;只需要标准库官方构建 → Tier 2;试验性/自托管 → Tier 3。
  2. 看 host tools:要在目标机器上跑rustc/cargo做本地开发 → 选带 host tools 的层级(当前所有 Tier 1 均含 host tools)。
  3. 看 std 列完整标准库;*no_std(配合 no_std 生态 中的裸机目标使用,通常需要-Zbuild-std);?进行中(如 UEFI、AIX、Managarm 等)。
  4. 看基线脚注:内核/glibc/musl 版本基线(如 LoongArch64 要求内核 5.19+ 且LSX 扩展riscv64a23-unknown-linux-gnu要求内核 6.8.0+);以及 ABI 脚注(i686 浮点返回走 x87、MSVC 32 位对齐、MIPS sNaN 反转、i586 x87 舍入不合规)——这些直接决定 unsafe 代码与 C 互操作的边界。
  5. 验证手段:用rustc --print target-list可列出当前编译器内置的全部目标(对应 spec/mod.rs 中的load_all_builtins);构建 Rust 自身时的目标选择由 x.py 驱动,默认配置见 src/bootstrap/defaults。

参考路径汇总

  • 平台支持总表(本文主体来源):src/doc/rustc/src/platform-support.md
  • 目标层级政策:src/doc/rustc/src/target-tier-policy.md
  • 目标规格源码:compiler/rustc_target/src/spec/mod.rs、compiler/rustc_target/src/spec/targets、compiler/rustc_target/src/spec/base
  • 专项目标文档目录:src/doc/rustc/src/platform-support
  • 构建默认配置:src/bootstrap/defaults/README.md

适用前提:本文内容对应**当前仓库(rust 主干)**中的平台支持状态,层级与目标清单随版本演进(例如目标升降级会在稳定版之间生效);引用第三方组件可用性历史、issue 编号时请以 rustup-components-history 与对应 issue 页面为准。


  1. i586 浮点限制i586目标使用的 x87 寄存器与指令不提供 IEEE-754 合规行为,尤其在舍入和 NaN payload 位方面。

    ↩ ↩
  2. i686 浮点返回 ABI 限制:受 C ABI 限制,i686目标的浮点支持不合规——浮点返回值通过 x87 寄存器传递,NaN 的 payload 位可能丢失。使用默认 Rust ABI 的函数不受影响。

    ↩ ↩ ↩ ↩ ↩ ↩
  3. win32 MSVC 对齐限制:由于 MSVC 的非标准行为,该目标上的原生 C 代码可能将对齐要求超过 4 字节的类型(如u64/i64)错误地对齐为仅 4 字节。Rust 应用了若干缓解措施,但依赖"引用一定正确对齐"这一假设的 unsafe 代码仍可能因此出现 unsoundness。

    ↩ ↩
  4. sNaN 位表示反转:在这些 MIPS 目标上,signaling NaN 的位表示与 Rust 的预期相反,期望返回 quiet NaN 的操作可能返回 signaling NaN。

    ↩ ↩ ↩ ↩ ↩

【免费下载链接】rustEmpowering everyone to build reliable and efficient software.项目地址: https://gitcode.com/GitHub_Trending/ru/rust

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询