Poly/ML version 5.9
Major Changes
Native code-generator for ARM/64
There is now a native code-generator for the 64-bit ARM architecture. All features of Poly/ML are supported, including FFI and compact-32 bits. It has been tested on a variety of platforms and operating systems including Mac M1, Windows and WSL as well as the Raspberry Pi on Raspbian and even big-endian NetBSD. At the moment the code-generator does no optimisation so the performance should improve in future releases.
Position-independent code for X86/64 and ARM64
The code segments in object files created by PolyML.export
for X86/64 and ARM64 are now position-independent on Linux and Mac/OS. This is necessary for some platforms and desirable on others. Text relocations are still generated on the X86/32 since changing this would require changes to the code-generator.
New bootstrap process
The initial build process has been changed to reduce the number of pre-built compilers required. The build process takes longer than before but the final code will be the same.
Minor Changes
- Additional FFI conversions for
size_t
,ssize_t
,long long
,unsigned long long
,ptrdiff_t
,intptr_t
anduintptr_t
. - Fix to build problem for 5.8.2 on big-endian.
- Fix to underlying sleep function that could fail in BSD.
- Fixes for some problems in
Unix.execute
andUnix.executeInEnv
introduced in the changes in 5.8.2. - Fixes for
Foreign.LowLevel.cTypeUint
andcTypeULong
which were incorrectly signed rather than unsigned. - Fix for systems where
PTHREAD_STACK_MIN
is a function rather than a constant. - Fixes to profiling of live data.
- Fixed printing of type functions when the type is passed as an argument to a functor.
- Fix to passing struct argument in SysV x86/64.