An exception stack is maintained on each task to make exception handling more robust and enable root cause analysis. The stack may be accessed using the experimental function Base.catch_stack (#28878).
The experimental macro Base.@locals returns a dictionary of current local variable names and values (#29733).
Binary ~ can now be dotted, as in x .~ y (#30341).
Parser inputs ending with a comma are now consistently treated as incomplete. Previously they were sometimes parsed as tuples, depending on whitespace (#28506).
Spaces were accidentally allowed in broadcast call syntax, e.g. f. (x). They are now disallowed, consistent with normal function call syntax (#29781).
Big integer literals and command syntax (backticks) are now parsed with the name of the macro (@int128_str, @uint128_str, @big_str, @cmd) qualified to refer to the Core module (#29968).
Using the same name for both a local variable and a static parameter is now an error instead of a warning (#29429).
findall(in(b), a) now returns a CartesianIndex when a is a matrix or a higher-dimensional array, for consistency with other findall methods. Use LinearIndices(a)[findall(in(b), a)] to get the old behavior, or CartesianIndices(a)[findall(in(b), a)] to get the new behavior on previous Julia versions (#30226).
findmin(::BitArray) and findmax(::BitArray) now return a CartesianIndex when a is a matrix or a higher-dimensional array, for consistency with other array types. Use LinearIndices(a)[findmin(a)[2]] to get the old behavior, or CartesianIndices(a)[findmin(a)[2]] to get the new behavior on previous Julia versions (#30102).
Method signatures such as f(::Type{T}, ::T) where {T <: X} and f(::Type{X}, ::Any) are now considered ambiguous. Previously a bug caused the first one to be considered more specific in some cases (#30160).
When a script run in interactive mode (-i) throws an error, the REPL now starts after the error is displayed. Previously the REPL only started if the script completed without error (#21233).
The code-coverage option now supports output in the LCOV tracefile format and gets propagated to child processes, such as precompile steps and test workers (#30381).
eachrow, eachcol and eachslice functions provide efficient iterators over slices of arrays (#29749).
fieldtypes(T::Type) which returns the declared types of the field in type T (#29600).
uuid5 has been added to the UUIDs standard library (#28761).
Predicates Sys.isfreebsd, Sys.isopenbsd, Sys.isnetbsd, and Sys.isdragonfly for detecting BSD systems have been added (#30249).
Internal Base.disable_library_threading that sets libraries to use one thread. It executes function hooks that have been registered with Base.at_disable_library_threading (#30004).
CartesianIndices can now be constructed from two CartesianIndexes I and J with I:J (#29440).
CartesianIndices support broadcasting arithmetic (+ and -) with a CartesianIndex (#29890).
copy! support for arrays, dicts, and sets has been moved to Base from the Future package (#29173).
Channels now convert inserted values (like containers) instead of requiring types to match (#29092).
range can accept the stop value as a positional argument, e.g. range(1,10,step=2) (#28708).
diff now supports arrays of arbitrary dimensionality and can operate over any dimension (#29827).
The constructor BigFloat(::BigFloat) now respects the global precision setting and always returns a BigFloat with precision equal to precision(BigFloat) (#29127). The optional precision argument to override the global setting is now a keyword instead of positional argument (#29157).
The use of scientific notation when printing BigFloat values is now consistent with other floating point types (#29211).
Regex now behaves like a scalar when used in broadcasting (#29913).
Char now behaves like a read-only 0-dimensional array (#29819).
parse now allows strings representing integer 0 and 1 for type Bool (#29980).
copyto!(::AbstractMatrix, ::UniformScaling) now supports rectangular matrices (#28790).
current_project() now searches the parent directories of a Git repository for a Project.toml file. This also affects the behavior of the --project command line option when using the default --project=@. (#29108).
The spawn API is now more flexible and supports taking IOBuffer directly as an I/O stream, converting to a system pipe as needed (#30278).
edit can now be called on a module to edit the file that defines it (#29636).
All compiler-reflection tools (i.e. the code_ class of functions and macros) now print accurate line number and inlining information in a common style, and take an optional parameter (debuginfo=:default) to control the verbosity of the metadata shown (#29893).
one(i::CartesianIndex) should be replaced with oneunit(i::CartesianIndex) (#29442).
The internal array Base.Grisu.DIGITS is deprecated; new code should use Base.Grisu.getbuf() to get an appropriate task-local buffer and pass it to grisu() instead (#29907).
The internal function Base._default_type(T) has been removed. Calls to it should be replaced with just the argument T (#29739).
peakflops has been scheduled to move from InteractiveUtils to LinearAlgebra but is already now available as LinearAlgebra.peakflops (#29978).