V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wangyzj
V2EX  ›  macOS

哪位老哥能解释一下 Rosetta 的实现原理?

  •  
  •   wangyzj · 2020-11-18 12:33:35 +08:00 · 3408 次点击
    这是一个创建于 1338 天前的主题,其中的信息可能已经有所发展或是发生改变。

    编译原理难啊,搞不明白也懒得再看

    求老哥能通俗易通详细深入的解释

    多谢老哥

    第 1 条附言  ·  2020-11-18 20:38:47 +08:00
    时间过得真快啊

    这个帖子我都发了 8 消失了

    这 8 小时被蝴蝶夫人骂惨了
    12 条回复    2023-10-27 11:49:38 +08:00
    wangyanrui
        1
    wangyanrui  
       2020-11-18 12:37:24 +08:00 via Android
    心里知道是个啥,但是描述不出来
    蹲一位大佬😂
    geekvcn
        2
    geekvcn  
       2020-11-18 12:41:21 +08:00
    一个软件兼容层,类似于游戏机模拟器,把 x86 指令集适配的代码转换翻译为 ARM 能运行的代码。Rosetta2 会把 x86 的二进制文件预编译,所以第一次打开会慢,就像部分模拟器要么用别人转换好的游戏,要么自己转换一遍。

    简单说就是一个胖翻译,而且给皇军打报告的前会预先备好翻译好的稿件提高效率
    secondwtq
        3
    secondwtq  
       2020-11-18 12:42:05 +08:00 via iPhone
    关键词 Dynamic Binary Translation
    chashao
        4
    chashao  
       2020-11-18 12:44:59 +08:00
    是类似 qemu 的原理么?
    geekvcn
        5
    geekvcn  
       2020-11-18 12:47:57 +08:00
    @chashao qemu 更底层一点,模拟了底层硬件环境
    nguoidiqua
        6
    nguoidiqua  
       2020-11-18 12:59:29 +08:00
    类似 Android 的 ART,不过 ART 是从 Java 转到 ARM 机器码,而 Rosetta 2 是从 X86 机器码转到 ARM 机器码。

    另外早期 ART 是安装的时候进行转换,安装时间较长,现在是运行中用到对应代码才转换。而 Rosetta 2 是第一次打开转换,第一次打开时间较长。Windows on ARM 据说是运行软件过程中即时翻译,相对前两者有较大性能损失,可能以后也会改成预先转制。

    以上都是道听途说的,没有考证过。
    wangyzj
        7
    wangyzj  
    OP
       2020-11-18 20:43:47 +08:00
    @geekvcn #2 Rosetta 1 据说是动态翻译,2 就是静态翻译了所以速度很快,如果动态翻译可以理解为一个软 CPU 的话,那么静态翻译我理解是不是就把库文件和可执行文件都改了,那么文件大小是不是就得都变了
    wangyzj
        8
    wangyzj  
    OP
       2020-11-18 20:44:36 +08:00
    @nguoidiqua #6 麻烦看 7 楼
    Rorysky
        9
    Rorysky  
       2020-11-18 22:08:57 +08:00
    是个转译器,直接运行时将 x86 翻译成 arm 指令,所以性能损失可以接受

    而不是 在 arm 上虚拟一个 x86 兼容环境
    nguoidiqua
        10
    nguoidiqua  
       2020-11-18 22:40:51 +08:00
    @wangyzj

    估计是专门弄了个对应目录存放转换后的文件,启动的时候会做个判断看软件本身有没有符合本机架构的二进制文件,没有就调用转换的。
    feast
        11
    feast  
       2020-11-27 13:58:18 +08:00
    AOT,类似安卓 ART 的预编译,所以速度快接近原生 ARM 了
    MrLeion
        12
    MrLeion  
       265 天前
    rosetta 要解决的问题是将苹果的生态从 Intel X86 转向基于 ARM 的 APPlE M 系列芯片;

    所以只是完成了由 X86 指令编译为 ARM 指令的动作;
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5021 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 07:59 · PVG 15:59 · LAX 00:59 · JFK 03:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.