Rosetta 是一款苹果公司开发的翻译工具,旨在帮助用户在搭载 Apple Silicon (ARM架构) 的 Mac 电脑上运行那些仅为 Intel (x86_64架构) 处理器编写的应用程序。它的核心作用是自动将 Intel 指令转换为 ARM 指令,以确保软件兼容性,从而平滑地完成硬件架构的过渡。尽管它能翻译大部分应用,但不支持内核扩展、虚拟机应用以及特定的指令集。
Rosetta 的工作原理
Rosetta 是一个翻译层,它的运行对用户来说几乎是透明的。当用户尝试打开一个只包含 Intel 指令的应用时,macOS 会自动启动 Rosetta 并开始翻译过程。
- 自动翻译:系统会自动处理仅含 Intel 指令的程序,翻译完成后直接运行。
- 性能影响:由于需要实时翻译,用户可能会感觉到这类应用的启动或运行速度比原生应用 更慢。
- 手动选择:如果一个应用同时包含 ARM 和 Intel 两种指令(即通用二进制文件),用户可以在 Finder 的“显示简介”窗口中,手动选择“使用 Rosetta 打开”。这通常是为了兼容一些尚未支持 ARM 架构的旧款插件。
Rosetta 的目的是为了简化向 Apple Silicon 的过渡,并非创建原生版本应用的替代品。它为开发者争取了时间来构建适配新架构的通用应用。
哪些内容无法翻译?
尽管 Rosetta 功能强大,但它并不能翻译所有类型的程序和指令。
- 内核扩展 (Kernel extensions)。
- 用于虚拟化 x86_64 计算机平台的 虚拟机应用。
此外,在指令集方面,Rosetta 可以翻译绝大多数 x86_64 指令,包括 AVX 和 AVX2,但它 不支持 AVX512 矢量指令的执行。
如何检测应用是否在翻译环境下运行?
开发者可以通过编程方式来判断一个进程是否正在通过 Rosetta 翻译运行。这可以通过调用 sysctlbyname 函数并检查 sysctl.proc_translated 标志来实现。
如果函数返回:
- 0:表示进程是原生运行的。
- 1:表示进程是通过 Rosetta 翻译运行的。
- -1:表示查询时发生错误。