0.5.0 (2024-04-11)¶
We’re happy to announce the new release of Scala Native!
Check out the documentation at https://scala-native.readthedocs.io/
TL;DR¶
Not backward compatible with previous releases,
Added support for multithreading based on platform threads
Added support for targeting 32-bit architectures
Initial source level debugging support
Various changes to the build system. See “Build Integrator features” below.
Removed stub implementation for partially implemented Java Standard Library types
SIP-51 support: artifacts for every Scala standard library version
Supported Scala versions¶
Scala Binary Version | Supported Scala Versions |
---|---|
2.12 | 2.12.14 ... 2.12.19 |
2.13 | 2.13.8 ... 2.13.13 |
3 | 3.1.2 ... 3.1.3 3.2.0 ... 3.2.2 3.3.0 ... 3.3.3 3.4.0 ... 3.4.1 |
Upon release of new Scala version (stable, or Scala 3 RC) version dependent artifacts would be published without a new release.
Commits since 0.4.17 (excluding backported commits): | 299 |
Contributors: | 21 |
New features¶
Multithreading support¶
Scala Native now allows to use system threads based on java.lang.Thread
implementation, along with all the necessary primitives to work with concurrency:
synchronized
blocks are now using object monitors following partially JVM semantics - these might be less performant when compared to JVM, but are going to achive improvements in the followup patch releases.JVM compliant support for
@volatile
annotationsConfigurable mostly JVM-compliant support for final fields semantics, see multithreading guide
Thread safe implementation of most
java.util.concurrent
types and methods, including atomics, thread pools, etc. See list of currently implemented primitives in our meta-issue on GitHub. Be aware that our Java Standard Library implementation might still contain thread-unsafe implementations of types not listed in the tracker.Support for most of
scala.concurrent
andscala.collection.concurrent
types.Multithreading-aware implemenation of all garbage collections.
Support for 32-bit architectures¶
We’ve introduced preliminary, experimental support for targeting 32bit architectures, like ARMv7.
To allow for representing variable-length integers in C bindings, we’ve introduced 2 new types scala.scalanative.unsafe.{Size, USize}
which correspond to ssize_t, size_t
in C. During linking these would be transformed into 32 or 64 bits longs integer.
Multiple C standard library and POSIX bindings were adapted to use these new types.
Initial support for source level debugging¶
We’ve introduced initial support for generating source level debug informations, allowing to map code executed in the debugger to the original sources or to represent local variables. When executing on MacOS it also allows to obtain approximated source code lines in the exception stack traces (best effort, might not point to exact line, but rather to function definitions). Be aware that both Scala Native optimizer and LLVM optimizers can remove some of the optimized out debug informations. For best experience run with disabled optimizations:
nativeConfig ~= {
.withSourceLevelDebuggingConfig(_.enableAll) // enable generation of debug informations
.withOptimize(false) // disable Scala Native optimizer
.withMode(scalanative.build.Mode.debug) // compile using LLVM without optimizations
}
See our debugging guide for more informations.
SIP-51 support: Drop forward binary compatibility of the Scala 2.13 standard library¶
We’re chaning how the Scala standard library artifacts are published. Previously each Scala Native version shipped with 1 artifact for Scala standard library based on latest version of Scala. However this approach was insufficient to fully cover changes in Scala 3 standard library and it’s 2 lines of releases: Scala LTS and Scala Next.
To mittigate this issue and to prepare for unfreezing Scala 2 standard library we’re changing how artifacts are published. Now each release of Scala Native would contain N variants of Scala standard library with custom versioning in format <ScalaVersion>+<ScalaNativeVersion>
, eg. 3.3.2+0.5.0
.
Improved missing symbols reports¶
The new release introuduces a refactored machanism for tracking and reporting missing symbols in the linked code. Now when referring to not implemented Java standard library method, or a type from not cross-compiled library you would receive a detailed information about missing symbols containg its signature approximation and detailed stack trace of method calls leading to usage of missing symbol.
JVM service providers supports¶
We’re introducing a user configured support for Java Service Providers. Similarry to it’s JVM variant these would allow you to introduce implementations of Service Provider Interfaces however due to Ahead-of-time compilation constraint and to limit ammount of introduced dependencies only explicitly enabled implementations would be linked in the final binary. For more details refer to our guide.
User build settings¶
You can now specify the basename
of your executable or library.. Typically it will default to the project’s module name.
In the following example, after running nativeLink
you’ll find an myapp
or myapp.exe
file in the target directory of your projects (by default in the <project-dir>/target/<scala-version>/myapp
)
lazy val myproj = project
.in(file("."))
.settings(
nativeConfig ~= { c =>
c.withBaseName("myapp")
}
)
Breaking changes¶
Broken backward compatibility¶
Scala Native 0.5.0 breaks backward binary compatibility with previous releases of Scala Native. Libraries published using version 0.4.x or older must be republished for Scala Native 0.5.x.
Scala Native Runtime¶
scala.scalanative.unsafe.Zone.apply
by default uses a context function argument. For Scala 2 cross-compilation see Memory managment sectionThe idiomatic alternative for C
void*
is nowPtr[?]
(Scala 3) /Ptr[_]
(Scala 2). Useunsafe.CVoidPtr
for alias when defining bindings.
Java Standard Library¶
Removed harmfull stub types defined in multiple packages, for 0.4.x implementation see scala-native-java-stubs:
Removed
java.security
stubs - these were harmfull, by providing a false sense of security, especially injava.security.MessageDiggest
.Removed
java.net.URL
stubs - these had no working implementation for majority of features.Removed
java.reflect
stubs - cannot be implemented to provide real reflective access.
POSIX bindings¶
There is a breaking change in the
utsnameOps
of the posixlib. Prior to version 0.4.x, this Ops provided an API that returned system properties asString
forPtr[utsname.utsname]
. However, like other posixlib Ops, it has been changed to return aCArray
instead of aString
.
Replace time_t fields with timespec in POSIX sys/stat.scala¶
In order to support nanosecond resolution for java.nio.file.attribute.BasicFileAttributes
, we introduce breaking changes to sys/stat struct.
Previously, stat
struct was defined as following and you were able to access second resolution file stat fields st_atime
, st_mtime
and st_ctime
by _7
, _8
and _9
.
type stat = CStruct13[
dev_t, // st_dev
dev_t, // st_rdev
ino_t, // st_ino
uid_t, // st_uid
gid_t, // st_gid
off_t, // st_size
time_t, // st_atime
time_t, // st_mtime
time_t, // st_ctime
blkcnt_t, // st_blocks
blksize_t, // st_blksize
nlink_t, // st_nlink
mode_t // st_mode
]
Since 0.5.0, stat
struct uses timespec
for file stat fields. Therefore, you need to replace _7
, _8
and _9
with _7._1
, _8._1
and _9._1
to access those fields.
type stat = CStruct13[
dev_t, // st_dev
dev_t, // st_rdev
ino_t, // st_ino
uid_t, // st_uid
gid_t, // st_gid
off_t, // st_size
timespec, // st_atim or st_atimespec
timespec, // st_mtim or st_mtimespec
timespec, // st_ctim or st_ctimespec
blkcnt_t, // st_blocks
blksize_t, // st_blksize
nlink_t, // st_nlink
mode_t // st_mode
]
There is a helper implicit class statOps
, which provides human-friendly field accessors like st_dev
or st_rdev
. It is recommended to use these fields from statOps
rather than accessing fields by _N
.
For example, import scala.scalanative.posix.timeOps._
and scala.scalanative.posix.sys.statOps.statOps
, then you can get the last access time of a file by st_atime
or st_atim
field.
import scala.scalanative.unsafe._
import scala.scalanative.posix.sys.stat
import scala.scalanative.posix.timeOps._
import scala.scalanative.posix.sys.statOps.statOps
Zone { implicit z =>
val filepath = c"/path/to/file"
val stat = alloc[stat.stat]()
stat.stat(filepath, stat)
// directly get the last access time in second resolution
val atime = stat.st_atime
// get the last access time in second resolution from timespec
val atimesec = stat.st_atim.tv_sec
// get access time in nanosecond resolution from timespec
val atimensec = stat.st_atim.tv_nsec
}
Corrections to POSIX sys/utsname.scala¶
A number of defects have been corrected in sys/utsname.scala
. These
corrections required breaking changes to field definition. The change
most noticeable to end users is likely to be that the uname
object,
holding implicit conversions, has been renamed to utsname
.
A Test in UtsnameTest.scala
shows on way of using the required CArray
fields in the utsname
structure as instances of Scala types.
Build integrator features¶
There are a few features to be used by build tool integrators that have changed.
The entrypoint for building projects
scala.scalanative.build.Build.build
now takes an implicitExecutionContext
and returnsFuture[Path]
instead ofPath
. UseBuild.buildCached
to use build-tool agnostic cache to skip linking if config and inputs have not changed.Changes to
scala.scalanative.build.Config
:Config.artifactPath
The final artifact is now calculated for the integrator. No need to worry about the extension for Windows.Now the
baseName
can be set by the developer if the module name is not desired.Config.withTestConfig(true)
for tests to allow a-test
to be appended as before for test applications. The default isfalse
for normal projects.Config.withBaseDir(crossTarget)
is a Path that needs to be set rather thanworkDir
.Config.workDir
is now calculated frombaseDir
but is available for integrators as needed.
val nativeConfig = build.NativeConfig.empty
withBaseName("myapp") // override config module name
val config = build.Config.empty
.withLogger(logger)
.withMainClass(mainClass)
.withClassPath(classpath)
.withBaseDir(crossTarget) // Path
.withModuleName(module.name)
.withTestConfig(testConfig)
.withCompilerConfig(nativeConfig)
Other breaking changes:¶
Runtime environment variables to control the Garbage Collector are now aligned to match the Boehm GC as much as possible. In particular the first two variables are used on all GCs. The last one works on Boehm and Commix.
GC_INITIAL_HEAP_SIZE (was SCALANATIVE_MIN_HEAP_SIZE)
GC_MAXIMUM_HEAP_SIZE (was SCALANATIVE_MAX_HEAP_SIZE)
GC_NPROCS (was SCALANATIVE_GC_THREADS)
GC_TIME_RATIO (was SCALANATIVE_TIME_RATIO)
GC_FREE_RATIO (was SCALANATIVE_FREE_RATIO)
GC_STATS_FILE (was SCALANATIVE_STATS_FILE)
Deprecated definitions¶
Removed in this version¶
Ordered by version of Scala Native in which a deprecation was introduced.
Deprecated in 0.3.7
ScalaNativePlugin.scala ‘val AutoImport’.
Deprecated in 0.4.1
scala.scalanative.libc.signal.kill(pid, sig).
Suggested replacement: kill(pid, sig) from POSIX signal.scala.scalanative.libc.signal.SIGUSR1.
Suggested replacement: SIGUSR1 from POSIX signal.
Introduced in this version¶
All newly deprecated declarations are subject to removal in the future.
posixlib unistd.scala ‘sethostname()’ is now deprecated because it is not part of the POSIX 2018 standard.
posixlib unistd.scala ‘vfork()’ is now deprecated because it was removed in the POSIX.1-2018 standard. Suggested replacement: ‘posix_spawn()’.
Contributors¶
Big thanks to everybody who contributed to this release or reported an issue!
141 Wojciech Mazur
65 LeeTibbert
19 Rikito Taniguchi
19 Eric K Richardson
10 Dimi Racordon
6 Natsu Kagami
6 Kirill A. Korinsky
5 David Bouyssié
4 kim / Motoyuki Kimura
4 Anton Sviridov
2 Mark Hammons
2 Lorenzo Gabriele
2 João Costa
1 Jamie Willis
1 Yawen Guan
1 yuly16
1 Jarek Sacha
2 Michel Davit
1 Jakub Kozłowski
1 Claudio Bley
Merged PRs¶
v0.5.0 (2024-04-11)¶
Merged pull requests (excluding 0.4.17 backports):
Scala Native sbt plugin¶
Partial fix #2765: Remove long deprecated declaration in ScalaNativePlugin #3004 (LeeTibbert)
nativeLinkReleaseFast and nativeLinkReleaseFull SBT tasks #3391 (keynmol)
fix: Use dedicated thread pool per
nativeLink
instead of usingExecutionContext.global
#3725 (WojciechMazur)
Scala Native Compiler PLugin¶
Don’t unapply unecessary unboxing in lambdas #2938 (WojciechMazur)
Fix encoding of
scala.Nothing
andscala.Null
in type signatures #2949 (WojciechMazur)Handle passing null for unboxed arguments of extern methods #2950 (WojciechMazur)
Report error when referencing local state in CFuncPtr #2957 (WojciechMazur)
Fix lost information about value class instance #2959 (WojciechMazur)
Encode main class name to match outputs of the compiler #2955 (WojciechMazur)
Allow to define implicit class or extension in extern object/trait #3538 (WojciechMazur)
Improve implementation of implicit class defined in extern object #3549 (WojciechMazur)
Support universal equality of unsigned numeric types #3584 (WojciechMazur)
refactor: Remove
mapSourceURI
, always use local copy of sources when debugging #3635 (WojciechMazur)improvement: Use
java.lang.StringBuilder
for optimized concatation of Strings in NIR CodeGen #3640 (WojciechMazur)improvement: Better source positions relativization #3695 (WojciechMazur)
fix: compiler crash on primitive type checking against opaque types #3712 (tanishiking)
fix [nscplugin]: Dealias Scala 3 types until they’re stable. #3727 (WojciechMazur)
improvement: Apply Scala2 Cleanup phase optimizations to generation of Array literals #3742 (WojciechMazur)
fix: Emit object method calls via method dispatch #3750 (WojciechMazur)
Scala Native runtime¶
Add mulithreading support - part 1 #3114 (WojciechMazur)
Support JavaMemoryModel behaviour for shared variables #3117 (WojciechMazur)
Introduce concept of
blocking extern
functions for better interop of GC with foreign code #3116 (WojciechMazur)Handle concurrent initialization of modules #3124 (WojciechMazur)
Add support for object monitors and
synchronized
blocks #3126 (WojciechMazur)Intrinsic based
sizeOf[T]
/alignmentOf[T]
resolution #3198 (WojciechMazur)Use intrinsic based implementation for
sizeof
/alignmentof
instead of relaying on tags #3205 (WojciechMazur)Fix Scala3 compilation failures for intrinsic sizeOf using
unsafe.Nat
types #3245 (WojciechMazur)Correctly memset all allocated memory for stackallocN in scala 2 #3257 (natsukagami)
Remove unsafe.Tag based type resolution for CFuncPtr.{fromScalaFunction,apply} #3270 (tanishiking)
Unsigned types improvements #3375 (WojciechMazur)
Implement
scala.scalanative.annotation.align
annotation, replacement for JVM@Contended
#3365 (WojciechMazur)Overhaul of
scala.scalanative.unsafe.{stackalloc,alloc}
#3411 (WojciechMazur)Better handling of uncaught exceptions in main and user threads #3423 (WojciechMazur)
Cleanup stacktraces to not contain intrinsic method calls #3456 (WojciechMazur)
Implement delimited continuations primitives #3286 (natsukagami)
feature: Add
BlobArray
- a variant ofArray[Byte]
which can be scanned by GC. #3663 (WojciechMazur)Api change: Replace
Ptr[Byte]
with Ptr[_] where applicable. #3753 (WojciechMazur)refactor: Fix placement of access of
scala.scalanative.runtime
definitions #3805 (WojciechMazur)feature: Add
unsafe.Ptr.{+,-, apply, update}
variants taking Long #3807 (WojciechMazur)feature: Define an extension method for conversion
.toCSize
as an alias to.toUSize
#3808 (WojciechMazur)feature: Allow to create overload of extern method #3809 (WojciechMazur)
Refactor
scala.scalanative.runtime.ExecutionContext
#3144 (WojciechMazur)refactor: Non-public API for work-stealing from QueueExecutionContext #3863 (WojciechMazur)
Scala Standard Library¶
Allow to use
scala.collection.concurrent.TrieMap
#3149 (WojciechMazur)Adapt
scala.concurrent.ExecutionContext
to use concurrent executor in multithreading mode #3145 (WojciechMazur)New model for publishing scalalib artifacts #3326 (WojciechMazur)
Don’t require scalalib to depend on javalib in the build. #3566 (WojciechMazur)
scalalib: Remove redundant Scala2 stdlib overrides #3743 (WojciechMazur)
Java Standard Library¶
Fix #2751: javalib Files#delete now throws informative DirectoryNotEmptyException #2753 (LeeTibbert)
Fix #2280: Add Unix-only IPv6 TCP support to javalib #2823 (LeeTibbert)
Adding missing
java.lang.Character
functionality #2871 (j-mie6)A few java.net.Inet*Address fixes #2877 (LeeTibbert)
Port
j.u.ArrayDeque
from JSR 166 #2898 (armanbilge)Fix #2911: javalib IPv6 addresses now display using only lowercase hexadecimal digits #2913 (LeeTibbert)
Fix #2903: avoid systematic checking of String integrity in IEEE754Helpers #2907 (david-bouyssie)
Fix #2927: Expunge non-JVM j.l.String#getValue() #2928 (LeeTibbert)
Fix #I2925: A j.l.String constructor now yields immutable strings #2929 (LeeTibbert)
Fix #2935: Ensure StringBuilder does not alter existing child Strings #2936 (LeeTibbert)
Optimize method
AbstractStringBuilder.append0(CharSequence, Int, Int)
#2909 (david-bouyssie)Partial fix #2923: Improve javalib 64 bit UnixProcess waitFor handling #2972 (LeeTibbert)
Add JDK9 constructors to
j.m.BigInteger
#2974 (armanbilge)Fix #2975: Remove inefficient close() and chdir() calls in Process impls #2976 (LeeTibbert)
Implement
Math.fma
#2979 (armanbilge)Fix 2980: javalib j.l.p.UnixProcessGen2 now spawns when it can. #2982 (LeeTibbert)
Partial fix #3005: j.n.InetAddress now uses more UnknownHostExceptions #3007 (LeeTibbert)
Adapt
{Unix,Windows}PlainSocketImpl
to work in multithreading mode #3128 (WojciechMazur)Port
java.util.concurrent.Atomic
types from JSR-166 #3129 (WojciechMazur)Port
java.util.concurrent.locks
types from JSR-166 #3130 (WojciechMazur)Port
java.util.concurrent.ThreadLocalRandom
from JSR-166 #3132 (WojciechMazur)Port
java.util.concurrent.BlockingQueue
and subtypes #3133 (WojciechMazur)Port
java.util.concurrent.ForkJoinPool
from JSR-166 #3136 (WojciechMazur)Port
java.util.concurrent.ThreadPoolExecutor
from JSR-166 #3141 (WojciechMazur)Port
java.util.concurrent.atomic.Atomic*FieldUpdater
s from JSR-166 #3148 (WojciechMazur)Implement
java.lang.Runtime.availableProcessors
#3150 (WojciechMazur)Port
java.util.concurrent.ScheduledThreadPoolExecutor
from JSR-166 #3142 (WojciechMazur)Port
java.util.concurrent.Semaphore
from JSR-166 #3164 (WojciechMazur)Implement JDK-19 Thread API #3242 (WojciechMazur)
Synchronise ForkJoinPool port with JSR-166 changes for JDK 19 #3243 (WojciechMazur)
Port
ConcurrentNavigableMap.java
from JSR-166 #3324 (mox692)Fix #3328: javalib non-Windows FileChannel size method now preserves current file position #3332 (LeeTibbert)
Fix #3330: javalib FileChannel#truncate now only shrinks #3358 (LeeTibbert)
Fix #3373: javalib {Stream, DoubleStream} sequential & parallel methods now match a JVM #3374 (LeeTibbert)
Port Piped{Input,Output}Stream from Apache Harmony #2691 (WojciechMazur)
Fix #3452: javalib Process.waitFor() now returns expected child exit code #3459 (LeeTibbert)
Implement
java.nio.ByteBuffer
s backed byunsafe.Ptr
#3532 (WojciechMazur)Remove URL related classes from supported javalib #3564 (tanishiking)
Port JSR-166
LinkedTransferQueue
#3560 (natsukagami)Port
java.util.concurrent.ConcurrentLinkedQueue
from JSR-166 #3565Fix #3530: Improve javalib InetAddress name-to-address resolution #3569 (LeeTibbert)
Port
java.util.concurrent.ConcurrentHashMap
from JSR-166 #3568 (WojciechMazur) (WojciechMazur)Support for Java Service Providers via linktime resolved
java.util.ServiceLoader.load
#3574 (WojciechMazur)Implement java.net DatagramSocket and DatagramPacket #3614 (RustedBones)
Fix #3657: Remove a number of java.net defects #3666 (LeeTibbert)
fix: Fix accessing mapped byte buffers if offset is not page size alligned #3679 (WojciechMazur)
improvement: Add most of missing JDK9+ methods for
java.nio
buffers #3681 (WojciechMazur)Fix #3672: Improve javalib java.net handling of NetworkInterface indices #3702 (LeeTibbert)
Fix #3707: javalib Inet6Address#hashCode is now more robust to null hostnames #3709 (LeeTibbert)
Fix #3705: java.net ServerSockets can now listen on both IPv6 & IPv4 #3710 (LeeTibbert)
Fix #3708: javalib Inet6Address ipv6Address argumentsare now resistant to outside change. #3715 (LeeTibbert)
Fix #3706: java.net.ServerSocket now reports local address of accepted socket correctly #3714 (LeeTibbert)
Improvement: Improve ByteBuffers performance #3718 (WojciechMazur)
feature: Implement experimental javalib IntStream & LongStream classes #3729 (LeeTibbert)
Fix #3732: remove some defects in javalib FileChannel transfer methods #3734 (LeeTibbert)
Fix #3738: javalib Files.createTemp*(bogusPath) no longer loops forever #3739 (LeeTibbert)
Fix #3733: javalib FileChannel transfer* methods now honor Long counts #3746 (LeeTibbert)
Implement javalib ZipFile stream method #3749 (LeeTibbert)
refactor: Remove stubs for
java.security
andjava.rmi
#3758 (WojciechMazur)JVM behavior parity for unresolved addresses #3803 (RustedBones)
fix: Execute
WeakReference
post-cleanup callbacks only injava.lang.Thread
#3815 (WojciechMazur)Fix #3796, #3786: Implement UTF-8 support in java.util.zip classes #3814 (LeeTibbert)
improvement: implement java.util.BitSet#stream #3819 (LeeTibbert)
fix: Retry
read
when interrupted by signal inAbstractPlainSocketImpl
#3827 (WojciechMazur)improvement: Support interrupted shutdown hooks in multithreaded application #3850 (WojciechMazur)
Toolchain¶
Add support for 32-bit platforms through a linker-level switch #1571 (shadaj)
Allow to link as dynamic library #2145 (WojciechMazur)
Use opaque pointers in generated LLVM IR when possible #3190 (WojciechMazur)
Preserve more information about unreachable symbols #3537 (WojciechMazur)
Validate well known issues in provided or discovered NativeConfig #3544 (WojciechMazur)
Fix #2778: @link doesn’t play nice with glue code #3389 (ekrich)
Add
@define
annotation to propagate linktime reachability to native code compile phase #3427 (armanbilge)Partition into multiple LLVM IR files per Scala source file originated from #3466 (tanishiking)
Enable to specify include and exclude resource patterns with glob #3562 (tanishiking)
improvement: Extend generation of source debug information with Class field layouts #3620 (WojciechMazur)
Emit
acquire
fence before loadingfinal
field #3699 (armanbilge)Optimize NIR to be memory efficient #3320 (WojciechMazur)
Unmangle procedure names in DISubprogram #3387 (tanishiking)
Fixes #2731: Need better way to detect 32-bit platforms #3436 (ekrich)
Preserve local variables names in NIR #3386 (WojciechMazur)
Add information about lexical scopes to NIR debug informations #3438 (WojciechMazur)
Enforce narrower types in NIR and toolchain #3448 (WojciechMazur)
Add filename and line number to backtrace #3343 (tanishiking)
Emit local values for the debugger #3443 (WojciechMazur)
Better backtrace in classloading for unreachable symbols #3449 (WojciechMazur)
Fix tracking references of delayed methods and make generating backtraces safer #3455 (WojciechMazur)
Add variants of NativeConfig methods taking a mapping function instead of computed value #3457 (WojciechMazur)
Detect at linktime usage of unsupported features #3472 (WojciechMazur)
Do not emit single LLVM IR file for release mode + LTO none #3514 (tanishiking)
improvement: Better resolution of sources classpath #3646 (WojciechMazur)
feature: Autmatically disable unused multithreading to improve performance #3670 (WojciechMazur)
Allow cross-compiling from Mac to Linux and vice versa #3716 (kubukoz)
improvement: Use debug metadata to create stacktraces on Windows when LTO enabled #3659 (WojciechMazur)
feautre: Relaxed memory model for final fields, strict semantics with
@safePublish
annotation #3719 (WojciechMazur)fix: Optimize inlining decisions and set reasonable values to optimizer config #3722 (WojciechMazur)
improvement: Detect user config change and prune generated/native sources on change #3724 (WojciechMazur)
refactor: Pipeline generation of LLVM IR and it’s compilation #3622 (WojciechMazur)
fix [toolchain]:Prevent usage of outdated compilation outputs in incremenal compilatiation #3728 (WojciechMazur)
refactor: Restrict access to tools and nir types #3812 (WojciechMazur)
feature: Allow to enable strict semantic of extern function calls. #3829 (WojciechMazur)
improvment: Warn when using LTO.thin on MacOS #3833 (WojciechMazur)
fix: Try to mitigate Windows AccessDeniedException when using
IO.deleteRecursive
#3834 (WojciechMazur)
Garbage Collectors¶
Fix #2921: Commix Heap.c now compiles with Clang 15.0.3 #2922 (LeeTibbert)
Install an
EXC_BAD_ACCESS
handler for safepoints on MacOS #3278 (natsukagami)Multithreading support for Commix GC #3229 (WojciechMazur)
improvement/GC: Create a dedicated thread to invoke registered
WeakReference
handlers #3649 (WojciechMazur)refactor: Synchronize naming of GC public API #3652 (WojciechMazur)
fix: Ensure to mark aligned fields by fixing
MemoryLayout.referenceFieldsOffsets
bug #3735 (WojciechMazur)refactor/fix: Use object offsets instead of field indexes for precise object scanning #3736 (WojciechMazur)
improvement: Limit amount of compiled code, restrict glue layer only referenced files. #3849 (WojciechMazur)
Documentation¶
Versioning¶
Upgrade JUnit interface to 0.13.3 #3425 (WojciechMazur)
Update libunwind to 17.0.1 #3499 (WojciechMazur)
Set versionSchema for library part of Scala Native runtime #3524 (WojciechMazur)
Tests interface¶
Allow to prefetch debug info to mitigate spurious failures in the CI #3517 (WojciechMazur)
POSIX bindings¶
Fix #2707: Implement most of POSIX stddef.h #2709 (LeeTibbert)
Fix #2629, #2295: posix sockaddr_storage now implements specification #2630 (LeeTibbert)
Fix #2717: Complete POSIX errno.scala by providing errno variable #2721 (LeeTibbert)
Fix #2666: posix dirent constants are now parameterless methods #2668 (LeeTibbert)
Partial fix #2623: posixlib sys/socket sendto() & recvfrom() now succeed on Linux & Windows using IPv6 #2705 (LeeTibbert)
Fix #2626, #2623: handle socket fields sin6_len & sin_len, when present on OS #2734 (LeeTibbert)
Simplify & shorten additional posixlib socket code paths #2742 (LeeTibbert)
Fix #2738: Shorten posixlib uio codepaths & add UioTest #2741 (LeeTibbert)
Simplify & shorten posixlib netdb code paths #2743 (LeeTibbert)
Fix #2255: complete socket.h; simplify & shorten code paths #2766 (LeeTibbert)
Fix #2835: Simplify & shorten posixlib time code paths #2836 (LeeTibbert)
Fix #2832: A step towards posixlib using shared types #2833 (LeeTibbert)
Fix #2873, #2865: posix netdb is missing symbols #2881 (LeeTibbert)
Fix #2831: Towards a more complete posixlib unistd.scala #2882 (LeeTibbert)
Fix #2892: Implement posixlib sys/select pselect() #2895 (LeeTibbert)
Fix #2891: posixlib spawn is now implemented. #2894 (LeeTibbert)
Partial fix #2963: Add missing SIGTERM & kin to posixlib signal.scala #2964 (LeeTibbert)
Fix #2893: Implement posixlib wait.scala #2969 (LeeTibbert)
Rework many POSIX and C lib with new trait feature #2996 (ekrich)
Fix #3276: Remove two major defects in posixlib utsname.scala #3280 (LeeTibbert)
Fix #3690: compiling posixlib StatTest no longer warns about use of tmpnam() #3703 (LeeTibbert)
C standard library bindings¶
Make clib traits private #3038 (LeeTibbert)
Add bindings and helpers for C atomics #3115 (WojciechMazur)
Rename clib
atomic
tostdatomic
and make it more compliant with Cstdatomic.h
#3541 (WojciechMazur)