Skip to content

Latest commit

 

History

History
174 lines (142 loc) · 9.17 KB

NEWS.md

File metadata and controls

174 lines (142 loc) · 9.17 KB

Julia v1.3 Release Notes

New language features

  • Support for Unicode 12.1.0 (#32002).
  • Methods can now be added to an abstract type (#31916).
  • Support for unicode bold digits and double-struck digits 0 through 9 as valid identifiers (#32838).
  • Added the syntax var"#str#" for printing and parsing non-standard variable names (#32408).

Language changes

Multi-threading changes

  • New experimental Threads.@spawn macro that runs a task on any available thread (#32600).
  • All system-level I/O operations (e.g. files and sockets) are now thread-safe. This does not include subtypes of IO that are entirely in-memory, such as IOBuffer, although it specifically does include BufferStream. (#32309, #32174, #31981, #32421).
  • The global random number generator (GLOBAL_RNG) is now thread-safe (and thread-local) (#32407).
  • New Channel(f::Function, spawn=true) keyword argument to schedule the created Task on any available thread, matching the behavior of Threads.@spawn (#32872).
  • Simplified the Channel constructor, which is now easier to read and more idiomatic julia. Use of the keyword arguments csize and ctype is now discouraged (#30855, #32818).

Build system changes

New library functions

  • findfirst, findlast, findnext and findprev now accept a character as first argument to search for that character in a string passed as the second argument (#31664).
  • New findall(pattern, string) method where pattern is a string or regex (#31834).
  • count(pattern, string) gives the number of things findall would match (#32849).
  • istaskfailed is now documented and exported, like its siblings istaskdone and istaskstarted (#32300).
  • RefArray and RefValue objects now accept index CartesianIndex() in getindex and setindex! (#32653)
  • Added sincosd(x) to simultaneously compute the sine and cosine of x, where x is in degrees (#30134).
  • The function nonmissingtype, which removes Missing from type unions, is now exported (#31562).

Standard library changes

  • Pkg can now download and install binary artifacts through the Pkg.Artifacts submodule and supporting functions. (#32918)
  • When wait (or @sync, or fetch) is called on a failing Task, the exception is propagated as a TaskFailedException wrapping the task. This makes it possible to see the location of the original failure inside the task (as well as the location of the wait call, as before) (#32814).
  • Regex can now be multiplied (*) and exponentiated (^), like strings (#23422).
  • Cmd interpolation (`$(x::Cmd) a b c` where) now propagates x's process flags (environment, flags, working directory, etc) if x is the first interpolant and errors otherwise (#24353).
  • Zero-dimensional arrays are now consistently preserved in the return values of mathematical functions that operate on the array(s) as a whole (and are not explicitly broadcasted across their elements). Previously, the functions +, -, *, /, conj, real and imag returned the unwrapped element when operating over zero-dimensional arrays (#32122).
  • IPAddr subtypes now behave like scalars when used in broadcasting (#32133).
  • Pair is now treated as a scalar for broadcasting (#32209).
  • clamp can now handle missing values (#31066).
  • empty now accepts a NamedTuple (#32534).
  • mod now accepts a unit range as the second argument to easily perform offset modular arithmetic to ensure the result is inside the range (#32628).
  • nothing can now be printed, and interpolated into strings etc. as the string "nothing". It is still not permitted to be interpolated into Cmds (i.e. echo `$(nothing)` will still error without running anything.) (#32148)
  • When open is called with a function, command, and keyword argument (e.g. open(`ls`, read=true) do f ...) it now correctly throws a ProcessFailedException like other similar calls (#32193).
  • mktemp and mktempdir now try, by default, to remove temporary paths they create before the process exits (#32851).
  • Added argument keep to unescape_string (#27125).

Libdl

  • dlopen() can now be invoked in do-block syntax, similar to open().

LinearAlgebra

  • The BLAS submodule no longer exports dot, which conflicts with that in LinearAlgebra (#31838).
  • diagm and spdiagm now accept optional m,n initial arguments to specify a size (#31654).
  • Hessenberg factorizations H now support efficient shifted solves (H+µI) \ b and determinants, and use a specialized tridiagonal factorization for Hermitian matrices. There is also a new UpperHessenberg matrix type (#31853).
  • Added keyword argument alg to svd and svd! that allows one to switch between different SVD algorithms (#31057).
  • Five-argument mul!(C, A, B, α, β) now implements inplace multiplication fused with addition C = A B α + C β (#23919).

SparseArrays

  • SparseMatrixCSC(m,n,colptr,rowval,nzval) perform consistency checks for arguments: colptr must be properly populated and lengths of colptr, rowval, and nzval must be compatible with m, n, and eltype(colptr).
  • sparse(I, J, V, m, n) verifies lengths of I, J, V are equal and compatible with eltype(I) and m, n.

Dates

  • DateTime and Time formatting/parsing now supports 12-hour clocks with AM/PM via I and p codes, similar to strftime (#32308).

Statistics

  • mean now accepts both a function argument and a dims keyword (#31576).

Sockets

  • Sockets.recvfrom now returns both host and port as an InetAddr (#32729).
  • Added InetAddr constructor from AbstractString, representing IP address, and Integer, representing port number (#31459).

Miscellaneous

  • foldr and mapfoldr now work on any iterator that supports Iterators.reverse, not just arrays (#31781).

Deprecated or removed

  • @spawn expr from the Distributed standard library should be replaced with @spawnat :any expr (#32600).
  • Threads.Mutex and Threads.RecursiveSpinLock have been removed; use ReentrantLock (preferred) or Threads.SpinLock instead (#32875).

External dependencies

Tooling Improvements

  • The ClangSA.jl static analysis package has been imported, which makes use of the clang static analyzer to validate GC invariants in Julia's C code. The analysis may be run using make -C src analyzegc.