Support ARM64EC and ARM64X platforms
They are described in https://learn.microsoft.com/en-us/windows/arm/arm64ec and https://learn.microsoft.com/en-us/windows/arm/arm64x-pe . More in-depth descriptions are available here: http://www.emulators.com/docs/abc_arm64ec_explained.htm
ARM64EC is an ABI with "emulation compatible" ARM64 code, which can not be executed on a real AMD or Intel CPU. ARM64X is native ARM64 code (which is very similar to the ARM64 Linux ABI) and "emulation compatible" ARM64 code combined into one DLL or EXE file. Neither of them can be executed on a AMD or Intel CPU. It makes most sense for system DLLs on Windows on ARM.
Does it make sense to support ARM64EC or ARM64X in RubyInstaller?
IMHO from a RubyInstaller perspective neither ARM64EC nor ARM64X make much sense to support:
-
ARM64ECwould allow to run ruby and C extensions at almost native speed and still load emulatedx64DLLs into the same ruby process. But it can not load nativeARM64DLLs into the process. In the benchmarks which I executed, the emulated ruby had roughly 80% of the speed of the native ARM64 version. So the emulation runs x64-ruby very well. When the use case requires to runx64DLLs into the ruby process, than it's best to use the emulatedx64RubyInstaller. If native ARM64 DLLs shall be loaded then the RubyInstaller ARM64 version can be used. It's not possible to mixx64and native ARM64 into one process. -
ARM64Xcould make sense for the libruby DLL. It would allow to embed ruby into an native ARM64 process as well as into an emulatedx64process. But embedded ruby is not a use case for RubyInstaller. If someone want's to embed ruby, he can compile libruby on its own for the desired architecture/ABI. - So far there is no MSYS2 platform for
ARM64ECorARM64X, but onlyclangarm64which contains native ARM64 code. So there's no runtime environment we can use for building and for the Devkit version: https://www.msys2.org/docs/environments/
This can probably be closed...