- JuliaSyntax.jl is now used as the default parser, providing better diagnostics and faster
parsing. Set environment variable
JULIA_USE_NEW_PARSER
to0
to switch back to the old parser if necessary (and if you find this necessary, please file an issue) ([#46372]). ⥺
(U+297A,\leftarrowsubset
) and⥷
(U+2977,\leftarrowless
) may now be used as binary operators with arrow precedence. ([#45962])
- When a task forks a child, the parent task's task-local RNG (random number generator) is no longer affected. The seeding of child based on the parent task also takes a more disciplined approach to collision resistance, using a design based on the SplitMix and DotMix splittable RNG schemes ([#49110]).
- A new more-specific rule for methods resolves ambiguities containing Union{} in favor of the method defined explicitly to handle the Union{} argument. This makes it possible to define methods to explicitly handle Union{} without the ambiguities that commonly would result previously. This also lets the runtime optimize certain method lookups in a way that significantly improves load and inference times for heavily overloaded methods that dispatch on Types (such as traits and constructors).
- The "h bar"
ℏ
(\hslash
U+210F) character is now treated as equivalent toħ
(\hbar
U+0127). - The
@simd
macro now has a more limited and clearer semantics, it only enables reordering and contraction of floating-point operations, instead of turning on all "fastmath" optimizations. If you observe performance regressions due to this change, you can recover previous behavior with@fastmath @simd
, if you are OK with all the optimizations enabled by the@fastmath
macro. ([#49405]) - When a method with keyword arguments is displayed in the stack trace view, the textual
representation of the keyword arguments' types is simplified using the new
@Kwargs{key1::Type1, ...}
macro syntax ([#49959]).
- The
@pure
macro is now deprecated. UseBase.@assume_effects :foldable
instead ([#48682]). - The mark phase of the Garbage Collector is now multi-threaded ([#48600]).
- JITLink is enabled by default on Linux aarch64 when Julia is linked to LLVM 15 or later versions ([#49745]). This should resolve many segmentation faults previously observed on this platform.
- New option
--gcthreads
to set how many threads will be used by the Garbage Collector ([#48600]). The default is set toN/2
whereN
is the amount of worker threads (--threads
) used by Julia.
tanpi
is now defined. It computes tan(πx) more accurately thantan(pi*x)
([#48575]).fourthroot(x)
is now defined inBase.Math
and can be used to compute the fourth root ofx
. It can also be accessed using the unicode character∜
, which can be typed by\fourthroot<tab>
([#48899]).Libc.memmove
,Libc.memset
, andLibc.memcpy
are now defined, whose functionality matches that of their respective C calls.Base.isprecompiled(pkg::PkgId)
to identify whether a package has already been precompiled ([#50218]).
- The
initialized=true
keyword assignment forsortperm!
andpartialsortperm!
is now a no-op ([#47979]). It previously exposed unsafe behavior ([#47977]). binomial(x, k)
now supports non-integerx
([#48124]).- A
CartesianIndex
is now treated as a "scalar" for broadcasting ([#47044]). printstyled
now supports italic output ([#45164]).parent
andparentindices
supportSubString
s
startswith
now supports seekableIO
streams ([#43055])- printing integral
Rational
s will skip the denominator inRational
-typed IO context (e.g. inArrays
) ([#45396])
Pkg.precompile
now acceptstiming
as a keyword argument which displays per package timing information for precompilation (e.g.Pkg.precompile(timing=true)
)
AbstractQ
no longer subtypes toAbstractMatrix
. Moreover,adjoint(Q::AbstractQ)
no longer wrapsQ
in anAdjoint
type, but instead in anAdjointQ
, that itself subtypesAbstractQ
. This change accounts for the fact that typicallyAbstractQ
instances behave like function-based, matrix-backed linear operators, and hence don't allow for efficient indexing. Also, manyAbstractQ
types can act on vectors/matrices of different size, acting like a matrix with context-dependent size. With this change,AbstractQ
has a well-defined API that is described in detail in the Julia documentation ([#46196]).- Adjoints and transposes of
Factorization
objects are no longer wrapped inAdjoint
andTranspose
wrappers, respectively. Instead, they are wrapped inAdjointFactorization
andTranposeFactorization
types, which themselves subtypeFactorization
([#46874]). - New functions
hermitianpart
andhermitianpart!
for extracting the Hermitian (real symmetric) part of a matrix ([#31836]). - The
norm
of the adjoint or transpose of anAbstractMatrix
now returns the norm of the parent matrix by default, matching the current behaviour forAbstractVector
s ([#49020]). eigen(A, B)
andeigvals(A, B)
, where one ofA
orB
is symmetric or Hermitian, are now fully supported ([#49533])eigvals/eigen(A, cholesky(B))
now computes the generalized eigenvalues (eigen
: and eigenvectors) ofA
andB
via Cholesky decomposition for positive definiteB
. Note: The second argument is the output ofcholesky
.
- Format specifiers now support dynamic width and precision, e.g.
%*s
and%*.*g
([#40105]).
- When stack traces are printed, the printed depth of types in function signatures will be limited to avoid overly verbose output ([#49795]).
- The
@test_broken
macro (or@test
withbroken=true
) now complains if the test expression returns a non-boolean value in the same way as a non-broken test. ([#47804]) - When a call to
@test
fails or errors inside a function, a larger stacktrace is now printed such that the location of the test within a@testset
can be retrieved ([#49451])
code_native
and@code_native
now default to intel syntax instead of AT&T.@time_imports
now shows the timing of any module__init__()
s that are run ([#49529])