- New type system capabilities ([#8974], [#18457])
- Type parameter constraints can refer to previous parameters, e.g.
type Foo{R<:Real, A<:AbstractArray{R}}
. Can also be used in method definitions. - New syntax
Array{T} where T<:Integer
, indicating a union of types over all specified values ofT
(represented by aUnionAll
type). This provides behavior similar to parametric methods ortypealias
, but can be used anywhere a type is accepted. This syntax can also be used in method definitions, e.g.function inv(M::Matrix{T}) where T<:AbstractFloat
. Anonymous functions can have type parameters via the syntax((x::Array{T}) where T<:Real) -> 2x
. - Much more accurate subtype and type intersection algorithms. Method sorting and identification of equivalent and ambiguous methods are improved as a result.
- Type parameter constraints can refer to previous parameters, e.g.
-
Multi-line and single-line nonstandard command literals have been added. A nonstandard command literal is like a nonstandard string literal, but the syntax uses backquotes (
`
) instead of double quotes, and the resulting macro called is suffixed with_cmd
. For instance, the syntaxq`xyz`
is equivalent to@q_cmd "xyz"
. (#18644) -
Nonstandard string and command literals can now be qualified with their module. For instance,
Base.r"x"
is now parsed asBase.@r_str "x"
. Previously, this syntax parsed as an implicit multiplication. (#18690) -
For every binary operator
⨳
,a .⨳ b
is now automatically equivalent to thebroadcast
call(⨳).(a, b)
. Hence, one no longer defines methods for.*
etcetera. This also means that "dot operations" automatically fuse into a single loop, along with other dot callsf.(x)
. (#17623) -
Newly defined methods are no longer callable from the same dynamic runtime scope they were defined in (#17057).
-
isa
is now parsed as an infix operator with the same precedence asin
([#19677]).
This section lists changes that do not have deprecation warnings.
-
String
s no longer have a.data
field (as part of a significant performance improvement). UseVector{UInt8}(str)
to access a string as a byte array. However, allocating theVector
object has overhead. You can also usecodeunit(str, i)
to access thei
th byte of aString
. Usesizeof(str)
instead oflength(str.data)
, andpointer(str)
instead ofpointer(str.data)
. (#19449) -
Operations between
Float16
andIntegers
now returnFloat16
instead ofFloat32
. (#17261) -
Keyword arguments are processed left-to-right: if the same keyword is specified more than once, the rightmost occurrence takes precedence (#17785).
-
The
lgamma(z)
function now uses a different (more standard) branch cut forreal(z) < 0
, which differs fromlog(gamma(z))
by multiples of 2π in the imaginary part (#18330). -
broadcast
now handles tuples, and treats any argument that is not a tuple or an array as a "scalar" (#16986). -
broadcast
now produces aBitArray
instead ofArray{Bool}
for functions yielding a boolean result. If you wantArray{Bool}
, usebroadcast!
or.=
(#17623). -
Operations like
.+
and.*
onRange
objects are now genericbroadcast
calls (see above) and produce anArray
. If you want aRange
result, use+
and*
, etcetera (#17623). -
broadcast
now treatsRef
(except forPtr
) arguments as 0-dimensional arrays (#18965). -
broadcast
now handles missing data (Nullable
s) allowing operations to be lifted over mixtures ofNullable
s and scalars, as if theNullable
were like an array with zero or one element. (#16961, #19787). -
The runtime now enforces when new method definitions can take effect (#17057). The flip-side of this is that new method definitions should now reliably actually take effect, and be called when evaluating new code (#265).
-
The array-scalar operations
div
,mod
,rem
,&
,|
,xor
,/
,\
,*
,+
, and-
now follow broadcast promotion rules ([#19692]). -
broadcast!(f, A)
now callsf()
for each element ofA
, rather than doingfill!(A, f())
([#19722]). -
rmprocs
now throws an exception if requested workers have not been completely removed beforewaitfor
seconds. With awaitfor=0
,rmprocs
returns immediately without waiting for worker exits. -
quadgk
has been moved from Base into a separate package. ([#19741]) -
The
Collections
module has been removed, and all functions defined therein have been moved to theDataStructures
package. ([#19800]) -
The
RepString
type has been moved to the LegacyStrings.jl package. -
In macro calls with parentheses, e.g.
@m(a=1)
, assignments are now parsed as=
expressions, instead of askw
expressions. ([#7669]) -
(µ "micro" and ɛ "latin epsilon") are considered equivalent to the corresponding Greek characters in identifiers.
\varepsilon
now tab-completes to U+03B5 (greek small letter epsilon) ([#19464]). -
retry
now inputs the keyword argumentsdelays
andcheck
instead ofn
andmax_delay
. The previous functionality can be achieved settingdelays
toExponentialBackOff
. ([#19331]) -
transpose(::AbstractVector)
now always returns aRowVector
view of the input (which is a special 1×n-sizedAbstractMatrix
), not aMatrix
, etc. In particular, forv::AbstractVector
we now have(v.').' === v
andv.' * v
is a scalar. ([#19670]) -
Parametric types with "unspecified" parameters, such as
Array
, are now represented asUnionAll
types instead ofDataType
s ([#18457]). -
Union
types have two fields,a
andb
, instead of a singletypes
field. The empty typeUnion{}
is represented by a singleton of typeBottomType
([#18457]). -
The type
NTuple{N}
now refers to tuples where every element has the same type (since it is shorthand forNTuple{N,T} where T
). To get the old behavior of matching any tuple, useNTuple{N,Any}
([#18457]).
-
max
,min
, and related functions (minmax
,maximum
,minimum
,extrema
) now returnNaN
forNaN
arguments (#12563). -
The
chop
andchomp
functions now return aSubString
(#18339). -
Numbered stackframes printed in stacktraces can be opened in an editor by entering the corresponding number in the REPL and pressing
^Q
(#19680). -
The REPL now supports something called prompt pasting (#17599). This activates when pasting text that starts with
julia>
into the REPL. In that case, only expressions starting withjulia>
are parsed, the rest are removed. This makes it possible to paste a chunk of code that has been copied from a REPL session without having to scrub away prompts and outputs. This can be disabled or enabled at will withBase.REPL.enable_promptpaste(::Bool)
. -
The function
print_with_color
can now take a color represented by an integer between 0 and 255 inclusive as its first argument (#18473). For a number to color mapping please refer to this chart. It is also possible to use numbers as colors in environment variables that customizes colors in the REPL. For example, to get orange warning messages, simply setENV["JULIA_WARN_COLOR"] = 208
. Please note that not all terminals support 256 colors. -
The function
print_with_color
no longer prints text in bold by default (#18628). Instead, the function now take a keyword argumentbold::Bool
which determines whether to print in bold or not. On some terminals, printing a color in non bold results in slightly darker colors being printed than when printing in bold. Therefore, light versions of the colors are now supported. For the available colors see the help entry onprint_with_color
. -
The default color for info messages has been changed from blue to cyan and for warning messages from red to yellow. This can be changed back to the original colors by setting the environment variables
JULIA_INFO_COLOR
to"blue"
andJULIA_WARN_COLOR
to"red"
. One way of doing this is by adding for exampleENV["JULIA_INFO_COLOR"] = :blue
andENV["JULIA_WARN_COLOR"] = :red
to the.juliarc.jl
file. For more information regarding customizing colors in the REPL, see this manual section. -
Iteration utilities that wrap iterators and return other iterators (
enumerate
,zip
,rest
,countfrom
,take
,drop
,cycle
,repeated
,product
,flatten
,partition
) have been moved to the moduleBase.Iterators
(#18839). -
BitArrays can now be constructed from arbitrary iterables, in particular from generator expressions, e.g.
BitArray(isodd(x) for x = 1:100)
(#19018). -
hcat
,vcat
, andhvcat
now work withUniformScaling
objects, so you can now do e.g.[A I]
and it will concatenate an appropriately sized identity matrix (#19305). -
New
accumulate
andaccumulate!
functions, which generalizecumsum
andcumprod
. Also known as a scan operation (#18931). -
reshape
now allows specifying one dimension with aColon()
(:
) for the new shape, in which case that dimension's length will be computed such that its product with all the other dimensions is equal to the length of the original array ([#19919]). -
New
titlecase
function, which capitalizes the first character of each word within a string (#19469). -
any
andall
now always short-circuit, andmapreduce
never short-circuits (#19543). That is, not every member of the input iterable will be visited if atrue
(in the case ofany
) orfalse
(in the case ofall
) value is found, andmapreduce
will visit all members of the iterable. -
Additional methods for
ones
andzeros
functions to support the same signature as thesimilar
function (#19635). -
Methods for
map
andfilter
withNullable
arguments have been implemented; the semantics are as if theNullable
were a container with zero or one elements (#16961). -
New
@test_warn
and@test_nowarn
macros in theBase.Test
module to test for the presence or absence of warning messages ([#19903]). -
logging
can be used to redirectinfo
,warn
, anderror
messages either universally or on a per-module/function basis ([#16213]). -
New
iszero(x)
function to quickly check whetherx
is zero (or is all zeros, for an array) ([#19950]). -
notify
now returns a count of tasks woken up ([#19841]).
-
isdefined(a::Array, i::Int)
has been deprecated in favor ofisassigned
(#18346). -
is
has been deprecated in favor of===
(which used to be an alias foris
) (#17758). -
num
andden
have been deprecated in favor ofnumerator
anddenominator
respectively (#19233). -
infix operator
$
has been deprecated in favor of infix⊻
or functionxor()
(#18977). -
Dates.recur
has been deprecated in favor offilter
(#19288) -
cummin
andcummax
have been deprecated in favor ofaccumulate
. -
sumabs
andsumabs2
have been deprecated in favor ofsum(abs, x)
andsum(abs2, x)
, respectively.maxabs
andminabs
have similarly been deprecated in favor ofmaximum(abs, x)
andminimum(abs, x)
. Likewise for the in-place counterparts of these functions (#19598). -
airy
,airyx
andairyprime
have been deprecated in favor of more specific functions (airyai
,airybi
,airyaiprime
,airybiprimex
,airyaix
,airybix
,airyaiprimex
,airybiprimex
) (#18050). -
produce
,consume
and iteration over a Task object have been deprecated in favor of using Channels for inter-task communication ([#19841]).
-
Generator expressions:
f(i) for i in 1:n
(#4470). This returns an iterator that computes the specified values on demand. This is useful for computing, e.g.sum(f(i) for i in 1:n)
without creating an intermediate array of values. -
Generators and comprehensions support filtering using
if
(#550) and nested iteration using multiplefor
keywords (#4867). -
Fused broadcasting syntax:
f.(args...)
is equivalent tobroadcast(f, args...)
(#15032), and nestedf.(g.(args...))
calls are fused into a singlebroadcast
loop (#17300). Similarly, the syntaxx .= ...
is equivalent to abroadcast!(identity, x, ...)
call and fuses with nested "dot" calls; also,x .+= y
and similar is now equivalent tox .= x .+ y
, rather thanx = x .+ y
(#17510). -
Macro expander functions are now generic, so macros can have multiple definitions (e.g. for different numbers of arguments, or optional arguments) (#8846, #9627). However note that the argument types refer to the syntax tree representation, and not to the types of run time values.
-
Varargs functions like
foo{T}(x::T...)
may now restrict the number of such arguments usingfoo{T,N}(x::Vararg{T,N})
(#11242). -
x ∈ X
is now a synonym forx in X
infor
loops and comprehensions, as it already was in comparisons (#13824). -
The
PROGRAM_FILE
global is now available for determining the name of the running script (#14114). -
The syntax
x.:sym
(e.g.Base.:+
) is now supported, while usingx.(:sym)
orx.(i)
for field access are deprecated in favor ofgetfield
(#15032). -
Function return type syntax
function f()::T
has been added (#1090). Values returned from a function with such a declaration will be converted to the specified typeT
. -
Many more operators now support
.
prefixes (e.g..≤
) (#17393). However, users are discouraged from overloading these, since they are mainly parsed in order to implement backwards compatibility with planned automatic broadcasting of dot operators in Julia 0.6 (#16285). Explicitly qualified operator names likeBase.≤
should now useBase.:≤
(prefixed by@compat
if you need 0.4 compatibility via theCompat
package). -
User-extensible bounds check elimination is now possible with the new
@boundscheck
macro (#14474). This macro marks bounds checking code blocks, which the compiler may remove when encountered inside an@inbounds
call.
-
Support for multi-threading. Loops with independent iterations can be easily parallelized with the
Threads.@threads
macro. -
Support for arrays with indexing starting at values different from 1. The array types are expected to be defined in packages, but now Julia provides an API for writing generic algorithms for arbitrary indexing schemes (#16260).
-
Each function and closure now has its own type. The captured variables of a closure are fields of its type.
Function
is now an abstract type, and is the default supertype of functions and closures. All functions, including anonymous functions, are generic and support all features (e.g. keyword arguments). Instead of adding methods tocall
, methods are added by type using the syntax(::ftype)(...) = ...
.call
is deprecated (#13412). A significant result of this language change is that higher order functions can be specialized on their function arguments, leading to much faster functional programming, typically as fast as if function arguments were manually inlined. See below for details. -
Square brackets and commas (e.g.
[x, y]
) no longer concatenate arrays, and always simply construct a vector of the provided values. Ifx
andy
are arrays,[x, y]
will be an array of arrays (#3737, #2488, #8599). -
using
andimport
are now case-sensitive even on case-insensitive filesystems (common on Mac and Windows) (#13542). -
Relational algebra symbols are now allowed as infix operators (#8036):
⨝
,⟕
,⟖
,⟗
for joins and▷
for anti-join. -
A warning is always given when a method is overwritten; previously, this was done only when the new and old definitions were in separate modules (#14759).
-
The
if
keyword cannot be followed immediately by a line break (#15763). -
Juxtaposition of numeric literals ending in
.
(e.g.1.x
) is no longer allowed (#15731). -
The built-in
NTuple
type has been removed;NTuple{N,T}
is now implemented internally asTuple{Vararg{T,N}}
(#11242). -
Use of the syntax
x::T
to declare the type of a local variable is deprecated. In the future this will always mean type assertion, and declarations should uselocal x::T
instead (#16071). Whenx
is global,x::T = ...
andglobal x::T
used to mean type assertion, but this syntax is now reserved for type declaration (#964). -
Dictionary comprehension syntax
[ a=>b for x in y ]
is deprecated. UseDict(a=>b for x in y)
instead (#16510). -
Parentheses are no longer allowed around iteration specifications, e.g.
for (i = 1:n)
(#17668).
This section lists changes that do not have deprecation warnings.
-
All dimensions indexed by scalars are now dropped, whereas previously only trailing scalar dimensions would be omitted from the result (#13612). This is a very major behavioral change, but should cause obvious failures. To retain a dimension sliced with a scalar
i
slice withi:i
instead. -
The assignment operations
.+=
,.*=
and so on now generate calls tobroadcast!
on the left-hand side (or call toview(a, ...)
on the left-hand side if the latter is an indexing expression, e.g.a[...]
). This means that they will fail if the left-hand side is immutable (or does not supportview
), and will otherwise change the left-hand side in-place (#17510, #17546). -
Method ambiguities no longer generate warnings when files are loaded, nor do they dispatch to an arbitrarily-chosen method; instead, a call that cannot be resolved to a single method results in a
MethodError
at run time, rather than the previous definition-time warning (#6190). -
Array comprehensions preserve the dimensions of the input ranges. For example,
[2x for x in A]
will have the same dimensions asA
(#16622). -
The result type of an array comprehension depends only on the types of elements computed, instead of using type inference (#7258). If the result is empty, then type inference is still used to determine the element type.
-
reshape
is now defined to always share data with the original array. If a reshaped copy is needed, usecopy(reshape(a))
orcopy!
to a new array of the desired shape (#4211). -
mapslices
now re-uses temporary storage. Recipient functions that expect input slices to be persistent should copy data to other storage (#17266). All usages ofmapslices
should be carefully audited since this change can cause silent, incorrect behavior, rather than failing noisily. -
Local variables and arguments are represented in lowered code as numbered
Slot
objects instead of as symbols (#15609). -
The information that used to be in the
ast
field of theLambdaStaticData
type is now divided among the fieldscode
,slotnames
,slottypes
,slotflags
,gensymtypes
,rettype
,nargs
, andisva
in theLambdaInfo
type (#15609). -
A <: B
is parsed asExpr(:(<:), :A, :B)
in all cases (#9503). This also applies to the>:
operator. -
Simple 2-argument comparisons like
A < B
are parsed as calls instead of using the:comparison
expression type (#15524). The:comparison
expression type is still produced in ASTs when comparisons are chained (e.g.A < B ≤ C
). -
map
on a dictionary now expects a function that expects and returns aPair
. The result is now another dictionary instead of an array (#16622). -
Bit shift operations (i.e.
<<
,>>
, and>>>
) now handle negative shift counts differently: Negative counts are interpreted as shifts in the opposite direction. For example,4 >> -1 == 4 << +1 == 8
. Previously, negative counts would implicitly overflow to large positive counts, always yielding either0
or-1
.
-
Strings (#16107):
-
The
UTF8String
andASCIIString
types have been merged into a singleString
type (#16058). Useisascii(s)
to check whether a string contains only ASCII characters. Theascii(s)
function now convertss
toString
, raising anArgumentError
exception ifs
is not pure ASCII. -
The
UTF16String
andUTF32String
types and correspondingutf16
andutf32
converter functions have been removed from the standard library. If you need these types, they have been moved to the LegacyStrings.jl package. In the future, more robust Unicode string support will be provided by the StringEncodings.jl package. If you only need these types to call wide string APIs (UTF-16 on Windows, UTF-32 on UNIX), consider using the newtranscode
function (see below) or theCwstring
type as accall
argument type, which also ensures correct NUL termination of string data. -
A
transcode(T, src)
function is now exported for converting data between UTF-xx Unicode encodings (#17323). -
The basic string construction routines are now
string(args...)
,String(s)
,unsafe_string(ptr)
(formerlybytestring(ptr)
), andunsafe_wrap(String, ptr)
(formerlypointer_to_string
) (#16731). -
Comparisons between
Char
s andInteger
s are now deprecated (#16024):'x' == 120
now produces a warning but still evaluates totrue
. In the future it may evaluate tofalse
or the comparison may be an error. To compare characters with integers you should either convert the integer to a character value or convert the character to the corresponding code point first: e.g.'x' == Char(120)
orInt('x') == 120
. The former is usually preferable. -
Support for Unicode 9 (#17402).
-
-
Arrays and linear algebra:
-
Dimensions indexed by multidimensional arrays add dimensions. More generally, the dimensionality of the result is the sum of the dimensionalities of the indices (#15431).
-
New
normalize
andnormalize!
convenience functions for normalizing vectors (#13681). -
QR matrix factorization:
-
A new
SparseVector
type allows for one-dimensional sparse arrays. Slicing and reshaping sparse matrices now return vectors when appropriate. Thesparsevec
function returns a one-dimensional sparse vector instead of a one-column sparse matrix. TheSparseMatrix
module has been renamed toSparseArrays
(#13440). -
Rank one update and downdate functions,
lowrankupdate
,lowrankupdate!
,lowrankdowndate
, andlowrankdowndate!
, have been introduced for dense Cholesky factorizations (#14243, #14424). -
All
sparse
methods now retain provided numerical zeros as structural nonzeros; to drop numerical zeros, usedropzeros!
(#14798, #15242). -
setindex!
methods for sparse matrices and vectors no longer purge allocated entries on zero assignment. To drop stored entries from sparse matrices and vectors, useBase.SparseArrays.dropstored!
(#17404). -
Concatenating dense and sparse matrices now returns a sparse matrix (#15172).
-
-
Files and I/O:
-
The
open
function now respectsumask
on UNIX when creating files (#16466, #16502). -
A new function
walkdir()
returns an iterator that walks the tree of a directory (#8814, #13707).for (root, dirs, files) in walkdir(expanduser("~/.julia/v0.5/Plots/src")) println("$(length(files)) \t files in $root") end 19 files in /Users/me/.julia/v0.5/Plots/src 15 files in /Users/me/.julia/v0.5/Plots/src/backends 4 files in /Users/me/.julia/v0.5/Plots/src/deprecated
-
A new function
chown()
changes the ownership of files (#15007). -
Display properties can now be passed among output functions (e.g.
show
) using anIOContext
object (#13825). -
Cmd(cmd; ...)
now accepts new Windows-specific optionswindows_verbatim
(to alter Windows command-line generation) andwindows_hide
(to suppress creation of new console windows) (#13780). -
There is now a default no-op
flush(io)
function for allIO
types (#16403).
-
-
Parallel computing:
-
pmap
keyword argumentserr_retry=true
anderr_stop=false
are deprecated. Action to be taken on errors can be specified via theon_error
keyword argument. Retry is specified viaretry_n
,retry_on
andretry_max_delay
(#15409, #15975, #16663). -
The functions
remotecall
,remotecall_fetch
, andremotecall_wait
now have the function argument as the first argument to allow for do-block syntax (#13338).
-
-
Statistics:
-
Testing:
-
The
Base.Test
module now has a@testset
feature to bundle tests together and delay throwing an error until the end (#13062). -
The new features are mirrored in the BaseTestNext.jl package for users who would like to use the new functionality on Julia v0.4.
-
The BaseTestDeprecated.jl package provides the old-style
handler
functionality, for compatibility with code that needs to support both Julia v0.4 and v0.5.
-
-
Package management:
-
The package system (
Pkg
) is now based on thelibgit2
library, rather than running thegit
program, increasing performance (especially on Windows) (#11196). -
Package-development functions like
Pkg.tag
andPkg.publish
have been moved to an external PkgDev package (#13387). -
Updating only a subset of the packages is now supported, e.g.
Pkg.update("Example")
(#17132).
-
-
Miscellanous:
-
Prime number related functions have been moved from
Base
to the Primes.jl package (#16481). -
Most of the combinatorics functions have been moved from
Base
to the Combinatorics.jl package (#13897). -
New
foreach
function for calling a function on every element of a collection when the results are not needed (#13774). Compared tomap(f, v)
, which allocates and returns a result array,foreach(f, v)
callsf
on each element ofv
, returning nothing. -
The new
Base.StackTraces
module makes stack traces easier to use programmatically (#14469). -
The
libjulia
library is now properly versioned and installed to the public<prefix>/lib
directory, instead of the private<prefix>/lib/julia
directory (#16362). -
System reflection is now more consistently exposed from
Sys
and notBase
(e.g. constants such asWORD_SIZE
andCPU_CORES
).OS_NAME
has been replaced bySys.KERNEL
and always reports the name of the kernel (as reported byuname
). The@windows_only
and@osx
family of macros have been replaced with functions such asis_windows()
andis_apple()
. There is now also a@static
macro that will evaluate the condition of an if-statement at compile time, for when a static branch is required (#16219). -
Date
andDateTime
values can now be rounded to a specified resolution (e.g., 1 month or 15 minutes) withfloor
,ceil
, andround
(#17037).
-
-
Machine SIMD types can be represented in Julia as a homogeneous tuple of
VecElement
(#15244). -
The performance of higher-order and anonymous functions has been greatly improved. For example,
map(x->2x, A)
performs as well as2.*A
(#13412). -
On windows, a DLL of standard library code is now precompiled and used by default, improving startup time (#16953).
-
LLVM has been upgraded to version 3.7.1, improving the quality of generated code and debug info. However compile times may be slightly longer (#14623).
This release greatly improves support for ARM, and introduces support for Power.
-
The following function names have been simplified and unified (#13232):
-
get_bigfloat_precision
->precision(BigFloat)
-
set_bigfloat_precision
->setprecision
-
with_bigfloat_precision
->setprecision
-
get_rounding
->rounding
-
set_rounding
->setrounding
-
with_rounding
->setrounding
-
-
The method
A_ldiv_B!(SparseMatrixCSC, StridedVecOrMat)
has been deprecated in favor of versions that require the matrix to be in factored form (#13496). -
chol(A,Val{:U/:L})
has been deprecated in favor ofchol(A)
(#13680). -
rem1(x,y)
is discontinued due to inconsistency forx==0
. Usemod1
instead (#14140). -
The
FS
module has been renamed toFilesystem
. Calling the functionsisreadable
,iswritable
, andisexecutable
on filesystem paths has been deprecated (#12819). -
RemoteRef
has been deprecated in favor ofRemoteChannel
(#14458). -
super
has been renamed tosupertype
(#14335). -
parseip(str)
has been deprecated in favor ofparse(IPAddr, str)
(#14676). -
readall
has been renamed toreadstring
, andreadbytes
has been renamed toread
(#14608, #14660). -
fieldoffsets(x)
has been deprecated in favor of callingfieldoffset(x, i)
on each field (#14777). -
issym
is deprecated in favor ofissymmetric
to match similar functions (ishermitian
, ...) (#15192). -
scale
is deprecated in favor of eitherα*A
,Diagonal(x)*A
, orA*Diagonal(x)
(#15258). -
"Functor" types are no longer necessary and have been deprecated (#15804). To maintain performance on older versions of Julia the Compat.jl package provides a
@functorize
macro. -
bitunpack(B)
andbitpack(A)
have been deprecated in favor ofArray(B)
andBitArray(A)
, respectively (#16010). -
xdump
is removed, anddump
now simply shows the full representation of a value.dump
should not be overloaded, since it is for examining concrete structure (#4163). -
sprandbool
has been deprecated in favor ofsprand(Bool, ...)
orsprand(rng, Bool, ...)
(#11688, #16098). -
The lowercase
symbol
function has been deprecated in favor of theSymbol
constructor (#16154). -
writemime
is deprecated, and output methods specifying a MIME type are now methods ofshow
(#14052). -
BLAS utility functions
blas_set_num_threads
,blas_vendor
, andcheck_blas
have been moved to the BLAS module asBLAS.set_num_threads
,BLAS.vendor
, andBLAS.check
(#10548, #16600). -
print_escaped
has been renamed toescape_string
,print_unescaped
has been renamed tounescape_string
, andprint_joined
has been renamed tojoin
(#16603). -
pointer_to_string
has been renamed tounsafe_wrap(String, ...)
, andpointer_to_array
has been renamed tounsafe_wrap(Array, ...)
(#16731). -
sub
andslice
have been deprecated in favor ofview
(#16972). -
Sparse matrix functions
etree
,ereach
,csc_permute
, andsymperm
have been moved to the SuiteSparse.jl package (#12231, #17033). -
The no-op
transpose
fallback for non-numeric arrays has been deprecated. Consider introducing suitabletranspose
methods or callingpermutedims(x, (2, 1))
for matrices andreshape(x, 1, length(x))
for vectors. (#13171, #17075, #17374). -
The following macros have been deprecated (#16219):
@windows
is deprecated in favor ofis_windows()
@unix
is deprecated in favor ofis_unix()
@osx
is deprecated in favor ofis_apple()
@linux
is deprecated in favor ofis_linux()
@windows_only
is deprecated in favor ofif is_windows()
@unix_only
is deprecated in favor ofif is_unix()
@osx_only
is deprecated in favor ofif is_apple()
@linux_only
is deprecated in favor ofif is_linux()
- NOTE: Using
@static
could be useful/necessary when used in a function's local scope. See details at the section entitled Handling Operating System Variation in the manual.
-
The
-F
flag to load~/.juliarc
has been deprecated in favor of--startup-file=yes
(#9482). -
The
-f
and--no-startup
flags to disable loading of~/.juliarc
have been deprecated in favor of--startup-file=no
(#9482). -
The
-P
and--post-boot
flags for evaluating an expression in "interactive mode" have been deprecated in favor of-i -e
(#16854). -
The
--no-history-file
flag to disable loading of~/.julia_history
has been deprecated in favor of--history-file=no
(#9482).
-
The Julia debugger makes its debut with this release. Install it with
Pkg.add("Gallium")
, and the documentation should get you going. The JuliaCon talk on Gallium shows off various features of the debugger. -
The Juno IDE has matured significantly, and now also includes support for plotting and debugging.
-
Cxx.jl provides a convenient FFI for calling C++ code from Julia.