public
is a new keyword. Symbols marked withpublic
are considered public API. Symbols marked withexport
are now also treated as public API. The difference betweenpublic
andexport
is thatpublic
names do not become available whenusing
a package/module ([#50105]).ScopedValue
implements dynamic scope with inheritance across tasks ([#50958]).- The new macro
Base.Cartesian.@ncallkw
is analogous toBase.Cartesian.@ncall
, but allows to add keyword arguments to the function call ([#51501]). - Support for Unicode 15.1 ([#51799]).
- Three new types around the idea of text with "annotations" (
Pair{Symbol, Any}
entries, e.g.:lang => "en"
or:face => :magenta
). These annotations are preserved across operations (e.g. string concatenation with*
) when possible.AnnotatedString
is a newAbstractString
type. It wraps an underlying string and allows for annotations to be attached to regions of the string. This type is used extensively in the newStyledStrings
standard library to hold styling information.AnnotatedChar
is a newAbstractChar
type. It wraps another char and holds a list of annotations that apply to it.AnnotatedIOBuffer
is a newIO
type that mimics anIOBuffer
, but has specialisedread
/write
methods for annotated content. This can be thought of both as a "string builder" of sorts and also as glue between annotated and unannotated content.
Manifest.toml
files can now be renamed in the formatManifest-v{major}.{minor}.toml
to be preferentially picked up by the given julia version. i.e. in the same folder, aManifest-v1.11.toml
would be used by v1.11 andManifest.toml
by every other julia version. This makes managing environments for multiple julia versions at the same time easier ([#43845]).@time
now reports a count of any lock conflicts where aReentrantLock
had to wait, plus a new macro@lock_conflicts
which returns that count ([#52883]).
-
During precompilation, the
atexit
hooks now run before saving the output file. This allows users to safely tear down background state (such as closing Timers and sending disconnect notifications to heartbeat tasks) and cleanup other resources when the program wants to begin exiting. -
Code coverage and malloc tracking is no longer generated during the package precompilation stage. Further, during these modes pkgimage caches are now used for packages that are not being tracked. This means that coverage testing (the default for
julia-actions/julia-runtest
) will by default use pkgimage caches for all other packages than the package being tested, likely meaning faster test execution. ([#52123]) -
Specifying a path in
JULIA_DEPOT_PATH
now results in the expansion of empty strings to omit the default user depot ([#51448]).
- Updated GC heuristics to count allocated pages instead of individual objects ([#50144]).
- A new
LazyLibrary
type is exported fromLibdl
for use in building chained lazy library loads, primarily to be used within JLLs ([#50074]). - Added support for annotating
Base.@assume_effects
on code blocks ([#52400]). - The libuv library has been updated from a base of v1.44.2 to v1.48.0 ([#49937]).
- The entry point for Julia has been standardized to
Main.main(ARGS)
. This must be explicitly opted into using the@main
macro (see the docstring for further details). When opted-in, and julia is invoked to run a script or expression (i.e. usingjulia script.jl
orjulia -e expr
), julia will subsequently run theMain.main
function automatically. This is intended to unify script and compilation workflows, where code loading may happen in the compiler and execution ofMain.main
may happen in the resulting executable. For interactive use, there is no semantic difference between defining amain
function and executing the code directly at the end of the script ([50974]). - The
--compiled-modules
and--pkgimages
flags can now be set toexisting
, which will cause Julia to consider loading existing cache files, but not to create new ones ([#50586] and [#52573]).
Threads.@threads
now supports the:greedy
scheduler, intended for non-uniform workloads ([#52096]).- A new exported struct
Lockable{T, L<:AbstractLock}
makes it easy to bundle a resource and its lock together ([#52898]).
in!(x, s::AbstractSet)
will return whetherx
is ins
, and insertx
ins
if not.- The new
Libc.mkfifo
function wraps themkfifo
C function on Unix platforms ([#34587]). copyuntil(out, io, delim)
andcopyline(out, io)
copy data into anout::IO
stream ([#48273]).eachrsplit(string, pattern)
iterates split substrings right to left.Sys.username()
can be used to return the current user's username ([#51897]).wrap(Array, m::Union{MemoryRef{T}, Memory{T}}, dims)
is the safe counterpart tounsafe_wrap
([#52049]).GC.logging_enabled()
can be used to test whether GC logging has been enabled viaGC.enable_logging
([#51647]).IdSet
is now exported from Base and considered public ([#53262]).
invmod(n, T)
whereT
is a native integer type now computes the modular inverse ofn
in the modular integer ring thatT
defines ([#52180]).invmod(n)
is an abbreviation forinvmod(n, typeof(n))
for native integer types ([#52180]).replace(string, pattern...)
now supports an optionalIO
argument to write the output to a stream rather than returning a string ([#48625]).- New methods
allequal(f, itr)
andallunique(f, itr)
taking a predicate function ([#47679]). sizehint!(s, n)
now supports an optionalshrink
argument to disable shrinking ([#51929]).- New function
Docs.hasdoc(module, symbol)
tells whether a name has a docstring ([#52139]). - New function
Docs.undocumented_names(module)
returns a module's undocumented public names ([#52413]). - Passing an
IOBuffer
as a stdout argument forProcess
spawn now works as expected, synchronized withwait
orsuccess
, so aBase.BufferStream
is no longer required there for correctness to avoid data races ([#52461]). - After a process exits,
closewrite
will no longer be automatically called on the stream passed to it. Callwait
on the process instead to ensure the content is fully written, then callclosewrite
manually to avoid data-races. Or use the callback form ofopen
to have all that handled automatically. @timed
now additionally returns the elapsed compilation and recompilation time ([#52889])filter
can now act on aNamedTuple
([#50795]).Iterators.cycle(iter, n)
runs overiter
a fixed number of times, instead of forever ([#47354])zero(::AbstractArray)
now applies recursively, sozero([[1,2],[3,4,5]])
now produces the additive identity[[0,0],[0,0,0]]
rather than erroring ([#38064]).
- A new standard library for handling styling in a more comprehensive and structured way ([#49586]).
- The new
Faces
struct serves as a container for text styling information (think typeface, as well as color and decoration), and comes with a framework to provide a convenient, extensible (viaaddface!
), and customisable (with a user'sFaces.toml
andloadfaces!
) approach to styled content ([#49586]). - The new
@styled_str
string macro provides a convenient way of creating aAnnotatedString
with various faces or other attributes applied ([#49586]).
- A new standard library for applying syntax highlighting to Julia code, this
uses
JuliaSyntax
andStyledStrings
to implement ahighlight
function that creates anAnnotatedString
with syntax highlighting applied.
cbrt(::AbstractMatrix{<:Real})
is now defined and returns real-valued matrix cube roots of real-valued matrices ([#50661]).eigvals/eigen(A, bunchkaufman(B))
andeigvals/eigen(A, lu(B))
, which utilize the Bunchkaufman (LDL) and LU decomposition ofB
, respectively, now efficiently compute the generalized eigenvalues (eigen
: and eigenvectors) ofA
andB
. Note: The second argument is the output ofbunchkaufman
orlu
([#50471]).- There is now a specialized dispatch for
eigvals/eigen(::Hermitian{<:Tridiagonal})
which performs a similarity transformation to create a real symmetrix triagonal matrix, and solve that using the LAPACK routines ([#49546]). - Structured matrices now retain either the axes of the parent (for
Symmetric
/Hermitian
/AbstractTriangular
/UpperHessenberg
), or that of the principal diagonal (for banded matrices) ([#52480]). bunchkaufman
andbunchkaufman!
now work for anyAbstractFloat
,Rational
and their complex variants.bunchkaufman
now supportsInteger
types, by making an internal conversion toRational{BigInt}
. Added new functioninertia
that computes the inertia of the diagonal factor given by theBunchKaufman
factorization object of a real symmetric or Hermitian matrix. For complex symmetric matrices,inertia
only computes the number of zero eigenvalues of the diagonal factor ([#51487]).- Packages that specialize matrix-matrix
mul!
with a method signature of the formmul!(::AbstractMatrix, ::MyMatrix, ::AbstractMatrix, ::Number, ::Number)
no longer encounter method ambiguities when interacting withLinearAlgebra
. Previously, ambiguities used to arise when multiplying aMyMatrix
with a structured matrix type provided by LinearAlgebra, such asAbstractTriangular
, which used to necessitate additional methods to resolve such ambiguities. Similar sources of ambiguities have also been removed for matrix-vectormul!
operations ([#52837]). lu
andissuccess(::LU)
now accept anallowsingular
keyword argument. When set totrue
, a valid factorization with rank-deficient U factor will be treated as success instead of throwing an error. Such factorizations are now shown by printing the factors together with a "rank-deficient" note rather than printing a "Failed Factorization" message ([#52957]).
- New
@create_log_macro
macro for creating new log macros like@info
,@warn
etc. For instance@create_log_macro MyLog 1500 :magenta
will create@mylog
to be used like@mylog "hello"
which will show as┌ MyLog: hello
etc. ([#52196])
rand
now supports sampling overTuple
types ([#35856], [#50251]).rand
now supports sampling overPair
types ([#28705]).- When seeding RNGs provided by
Random
, negative integer seeds can now be used ([#51416]). - Seedable random number generators from
Random
can now be seeded by a string, e.g.seed!(rng, "a random seed")
([#51527]).
- Tab complete hints now show in lighter text while typing in the repl. To disable
set
Base.active_repl.options.hint_tab_completes = false
interactively, or in startup.jl:if VERSION >= v"1.11.0-0" atreplinit() do repl repl.options.hint_tab_completes = false end end ``` ([#51229]).
- Meta-M with an empty prompt now toggles the contextual module between the previous non-Main contextual module and Main so that switching back and forth is simple. ([#51616], [#52670])
The undocumented function adjust
is no longer exported but is now documented
- Statistics is now an upgradeable standard library ([#46501]).
pmap
now defaults to using aCachingPool
([#33892]).
Base.map
,Iterators.map
, andforeach
lost their single-argument methods ([#52631]).
tput
is no longer called to check terminal capabilities, it has been replaced with a pure-Julia terminfo parser ([#50797]).
- CI now performs limited automatic typo detection on all PRs. If you merge a PR with a failing typo CI check, then the reported typos will be automatically ignored in future CI runs on PRs that edit those same files ([#51704]).