去年6月,苹果公司宣布Mac将过渡到苹果自己的芯片,称为Apple Silicon。在PyCharm,这将意味着我们对软件构建方式的重大更改。自从PowerPC迁移到Intel的x86架构以来,这种变化从未发生过。
尽管Apple的新翻译引擎Rosetta 2的性能在某种程度上可以接受,但它可以将x86指令集转换为M1的基于ARM的指令集,但对于我们的IDE来说还不够好。
通常,如果您有一个简单的程序,那么Rosetta 2应该能够翻译您的程序而不会产生大量开销。但是,我们的IDE是建立在我们自己的自定义Java运行时环境之上的,绝不是一个简单的程序。
直到2010年,Apple都将自己的Java版本与操作系统捆绑在一起。这意味着,每次发布新版本的Java时,Apple都需要为其自身的操作系统对其进行修补,以使其不存在任何安全漏洞。随着Mac上Java的弃用,使用Oracle发布的Java版本在视网膜屏幕上进行字体渲染等某些事情变得更加困难。为了解决这个问题,JetBrains分叉了OpenJDK项目,以便更好地控制IDE在Mac以及其他HiDPI屏幕上的外观。 JetBrains Runtime诞生了,我们从2014年开始将其与IDE捆绑在一起。
JetBrains Runtime随我们所有的IDE一起提供,尽管这使我们拥有更多控制权,但这也意味着我们需要一支庞大的团队来维护此代码库。此外,运行时有很多方面,我们并不知道运行时的每一个小缝隙,而是专注于处理屏幕上UI呈现的代码部分。
对Apple Silicon的更改意味着我们需要重新编写许多JetBrains Runtime,以确保我们具有足够的性能。尽管我们一直在尝试在Raspberry Pi计算机上运行应用程序,但这是一个完全不同的问题。 M1意味着基于ARM的计算机将很快成为主流。我们的IDE不能仅在M1上充分运行,而必须在它们上良好运行。
为此,我们开始研究如何优雅地处理这种过渡。很快发现,我们不得不重新编写许多JIT系统,这是JVM本身的核心组件,对此我们几乎没有经验。
最终,我们确实在Azul Systems的帮助下解决了这个问题。 要收听整个故事,请收听播客,我在这里与Konstantin Bulenkov进行了交谈,后者不得不度过这一根本变化的风暴。