Module(:name, false, false)
can be used to create amodule
that contains no names (it does not importBase
orCore
and does not contain a reference to itself). ([#40110, #42154])@inline
and@noinline
annotations can be used within a function body to give an extra hint about the inlining cost to the compiler. ([#41312])@inline
and@noinline
annotations can now be applied to a function callsite or block to enforce the involved function calls to be (or not to be) inlined. ([#41312])- The default behavior of observing
@inbounds
declarations is now an option viaauto
in--check-bounds=yes|no|auto
([#41551]) - New function
eachsplit(str)
for iteratively performingsplit(str)
. ∀
,∃
, and∄
are now allowed as identifier characters ([#42314]).
- Newly created Task objects (
@spawn
,@async
, etc.) now adopt the world-age for methods from their parent Task upon creation, instead of using the global latest world at start. This is done to enable inference to eventually optimize these calls. Places that wish for the old behavior may useBase.invokelatest
. ([#41449])
- The LLVM-based compiler has been separated from the run-time library into a new library,
libjulia-codegen
. It is loaded by default, so normal usage should see no changes. In deployments that do not need the compiler (e.g. system images where all needed code is precompiled), this library (and its LLVM dependency) can simply be excluded ([#41936]).
hardlink(src, dst)
can be used to create hard links. ([#41639])
@test_throws "some message" triggers_error()
can now be used to check whether the displayed error text contains "some message" regardless of the specific exception type. Regular expressions, lists of strings, and matching functions are also supported. ([#41888])
range
accepts eitherstop
orlength
as a sole keyword argument ([#39241])precision
andsetprecision
now accept abase
keyword ([#42428]).- The
length
function on certain ranges of certain specific element types no longer checks for integer overflow in most cases. The new functionchecked_length
is now available, which will try to use checked arithmetic to error if the result may be wrapping. Or use a package such as SaferIntegers.jl when constructing the range. ([#40382]) - TCP socket objects now expose
closewrite
functionality and support half-open mode usage ([#40783]). - Intersect returns a result with the eltype of the type-promoted eltypes of the two inputs ([#41769]).
Iterators.countfrom
now accepts any type that defines+
. ([#37747])
- A new macro
@time_imports
for reporting any time spent importing packages and their dependencies ([#41612])
- Now uses
textwidth
for formatting%s
and%c
widths ([#41085]).
- Profiling now records sample metadata including thread and task.
Profile.print()
has a newgroupby
kwarg that allows grouping by thread, task, or nested thread/task, task/thread, andthreads
andtasks
kwargs to allow filtering. Further, percent utilization is now reported as a total or per-thread, based on whether the thread is idle or not at each sample.Profile.fetch()
by default strips out the new metadata to ensure backwards compatibility with external profiling data consumers, but can be included with theinclude_meta
kwarg. ([#41742])
RadioMenu
now supports optionalkeybindings
to directly select options ([#41576]).?(x, y
followed by TAB displays all methods that can be called with argumentsx, y, ...
. (The space at the beginning prevents entering help-mode.)MyModule.?(x, y
limits the search toMyModule
. TAB requires that at least one argument have a type more specific thanAny
; use SHIFT-TAB instead of TAB to allow any compatible methods.
- The standard log levels
BelowMinLevel
,Debug
,Info
,Warn
,Error
, andAboveMaxLevel
are now exported from the Logging stdlib ([#40980]).
- Added function
isequal_normalized
to check for Unicode equivalence without explicitly constructing normalized strings ([#42493]).