为什么Windows还没有为Arm开发人员做好准备

导读 微软的官方开发者工具链在Arm上相当糟糕。Microsoft不提供Arm版本的VisualStudio、VSBuildTools,甚至不提供MicrosoftVisualC++;他们希望Ar

微软的官方开发者工具链在Arm上相当糟糕。Microsoft不提供Arm版本的VisualStudio、VSBuildTools,甚至不提供MicrosoftVisualC++;他们希望Arm开发人员在x86主机上交叉编译C++软件或模拟x86软件。

Arm为.NET和VSCode提供原生支持,但这对C++开发人员没有帮助。由于MSVC是闭源的,因此在Arm上获得对MSVC的原生支持的唯一方法是让Microsoft实现它。请参阅https://developercommunity.visualstudio.com/t/native-Arm-support-for-visual-studio/1161018

开源的情况也好不到哪儿去。没有MinGW或MSYS开发环境的Arm实现;因此,在Windows上也没有可用的ArmGCC或ArmClang工具链。有功能请求为他们打开以添加原生Arm支持,但尚未准备好。如果你去Arm的网站,他们有一个页面,你可以在其中下载适用于x86设备的MinGWGCC,以便为Arm设备交叉编译。当在Windows上编译您的产品的唯一方法是使用竞争对手的产品时,这确实说明了一些问题。

Windows上另一个流行的C++编译器是IntelC++编译器(ICC)。由于显而易见的原因,这在Arm上不可用,并且无论如何都需要安装VisualStudio。因此,4个流行的C++编译器中有0个可用于ArmWindows。

也没有Python的Arm本机Windows版本。但是,这可能会在今年某个时候得到解决:请参阅https://bugs.python.org/issue33125

您可能想知道为什么为编译器提供原生Arm支持如此重要。许多开发人员在为智能手机或游戏机开发软件时已经从他们的计算机交叉编译到其他设备,那么为什么他们不能对ArmWindows设备做同样的事情呢?他们可以,但这是二等体验。

交叉编译不是Windows的原生Arm工具链

无法在本地运行编译器并且需要另一台计算机交叉编译二进制文件/可执行文件才能运行的Windows计算机与智能手机属于同一类,因为您无法在同一设备上进行开发和测试。此处的区别在于智能手机和游戏机并非旨在成为开发平台;在手机上编写代码是可能的,但并不常见。

假设您是一名有抱负的软件开发人员,您去商店买一台计算机,以便学习C++。在情况A中,你买了一个x86Windows设备,把它带回家,安装一个IDE,比如VisualStudio,写一些C++代码,点击一个按钮,然后你的代码就开始运行了。太好了,您正在一个具有一流支持的平台上进行开发。现在在情况B中,你买了一个ArmWindows设备,把它带回家,意识到你的计算机没有VisualStudio或任何C++编译器。所以你会怎么做?许多人会回到商店退回计算机并购买x86计算机。或者,在情况C中,你回到商店购买第二台x86计算机,带回家,安装VisualStudio,设置交叉编译开发环境,编写一些C++代码,点击一个按钮,并等待10秒以将其部署到Arm设备上。此时,作为有抱负的开发人员,您会想知道为什么您不应该只针对x86进行开发,这样您只需要一台计算机就可以退回二等Arm设备。

WindowsforArm的另一个缺点是不支持OpenGL或Vulkan。即使您设置了交叉编译工具链,如果您的应用程序使用Vulkan,您也不走运。如果您有OpenGL应用程序,Microsoft的建议是使用ANGLE将OpenGL转换为DirectX。

微软的信息很明确:如果你想支持我们新的ArmWindows平台,你必须使用我们专有的API。同样,PlayStation、Xbox、Switch和iPhone要求开发人员使用专有图形API,并且没有一个可以运行编译器,因此您必须从另一台设备交叉编译。开发人员听到的也很清楚:WindowsforArm是一个玩具操作系统,不能运行行业标准的图形API或编译器,因此不是一个严肃的开发平台,应该被视为手机或控制台。

只要在ArmWindows设备上开发是劣等体验,开发者就会选择使用x86,因为它具有一流的支持;他们永远不会为ArmWindows提供与x86相同级别的支持。

如果消费者无论如何都必须为他们的应用程序模拟x86,那么这种二等地位将导致消费者不想要Arm设备,这会导致开发人员不关心Arm的反馈循环,因为它是一种糟糕的体验并且用户很少。这反过来又导致硬件制造商不够关心制造功能强大的ArmWindows设备,因为很少有人愿意花很多钱购买二等设备。开始打破这个循环的唯一方法是让VisualStudio等主要开发人员工具支持Arm。

相比之下,Arm对macOS和Linux上的开发者工具的支持要好得多。GCC、Clang和Python很容易在这些操作系统上用于Arm,并且运行良好。您可以下载这些开发人员工具的本机版本,并使用一台设备对它们进行本机编译,它的工作方式与人们希望的完全一样。