首页/新闻资讯/正文详情

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

发布时间:2026/9/26 2:36:11 来源:云帆数科 栏目:资讯中心
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),仅供参考

相关推荐

网盘直链下载助手安装指南:如何从网页获取真实下载链接
网盘直链下载助手安装指南:如何从网页获取真实下载链接

网盘直链下载助手安装指南:如何从网页获取真实下载链接 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼… · 2026/9/26 2:36:11

前后端分离项目SM4加密传输数据实战指南
前后端分离项目SM4加密传输数据实战指南

写这篇东西的起因特别直白:我接了一个前后端分离的老项目,登录和提交订单的接口全部明文传输。前端把用户手机号、身份证号当查询参数拼在URL里,后端日志里能直接看到完整数据。老板的原话是“来波猛的”,意思就是别再补丁式修修补… · 2026/9/26 2:35:58

软著补正AIGC检出率高怎么办?处理流程与证明材料整理指南
软著补正AIGC检出率高怎么办?处理流程与证明材料整理指南

收到“文档鉴别材料AIGC检出率高”之后,我的处理流程和证明材料整理经验先说一下背景。我上周刚帮一个客户处理完软著补正,补正意见写得很直接:“经审查,该申请文档鉴别材料AIGC检测结果异常,检出率较高,请… · 2026/9/26 2:35:58

基于Spring AI服务,开发MCP服务:TaoToken统一Key接入与settings.json配置骨架
基于Spring AI服务,开发MCP服务:TaoToken统一Key接入与settings.json配置骨架

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

VSCode 离线插件下载方式:用 TaoToken 统一 Key 打通 settings.json 配置
VSCode 离线插件下载方式:用 TaoToken 统一 Key 打通 settings.json 配置

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

DeepSeek V4 长期记忆与多模态升级前瞻:用 TaoToken 统一 Key 提前搭好接入骨架
DeepSeek V4 长期记忆与多模态升级前瞻:用 TaoToken 统一 Key 提前搭好接入骨架

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

OpenClaw 配 TaoToken:本地运行“小龙虾 AI”执行框架的 config.toml 骨架与验证
OpenClaw 配 TaoToken:本地运行“小龙虾 AI”执行框架的 config.toml 骨架与验证

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

OpenClaw v2.7.9 虾壳云一键部署排错指南:TaoToken 配置文件骨架与启动报错逐项排查
OpenClaw v2.7.9 虾壳云一键部署排错指南:TaoToken 配置文件骨架与启动报错逐项排查

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

聊聊关于 MCP 工具分组的思路:用 TaoToken 统一 Key 打通 Spring AI 的 McpTool 与 SSE 配置
聊聊关于 MCP 工具分组的思路:用 TaoToken 统一 Key 打通 Spring AI 的 McpTool 与 SSE 配置

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

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

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

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码