新闻详情

新闻详情

首页 / 资讯中心 / 详情

Dart SDK(sdk1/sdk)VM 支持架构全景:从 x64、ARM 到 RISC-V(rva20/rva22/rva23)的官方矩阵与源码实现解析

发布时间:2026/9/26 2:36:13来源:尧图网络
Dart SDK(sdk1/sdk)VM 支持架构全景:从 x64、ARM 到 RISC-V(rva20/rva22/rva23)的官方矩阵与源码实现解析
编程语言编译器语言运行时标准库开发工具【免费下载链接】sdkThe Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more.项目地址https://gitcode.com/gh_mirrors/sdk1/sdk点击查看免费下载本文基于 Dart SDK 官方文档 runtime/docs/supported-architectures.md 展开系统梳理 Dart VM 在各操作系统上官方支持的 CPU 架构矩阵并结合仓库源码构建配置、RISC-V 常量定义、FFI ABI 枚举等深入解释armv7/armv8/armv8.1、rva20/rva22/rva23等架构代号的真实含义、扩展集构成与构建方式。读完本文你将能够对照官方矩阵准确判断目标平台是否受支持理解 RISC-V 各 ABI 层级的指令扩展差异并知道如何通过仓库中的 GN 配置确认与切换目标架构。一、官方支持架构总览Dart VM 在六大操作系统上均有明确的架构支持矩阵。下表为仓库文档 runtime/docs/supported-architectures.md 的完整原文是判断「某平台 某 CPU 架构组合是否官方支持」的最权威依据操作系统支持的架构Androidx64, armv7, armv8, rva23u64Fuchsiax64, armv8, rva22u64viOSarmv7, armv8Linuxx64, armv7, armv8, rva20u32, rva20u64macOSx64, armv8.1Windowsx64, armv8此外文档明确指出历史版本的 Dart VM 还曾支持 mipsel、armv6、armv5te 和 ia32这些架构在当前的官方支持矩阵中已不再出现。对照表格可以归纳出几个基本结论x64 是唯一横跨全部六大操作系统的架构是 Dart VM 的通用主力目标armv864 位 ARM覆盖 Android、Fuchsia、iOS、Linux、macOS、Windows 六个平台其中 macOS 上特指 armv8.1armv732 位 ARM仅保留在 Android、iOS、Linux其余平台不再支持 32 位 ARMRISC-V 按平台采用了不同的 ABI 层级Android 为rva23u64Fuchsia 为rva22u64vLinux 同时支持 32 位与 64 位rva20u32与rva20u64。二、架构代号释义armv7、armv8、armv8.1 与 RVA 系列矩阵中的架构代号并非随意命名而是与 Dart VM 代码库中的宏定义、汇编器后端一一对应。1. ARM 架构代号armv732 位 ARMARMv7-A对应源码中的TARGET_ARCH_ARM在 Android、iOS、Linux 上仍受支持主要用于老旧移动设备与嵌入式场景armv864 位 ARMARMv8-A即 AArch64对应TARGET_ARCH_ARM64是当前移动与桌面端的主力armv8.1指 macOS 上的 Apple Silicon 衍生指令集源码中称为arm64e对应宏TARGET_ARCH_ARM64E。arm64e 是在 arm64 基础上叠加 Pointer Authentication 等 armv8.1/8.3 安全扩展的 Apple 专有变体因此文档为 macOS 单独标注armv8.1。2. RISC-V 的 RVA 层级与 u32/u64 后缀rva20u64这类写法遵循 RISC-V 官方 profile 命名规范rva表示这是面向应用处理器Application的 profile数字20、22、23是 profile 的版本号u32/u64表示基座寄存器宽度u32即 RV3232 位u64即 RV6464 位末尾的v表示在 profile 基础之上额外启用 V向量扩展。对照 runtime/vm/constants_riscv.h 中RVA20、RVA22、RVA23的精确定义可以清楚看到每一级的指令扩展集合差异RVA20 RV_GC即 RV_GInteger Multiply/Divide Atomic Single/Double 浮点加上 RV_C压缩指令是最基础的通用组合RVA22 RV_GCB在 RVA20 基础上追加了位操作扩展族 RV_BZba地址生成、Zbb基础位操作、Zbs单比特指令RVA23 RVA22 | RV_V | RV_Zicond | RV_Zcb | RV_Zfa | RV_Zimop | RV_Zcmop | RV_Zawrs在 RVA22 之上进一步加入向量扩展 RV_V、条件操作 Zicond、更多压缩指令 Zcb、额外浮点指令 Zfa、may-be-operations Zimop/Zcmop 以及等待保留集 Zawrs是目前层级最完整的 profile。3. 基线扩展集随操作系统切换源码中RV_baseline的选择是理解「为什么 Android 用 rva23、Fuchsia 用 rva22v、Linux 用 rva20」的关键。在 runtime/vm/constants_riscv.h 中#if defined(DART_TARGET_OS_ANDROID) static constexpr ExtensionSet RV_baseline RVA23; #elif defined(DART_TARGET_OS_FUCHSIA) static constexpr ExtensionSet RV_baseline RVA22 | RV_V; #else static constexpr ExtensionSet RV_baseline RVA20; #endif也就是说Dart VM 针对 RISC-V 生成的代码所依赖的基线指令集由目标操作系统决定Android 生态的 RISC-V 硬件普遍较新因而采用最完整的 RVA23Fuchsia 采用 RVA22 并在其上显式追加向量扩展对应文档中的rva22u64v而通用 Linux 场景为兼容更广泛包括较老的硬件默认以 RVA20 为基线。这也解释了为何同一套 Dart 代码在不同平台的 RISC-V 后端上代码生成策略会有所差异——这属于底层实现的合理兼容性取舍。三、仓库中的架构实现证据编译器后端与 CPU 探测支持矩阵不只是文档声明在 runtime/vm 目录中每一套架构都有完整的代码生成、调试与指令补丁实现。以目录文件为证汇编器compiler/assembler/assembler_riscv.h、assembler_arm.cc、assembler_arm64.cc、assembler_x64.cc、assembler_ia32.cc等指令编码与常量runtime/vm/constants_riscv.h上文 RVA 定义的出处、constants_arm64.h、constants_x64.h等内建函数intrinsifiercompiler/asm_intrinsifier_riscv.cc、asm_intrinsifier_arm64.cc等调试器支持debugger_riscv.cc、debugger_arm64.cc、debugger_x64.cc等代码补丁code_patcher_riscv.cc、code_patcher_arm64.cc、code_patcher_x64.cc等CPU 能力探测runtime/vm/cpuinfo_linux.cc、cpuinfo_android.cc、cpuinfo_fuchsia.cc、cpuinfo_macos.cc、cpuinfo_win.cc运行时据此识别当前处理器特性并选择代码路径。这些文件的存在说明支持矩阵中的每一种架构在 VM 中都不是「文档级占位」而是拥有独立的指令集后端实现。另外由于 armv6、armv5te、mipsel 等历史架构在 runtime/vm 中已没有对应的code_patcher_*、constants_*后端文件也从侧面印证了官方文档「过去版本曾支持、现已移除」的表述。四、构建层面的架构配置dart_target_arch 与压缩指针约束在构建 Dart SDK 时目标架构由 GN 参数dart_target_arch控制。仓库 runtime/BUILD.gn 中的dart_arch_config明确列出了当前构建系统接受的架构取值arm→TARGET_ARCH_ARMarm64→TARGET_ARCH_ARM64arm64e→ 同时定义TARGET_ARCH_ARM64与TARGET_ARCH_ARM64E即 macOS armv8.1x64→TARGET_ARCH_X64ia32/x86→TARGET_ARCH_IA32riscv32→TARGET_ARCH_RISCV32riscv64→TARGET_ARCH_RISCV64其中ia32仍保留在构建系统中但它已从官方支持矩阵中消失说明 ia32 目前更多是作为遗留/实验性构建目标存在。同一文件还体现了压缩指针compressed pointers的架构约束if (dart_use_compressed_pointers) { if (dart_target_arch ! arm64 dart_target_arch ! x64) { print(Invalid architecture for compressed pointers: $dart_target_arch) assert(false) } defines [ DART_COMPRESSED_POINTERS ] }即在当前仓库中压缩指针仅允许在 arm64 与 x64 上启用其他架构包括 RISC-V若开启会导致构建断言失败。这对于希望为嵌入式/RISC-V 设备定制内存优化构建的开发者是一个必须注意的限制。此外仓库还提供交叉编译用的独立配置如dart_linux_arm64_config、dart_linux_arm_config、dart_linux_riscv64_config等见 runtime/BUILD.gn用于在 SDK 构建过程中生成跨架构的编译产物。如需为 ARM 或 RISC-V 构建完整 Dart SDK可参考仓库文档 docs/Building-Dart-SDK-for-ARM-or-RISC-V.md其中给出了针对 ARMv7、ARMv8、RISC-V 等目标的详细构建流程与工具链要求。五、FFI 层面的 ABI 枚举平台与架构的组合清单Dart 的 FFIForeign Function Interface需要为「操作系统 × 架构」的组合定义精确的原生调用约定。仓库 runtime/vm/compiler/ffi/abi.h 中的Abi枚举是对支持矩阵最细粒度的落地实现共定义了 24 个 ABI 组合与支持文档高度对应AndroidkAndroidArm、kAndroidArm64、kAndroidX64、kAndroidRiscv64对应矩阵中的 armv7、armv8、x64、rva23u64FuchsiakFuchsiaArm64、kFuchsiaX64、kFuchsiaRiscv64对应 armv8、x64、rva22u64viOSkIOSArm、kIOSArm64、kIOSArm64e、kIOSX64模拟器场景下 iOS 也覆盖 x64LinuxkLinuxArm、kLinuxArm64、kLinuxX64、kLinuxRiscv32、kLinuxRiscv64对应 armv7、armv8、x64、rva20u32、rva20u64macOSkMacOSArm64、kMacOSArm64e、kMacOSX64对应 armv8.1、x64WindowskWindowsArm64、kWindowsX64对应 armv8、x64并保留历史kWindowsIA32。值得注意的细节文件注释显示macOS 上的 RISC-V 通过kMacOSRiscv64 kLinuxRiscv64复用 Linux 的 ABI 定义用于在 Mac 上构建 RISC-V 模拟器目标To build simriscv64 on Mac。同时该枚举与pkg/vm/lib/transformations/ffi/abi.dart保持同步说明 FFI ABI 表同时被 VM 原生侧与编译器前端的 Dart 侧使用。对于在这些平台上使用dart:ffi的开发者该枚举直接决定了原生类型如指针、整型、结构体的大小与对齐规则进而影响NativeType、Struct等 FFI 类型的定义。六、如何确认当前平台支持与目标架构在实际工程中可按下述方式快速核对与验证查官方矩阵以 runtime/docs/supported-architectures.md 的表格为准先确认「操作系统 × 架构」组合在支持范围内看构建参数使用dart_target_arch指定目标架构取值见 runtime/BUILD.gn 的dart_arch_config并注意压缩指针仅限arm64/x64确认 FFI ABI若涉及dart:ffi可在 runtime/vm/compiler/ffi/abi.h 的Abi枚举中查找对应组合是否存在核对运行时探测VM 启动后会通过 runtime/vm/cpuinfo_linux.cc 等平台探测代码识别 CPU 特性从而决定代码生成与优化策略历史架构判断若目标设备是 mipsel、armv6、armv5te 或 ia32应明确其已不属于当前支持范围需要评估升级硬件或选用旧版 Dart SDK。七、总结Dart SDK 的架构支持矩阵体现了「广覆盖 分层适配」的策略x64 与 armv8 是跨平台主力armv7 保留于移动与嵌入式场景而 RISC-V 则通过rva20/rva22/rva23三档 profile 按操作系统精细化适配。这些结论不仅有官方文档背书更与仓库中的 GN 构建配置runtime/BUILD.gn、RISC-V 扩展集定义runtime/vm/constants_riscv.h、FFI ABI 枚举runtime/vm/compiler/ffi/abi.h以及各架构独立的编译后端实现相互印证。需要进一步阅读时可参考 docs/Building-Dart-SDK-for-ARM-or-RISC-V.md 与 runtime/docs 目录下的其他运行时文档。赞分享编程语言编译器语言运行时标准库开发工具【免费下载链接】sdkThe Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more.项目地址https://gitcode.com/gh_mirrors/sdk1/sdk点击查看免费下载相关推荐Dart SDK 面向 ARM 与 RISC-V 的交叉编译构建指南Building Dart SDK for ARM or RISC-VDart SDK 面向 ARM 与 RISC V 的交叉编译构建指南Building Dart SDK for ARM or RISC V Dart VM编程语言编译器语言运行时标准库开发工具Dart SDK 中用 QEMU 完成 ARM/RISC-V 跨架构 FFI 测试与调试Dart SDK 中用 QEMU 完成 ARM/RISC V 跨架构 FFI 测试与调试 在 x64 开发机上验证 Dart 编译器对全部 6 种支持架构的改动编程语言编译器语言运行时标准库开发工具TinyUSB多CPU架构支持从ARM Cortex到RISC-V全适配TinyUSB多CPU架构支持从ARM Cortex到RISC V全适配 引言嵌入式开发者的USB困境与解决方案 你是否曾为在不同架构的嵌入式微控制器MC嵌入式驱动开发通信物联网上一篇react-sketchapp 数据获取实战用 fetch 与 GraphQL 将真实 API 数据渲染进 Sketch下一篇终极A2A协议扩展机制指南如何自定义功能满足业务需求创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

