- 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])
-
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])
- The
-
Indexless
getindexandsetindex!(i.e.A[]) onReinterpretArraynow correctly throw aBoundsErrorwhen there is more than one element. ([#58814])
- 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]).
- 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])
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]).
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.
randperm!andrandcycle!now support non-ArrayAbstractArrayinputs, assuming they are mutable and their indices are one-based ([#58596]).
- 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 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]).
- 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]).