百科问答小站 logo
百科问答小站 font logo



理论上来讲,macOS的rosetta转译未来能不能直接转译Windows应用? 第1页

  

user avatar   MebiuW 网友的相关建议: 
      

首先明确一下:Rosetta/Rosetta2是指令集转译(X86-to-ARM), Crossover算是软件兼容层(Windows-to-macOS,并且也不算是转译),它们并不工作在一个层级,“Crossover利用Rosetta来转译Windows应用”或者“Rosetta转译Windows应用”都是不对的。Rosetta的出现与否,都不会影响苹果想不想做Windows软件兼容。

苹果官方是肯定不会这么搞的,又不是某个吊打安卓的系统。 一方面,苹果有自己的独立且还算可用的生态,没必要蹭别家的生态,也不能把肥水流到外人田。另一方面,这么做有法律风险,Windows并不开源,可能存在侵权的问题。苹果在用Intel芯片的时期都没提供支持,还指望换到ARM后提供么。

所以说,从Rosetta的定位上(指令集转译)来说,就不会去兼容Windows应用,而且苹果也不会以任何形式提供官方支持。


user avatar   saturnman-58 网友的相关建议: 
      

一个应用程序能运行,除了自己的代码之外还需要调用平台的api,除非苹果能实现全套的微软平台api,否则不可能直接转译运行windows的程序。

rosetta2 的工作方式其实经常让人误解,因为“转译”这个词的意思太模糊了,很多人会误以为rosetta2是把所有x86指令逐条转换成等效的arm指令,如果这样做肯定性能会非常差估计会不足原生的1/10。

rosetta2的工作原理基本如下:

  1. 设计一个逻辑上的虚拟机指令架构,这个虚拟机指令架构有自己的寄存器和寻址规范调用规范之类的,基本上就是设计一个虚拟的cpu了。
  2. 把app中x86的指令转换为在这个虚拟机指令架构上的指令,把api调用转换为对这个虚拟机指令架构的规范调用,规范和转换好所有的内存对齐之类的要求。
  3. 设计一个编译器,把这个虚拟机指令架构的所有汇编指令静态编译到arm指令上形成与x86对应的镜像模块。
  4. 设计一个动态精确模拟所有x86指令的可执行虚拟机来应付原来x86中动态生成x86汇编的代码,并能对动态x86指令操作结果进行变换,这部分是性能瓶颈并且很多程序崩溃由此导致,不过一般占比不高。
  5. 重新设计操作系统的程序loader,在应用启动时启动rosetta2进行翻译和符号映射,装载翻译好的模块替代原模块进行运行,运行到动态指令生成的时候就调用精确模拟的虚拟机进行执行动态指令并获取结果回填。

以上原理说起来简单,但是没有深厚的系统软件积累是做不到的,尤其是rosetta2转译的如此高效确实让人惊讶。




  

相关话题

  为什么苹果M1成功了,骁龙850却失败了? 
  为什么 Windows 不像 iOS、 macOS 一样隔年迭代? 
  如何评价 2020 年 11 月 11 日苹果发布 M1 芯片 MacBook Pro ,有哪些亮点? 
  为何 ThinkPad 没有 Mac 系列保值? 
  新的Macbook Pro M1有必要选配16G内存吗? 
  大概什么时候 Windows 笔记本 CPU 才能达到 M1 这个级别? 
  如何评价 WWDC 2015? 
  如何看待 8G 256G M1 MacBook Air 使用一个月硬盘写入 22TB+? 
  Mac OS X 能为软件指定默认语言吗? 
  苹果 arm 版的 MacBook Pro 为什么没有发布 16 寸的版本? 

前一个讨论
古代男人可以通过毁掉贵族女子名声的方式高攀千金小姐吗?
下一个讨论
为什么KOL们清一色拿视频处理来证明苹果M1性能强大?





© 2025-01-30 - tinynew.org. All Rights Reserved.
© 2025-01-30 - tinynew.org. 保留所有权利