VirtualBox 7.0.16部署Win10 22H2实战指南:跨平台、可审计、零依赖 2026/9/26 3:20:55

VirtualBox 7.0.16部署Win10 22H2实战指南:跨平台、可审计、零依赖

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
群联PS2251-19主控U盘量产修复实战:从砖头到可用 2026/9/26 3:20:55

群联PS2251-19主控U盘量产修复实战:从砖头到可用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
MES工序模块实战:从工艺路线建模到车间执行闭环 2026/9/26 3:20:55

MES工序模块实战:从工艺路线建模到车间执行闭环

车间里经常听到一句话:“MES上线上了半年,报表倒是出了一堆,可车间主任还是拿着小本本在记工序进度。”这不是笑话,这是我在一汽零部件厂里见过的真实一幕。问题出在哪?出在大多数人做MES的时候,把精力都砸…

阅读更多 →
16个实战项目打通Agent工程能力全链路 2026/9/26 3:20:48

16个实战项目打通Agent工程能力全链路

1. 这不是“速成课”,而是一套可验证的Agent工程能力训练路径你点开这个标题,大概率正站在两个路口之间:一边是刷了几十篇LangChain入门教程却连一个能自主调用天气API的Agent都跑不通;另一边是看到“Agentic RAG”“LLM-powered …

阅读更多 →
服务账号密码治理:从僵尸账号到动态凭据的完整安全改造 2026/9/26 3:20:48

服务账号密码治理:从僵尸账号到动态凭据的完整安全改造

“A. Blackslex and Password”——我第一次在运维交接单上看到这行字时,就想起了几乎所有安全事故的片头:一个没人说得清来历的服务账号,一串秘密贴在某个共享文档里的密码。这个标题本身就浓缩了一个非常典型的场景:业务系统代号…

阅读更多 →
Claude Code 模板库实战:告别重复上下文,构建AI编码工作流 2026/9/26 3:20:48

Claude Code 模板库实战:告别重复上下文,构建AI编码工作流

大概从去年开始,我把日常的编码工作越来越多地交给了Claude Code。用得越久,越发现一个问题:每次新建会话时,花在"重新介绍项目"上的时间,往往比真正写代码的时间还长。项目背景要重新说,技术栈要重新列,代码规范要重新讲,甚至连"不许动哪些文件"这种基本约…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