- Types written with
where
syntax can now be used to define constructors, e.g.(Foo{T} where T)(x) = ...
. <--
and<-->
are now available as infix operators, with the same precedence and associativity as other arrow-like operators ([#36666]).
- The
-->
operator now lowers to a:call
expression, so it can be defined as a function like other operators. The dotted version.-->
is now parsed as well. For backwards compatibility,-->
still parses using its own expression head instead of:call
.
- All platforms can now use
@executable_path
withinjl_load_dynamic_library()
. This allows executable-relative paths to be embedded within executables on all platforms, not just MacOS, which the syntax is borrowed from. ([#35627]) - Constant propogation now occurs through keyword arguments ([#35976])
- The precompilation cache is now created atomically ([#36416]). Invoking n Julia processes simultaneously may create n temporary caches.
- There is no longer a concept of "home project": starting
julia --project=dir
is now exactly equivalent to startingjulia
and then doingpkg> activate $dir
andjulia --project
is exactly equivalent to doing that wheredir = Base.current_project()
. In particular, this means that if you dopkg> activate
after startingjulia
with the--project
option (or withJULIA_PROJECT
set) it will take you to the default active project, which is@v1.5
unless you have modifiedLOAD_PATH
. ([#36434])
- Windows Installer now has the option to 'Add Julia to Path'. To unselect this option
from the commandline simply remove the tasks you do not want to be installed: e.g.
./julia-installer.exe /TASKS="desktopicon,startmenu,addtopath"
, adds a desktop icon, a startmenu group icon, and adds Julia to system PATH.
- New function
Base.kron!
and corresponding overloads for various matrix types for performing Kronecker product in-place. ([#31069]). - New function
Base.Threads.foreach(f, channel::Channel)
for multithreadedChannel
consumption. ([#34543]). - New function
Base.readeach(io, T)
for iteratively performingread(io, T)
. ([#36150]) Iterators.map
is added. It provides another syntaxIterators.map(f, iterators...)
for writing(f(args...) for args in zip(iterators...))
, i.e. a lazymap
([#34352]).- New function
sincospi
for simultaneously computingsinpi(x)
andcospi(x)
more efficiently ([#35816]).
- The
redirect_*
functions can now be called onIOContext
objects.
- The
nextprod
function now accepts tuples and other array types for its first argument ([#35791]). - The function
isapprox(x,y)
now accepts thenorm
keyword argument also for numeric (i.e., non-array) argumentsx
andy
([#35883]). view
,@view
, and@views
now work onAbstractString
s, returning aSubString
when appropriate ([#35879]).- All
AbstractUnitRange{<:Integer}
s now work withSubString
,view
,@view
and@views
on strings ([#35879]). sum
,prod
,maximum
, andminimum
now supportinit
keyword argument ([#36188], [#35839]).unique(f, itr; seen=Set{T}())
now allows you to declare the container type used for keeping track of values returned byf
on elements ofitr
([#36280]).Libdl
has been moved toBase.Libc.Libdl
, however it is still accessible as an stdlib ([#35628]).first
andlast
functions now accept an integer as second argument to get that many leading or trailing elements of any iterable ([#34868]).intersect
onCartesianIndices
now returnsCartesianIndices
instead ofVector{<:CartesianIndex}
([#36643]).RegexMatch
objects can now be probed for whether a named capture group exists within it throughhaskey()
([#36717]).
- New method
LinearAlgebra.issuccess(::CholeskyPivoted)
for checking whether pivoted Cholesky factorization was successful ([#36002]). UniformScaling
can now be indexed into using ranges to return dense matrices and vectors ([#24359]).- New function
LinearAlgebra.BLAS.get_num_threads()
for getting the number of BLAS threads. ([#36360]) (+)(::UniformScaling)
is now defined, making+I
a valid unary operation. ([#36784])
-
The
AbstractMenu
extension interface ofREPL.TerminalMenus
has been extensively overhauled. The new interface does not rely on global configuration variables, is more consistent in delegating printing of the navigation/selection markers, and provides improved support for dynamic menus. These changes are compatible with the previous (deprecated) interface, so are non-breaking.The new API offers several enhancements:
- Menus are configured in their constructors via keyword arguments
- For custom menu types, the new
Config
andMultiSelectConfig
replace the globalCONFIG
Dict request(menu; cursor=1)
allows you to control the initial cursor position in the menu (defaults to first item)MultiSelectMenu
allows you to pass a list of initially-selected items with theselected
keyword argumentwriteLine
was deprecated towriteline
, andwriteline
methods are not expected to print the cursor indicator. The oldwriteLine
continues to work, and any of its method extensions should print the cursor indicator as before.printMenu
has been deprecated toprintmenu
, and it both accepts a state input and returns a state output that controls the number of terminal lines erased when the menu is next refreshed. This plus related changes makesprintmenu
work properly when the number of menu items might change depending on user choices.numoptions
, returning the number of items in the menu, has been added as an alternative to implementingoptions
suppress_output
(primarily a testing option) has been added as a keyword argument torequest
, rather than a configuration option
-
Windows REPL now supports 24-bit colors, by correctly interpreting virtual terminal escapes.
- Display large sparse matrices with a Unicode "spy" plot of their nonzero patterns, and display small sparse matrices by an
Matrix
-like 2d layout of their contents.
Quarter
period is defined ([#35519]).
- Change
uuid1
anduuid4
to useRandom.RandomDevice()
as default random number generator ([#35872]). - Added
parse(::Type{UUID}, ::AbstractString)
method