Julia v1.13 Release Notes
New language features
- New
Base.@acquiremacro for a non-closure version ofBase.acquire(f, s::Base.Semaphore), like@lock. (#56845) - New
nthfunction to access then-th element of a generic iterable. (#56580) - New
@__FUNCTION__macro to refer to the innermost enclosing function. (#58940) - The character U+1F8B2 (RIGHTWARDS ARROW WITH LOWER HOOK), newly added by Unicode 16, is now a valid operator with arrow precedence, accessible as
\hookunderrightarrowat the REPL. ([JuliaLang/JuliaSyntax.jl#525], #57143)
Language changes
mod(x::AbstractFloat, -Inf)now returnsx(as long asxis finite), this aligns with C standard and
is considered a bug fix (#47102)
The
hashalgorithm and its values have changed. Mosthashspecializations will remain correct and require no action. Types that reimplement the core hashing logic independently, such as some third-party string packages do, may require a migration to the new algorithm. (#57509)Indexless
getindexandsetindex!(i.e.A[]) onReinterpretArraynow correctly throw aBoundsErrorwhen there is more than one element. (#58814)
Compiler/Runtime improvements
Command-line option changes
- The option
--sysimage-native-code=nohas been deprecated. - The
JULIA_CPU_TARGETenvironment variable now supports asysimagekeyword to match (or extend) the CPU target used to build the current system image (#58970).
Multi-threading changes
- A new
AbstractSpinLockis defined withSpinLock <: AbstractSpinLock(#55944). - A new
PaddedSpinLock <: AbstractSpinLockis defined. It has extra padding to avoid false sharing (#55944). - New types are defined to handle the pattern of code that must run once per process, called a
OncePerProcess{T}type, which allows defining a function that should be run exactly once the first time it is called, and then always return the same result value of typeTevery subsequent time afterwards. There are alsoOncePerThread{T}andOncePerTask{T}types for similar usage with threads or tasks. ([#TBD])
Build system changes
New library functions
ispositive(::Real)andisnegative(::Real)are provided for performance and convenience (#53677).- Exporting function
fieldindexto get the index of a struct's field (#58119). Base.donotdeleteis now public. It prevents deadcode elemination of its arguments (#55774).Sys.sysimage_target()returns the CPU target string used to build the current system image (#58970).
New library features
fieldoffsetnow also accepts the field name as a symbol asfieldtypealready did (#58100).sort(keys(::Dict))andsort(values(::Dict))now automatically collect, they previously threw (#56978).Base.AbstractOneTois added as a supertype of one-based axes, withBase.OneToas its subtype (#56902).takestring!(::IOBuffer)removes the content from the buffer, returning the content as aString.
Standard library changes
JuliaSyntaxHighlighting
LinearAlgebra
Profile
Random
randperm!andrandcycle!now support non-ArrayAbstractArrayinputs, assuming they are mutable and their indices are one-based (#58596).
REPL
- The display of
AbstractChars in the main REPL mode now includes LaTeX input information like what is shown in help mode (#58181). - Display of repeated frames and cycles in stack traces has been improved by bracketing them in the trace and treating them consistently (#55841).
Test
- Test failures when using the
@testmacro now show evaluated arguments for all function calls (#57825, #57839). - Transparent test sets (
@testset let) now show context when tests error (#58727). @test_throwsnow supports a three-argument form@test_throws ExceptionType pattern exprto test both exception type and message pattern in one call (#59117).
InteractiveUtils
- Introspection utilities such as
@code_typed,@whichand@editnow accept type annotations as substitutes for values, recognizing forms such asf(1, ::Float64, 3)or evensum(::Vector{T}; init = ::T) where {T<:Real}. Type-annotated variables as inf(val::Int; kw::Float64)are not evaluated if the type annotation provides the necessary information, making this syntax compatible with signatures found in stacktraces (#57909, #58222). - Code introspection macros such as
@code_loweredand@code_typednow have a much better support for broadcasting expressions, including broadcasting assignments of the formx .+= f(y)(#58349).