Julia v1.12 Release Notes 
New language features 
- A new keyword argument - usings::Boolhas been added to- names. By using this, we can now find all the names available in module- Aby- names(A; all=true, imported=true, usings=true). (#54609)
- the - @atomic(...)macro family supports now the reference assignment syntax, e.g.- @atomic :monotonic v[3] += 4modifies- v[3]atomically with monotonic ordering semantics. (#54707) The supported syntax allows- atomic fetch ( - x = @atomic v[3]),
- atomic set ( - @atomic v[3] = 4),
- atomic modify ( - @atomic v[3] += 2),
- atomic set once ( - @atomiconce v[3] = 2),
- atomic swap ( - x = @atomicswap v[3] = 2), and
- atomic replace ( - x = @atomicreplace v[3] 2=>5).
 
Language changes 
- When methods are replaced with exactly equivalent ones, the old method is no longer deleted implicitly simultaneously, although the new method does take priority and become more specific than the old method. Thus if the new method is deleted later, the old method will resume operating. This can be useful to mocking frameworks (such as in SparseArrays, Pluto, and Mocking, among others), as they do not need to explicitly restore the old method. While inference and compilation still must be repeated with this, it also may pave the way for inference to be able to intelligently re-use the old results, once the new method is deleted. (#53415) 
- Macro expansion will no longer eagerly recurse into into - Expr(:toplevel)expressions returned from macros. Instead, macro expansion of- :toplevelexpressions will be delayed until evaluation time. This allows a later expression within a given- :toplevelexpression to make use of macros defined earlier in the same- :toplevelexpression. (#53515)
Compiler/Runtime improvements 
- Generated LLVM IR now uses actual pointer types instead of passing pointers as integers. This affects - llvmcall: Inline LLVM IR should be updated to use- i8*or- ptrinstead of- i32or- i64, and remove unneeded- ptrtoint/- inttoptrconversions. For compatibility, IR with integer pointers is still supported, but generates a deprecation warning. (#53687)
- A new exception - FieldErroris now introduced to raise/handle- getfieldexceptions. Previously- getfieldexception was captured by fallback generic exception- ErrorException. Now that- FieldErroris more specific- getfieldrelated exceptions that can occur should use- FieldErrorexception instead. (#54504)
Command-line option changes 
- The - -m/--moduleflag can be passed to run the- mainfunction inside a package with a set of arguments. This- mainfunction should be declared using- @mainto indicate that it is an entry point.
- Enabling or disabling color text in Julia can now be controlled with the 
NO_COLOR or FORCE_COLOR environment variables. (#53742).
- --project=@tempstarts Julia with a temporary environment.
- New - --trace-compile-timingoption to report how long each method reported by- --trace-compiletook to compile, in ms. (#54662)
Multi-threading changes 
Build system changes 
- There are new Makefiles to build Julia and LLVM using the Binary Optimization and Layout Tool (BOLT), seecontrib/boltandcontrib/pgo-lto-bolt(#54107).
New library functions 
- logrange(start, stop; length)makes a range of constant ratio, instead of constant step (#39071)
- The new - isfull(c::Channel)function can be used to check if- put!(c, some_value)will block. (#53159)
- waitany(tasks; throw=false)and- waitall(tasks; failfast=false, throw=false)which wait multiple tasks at once (#53341).
- uuid7()creates an RFC 9652 compliant UUID with version 7 (#54834).
- insertdims(array; dims)allows to insert singleton dimensions into an array which is the inverse operation to- dropdims
- The new - Fixtype is a generalization of- Fix1/Fix2for fixing a single argument (#54653).
New library features 
- invmod(n, T)where- Tis a native integer type now computes the modular inverse of- nin the modular integer ring that- Tdefines (#52180).
- invmod(n)is an abbreviation for- invmod(n, typeof(n))for native integer types (#52180).
- replace(string, pattern...)now supports an optional- IOargument to write the output to a stream rather than returning a string (#48625).
- sizehint!(s, n)now supports an optional- shrinkargument to disable shrinking (#51929).
- New function - Docs.hasdoc(module, symbol)tells whether a name has a docstring (#52139).
- New function - Docs.undocumented_names(module)returns a module's undocumented public names (#52413).
- Passing an - IOBufferas a stdout argument for- Processspawn now works as expected, synchronized with- waitor- success, so a- Base.BufferStreamis no longer required there for correctness to avoid data races (#52461).
- After a process exits, - closewritewill no longer be automatically called on the stream passed to it. Call- waiton the process instead to ensure the content is fully written, then call- closewritemanually to avoid data-races. Or use the callback form of- opento have all that handled automatically.
- @timednow additionally returns the elapsed compilation and recompilation time (#52889)
- escape_stringtakes additional keyword arguments- ascii=true(to escape all non-ASCII characters) and- fullhex=true(to require full 4/8-digit hex numbers for u/U escapes, e.g. for C compatibility) #55099).
- filtercan now act on a- NamedTuple(#50795).
- tempnamecan now take a suffix string to allow the file name to include a suffix and include that suffix in the uniquing checking (#53474)
- RegexMatchobjects can now be used to construct- NamedTuples and- Dicts (#50988)
- Lockableis now exported (#54595)
- New - ltruncate,- rtruncateand- ctruncatefunctions for truncating strings to text width, accounting for char widths (#55351)
Standard library changes 
- gcdx(0, 0)now returns- (0, 0, 0)instead of- (0, 1, 0)(#40989).
- fdreturns a- RawFDinstead of an- Int(#55080).
StyledStrings 
JuliaSyntaxHighlighting 
- A new standard library for applying syntax highlighting to Julia code, this uses JuliaSyntaxandStyledStringsto implement ahighlightfunction that creates anAnnotatedStringwith syntax highlighting applied.
Package Manager 
LinearAlgebra 
- rankcan now take a- QRPivotedmatrix to allow rank estimation via QR factorization (#54283).
- Added keyword argument - algto- eigen,- eigen!,- eigvalsand- eigvals!for self-adjoint matrix types (i.e., the type union- RealHermSymComplexHerm) that allows one to switch between different eigendecomposition algorithms (#49355).
- Added a generic version of the (unblocked) pivoted Cholesky decomposition (callable via - cholesky[!](A, RowMaximum())) (#54619).
Logging 
Printf 
Profile 
Random 
REPL 
- Using the new - usings=truefeature of the- names()function, REPL completions can now complete names that have been explicitly- using-ed. (#54610)
- REPL completions can now complete input lines like - [import|using] Mod: xxx|e.g. complete- using Base.Experimental: @opto- using Base.Experimental: @opaque. (#54719)
- the REPL will now warn if it detects a name is being accessed from a module which does not define it (nor has a submodule which defines it), and for which the name is not public in that module. For example, - mapis defined in Base, and executing- LinearAlgebra.mapin the REPL will now issue a warning the first time occurs. (#54872)
SuiteSparse 
SparseArrays 
Test 
Dates 
Statistics 
Distributed 
Unicode 
DelimitedFiles 
InteractiveUtils 
Deprecated or removed 
External dependencies 
- The terminal info database, terminfo, is now vendored by default, providing a better REPL user experience whenterminfois not available on the system. Julia can be built without vendoring the database using the Makefile optionWITH_TERMINFO=0. (#55411)