Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time
148 lines (96 sloc) 5.78 KB

Julia v1.7 Release Notes

New language features

  • (; a, b) = x can now be used to destructure properties a and b of x. This syntax is equivalent to a = getproperty(x, :a) and similarly for b. ([#39285])
  • Implicit multiplication by juxtaposition is now allowed for radical symbols (e.g., x√y and x∛y). ([#40173])
  • The short-circuiting operators && and || can now be dotted to participate in broadcast fusion as .&& and .||. ([#39594])
  • (U+2AEA, \Top, \downvDash) and (U+2AEB, \Bot, \upvDash, \indep) may now be used as binary operators with comparison precedence. ([#39403])

Language changes

Compiler/Runtime improvements

Command-line option changes

  • The Julia --project option and the JULIA_PROJECT environment variable now support selecting shared environments like .julia/environments/myenv the same way the package management console does: use julia --project=@myenv resp. export JULIA_PROJECT="@myenv" ([#40025]).

Multi-threading changes

  • If the JULIA_NUM_THREADS environment variable is set to auto, then the number of threads will be set to the number of CPU threads ([#38952])

Build system changes

New library functions

  • Two argument methods findmax(f, domain), argmax(f, domain) and the corresponding min versions ([#27613]).
  • isunordered(x) returns true if x is value that is normally unordered, such as NaN or missing.
  • New macro Base.@invokelatest f(args...; kwargs...) provides a convenient way to call Base.invokelatest(f, args...; kwargs...) ([#37971])
  • New macro Base.@invoke f(arg1::T1, arg2::T2; kwargs...) provides an easier syntax to call invoke(f, Tuple{T1,T2}; kwargs...) ([#38438])
  • Two arguments method lock(f, lck) now accepts a Channel as the second argument. ([#39312])
  • New functor Returns(value), which returns value for any arguments ([#39794])
  • New macro Base.@invoke f(arg1::T1, arg2::T2; kwargs...) provides an easier syntax to call invoke(f, Tuple{T1,T2}, arg1, arg2; kwargs...) ([#38438])

New library features

  • The optional keyword argument context of sprint can now be set to a tuple of :key => value pairs to specify multiple attributes. ([#39381])
  • bytes2hex and hex2bytes are no longer limited to arguments of type Union{String,AbstractVector{UInt8}} and now only require that they're iterable and have a length. ([#39710])

Standard library changes

  • count and findall now accept an AbstractChar argument to search for a character in a string ([#38675]).
  • range now supports the range(start, stop) and range(start, stop, length) methods ([#39228]).
  • range now supports start as an optional keyword argument ([#38041]).
  • islowercase and isuppercase are now compliant with the Unicode lower/uppercase categories ([#38574]).
  • iseven and isodd functions now support non-Integer numeric types ([#38976]).
  • escape_string can now receive a collection of characters in the keyword keep that are to be kept as they are. ([#38597]).
  • getindex can now be used on NamedTuples with multiple values ([#38878])
  • Subtypes of AbstractRange now correctly follow the general array indexing behavior when indexed by Bools, erroring for scalar Bools and treating arrays (including ranges) of Bool as an logical index ([#31829])
  • keys(::RegexMatch) is now defined to return the capture's keys, by name if named, or by index if not ([#37299]).
  • keys(::Generator) is now defined to return the iterator's keys ([#34678])
  • RegexMatch now iterate to give their captures. ([#34355]).
  • Test.@test now accepts broken and skip boolean keyword arguments, which mimic Test.@test_broken and Test.@test_skip behavior, but allows skipping tests failing only under certain conditions. For example
    if T == Float64
        @test_broken isequal(complex(one(T)) / complex(T(Inf), T(-Inf)), complex(zero(T), zero(T)))
        @test isequal(complex(one(T)) / complex(T(Inf), T(-Inf)), complex(zero(T), zero(T)))
    can be replaced by
    @test isequal(complex(one(T)) / complex(T(Inf), T(-Inf)), complex(zero(T), zero(T))) broken=(T == Float64)

Package Manager


  • Use Libblastrampoline to pick a BLAS and LAPACK at runtime. By default it forwards to OpenBLAS in the Julia distribution. The forwarding mechanism can be used by packages to replace the BLAS and LAPACK with user preferences. ([#39455])
  • On aarch64, OpenBLAS now uses an ILP64 BLAS like all other 64-bit platforms. ([#39436])
  • OpenBLAS is updated to 0.3.13. ([#39216])
  • SuiteSparse is updated to 5.8.1. ([#39455])
  • The shape of an UpperHessenberg matrix is preserved under certain arithmetic operations, e.g. when multiplying or dividing by an UpperTriangular matrix. ([#40039])
  • cis(A) now supports matrix arguments ([#40194]).







  • The Dates.periods function can be used to get the Vector of Periods that comprise a CompoundPeriod ([#39169]).






  • mmap is now exported ([#39816]).

Deprecated or removed

  • Multiple successive semicolons in an array expresion were previously ignored (e.g. [1 ;; 2] == [1 ; 2]). Multiple semicolons are being reserved for future syntax and may have different behavior in a future release.

External dependencies

Tooling Improvements