As @tkelman (and others) have noted, it's faster to compile and infer leaf type constructors, like Array{T,1}
, than Array{T}
. The following uses of Array{T}(n)
should accordingly be modified to Array{T,1}(n)
or Vector{T}(n)
:
$ grep -Er 'Array\{[^,]+\}\(0\)' base
base/pcre.jl: buffer = Array{UInt8}(256)
base/sparse/umfpack.jl: tmp = Array{Ptr{Void}}(1)
base/sparse/umfpack.jl: tmp = Array{Ptr{Void}}(1)
base/sparse/umfpack.jl: tmp = Array{Ptr{Void}}(1)
base/sparse/umfpack.jl: tmp = Array{Ptr{Void}}(1)
base/sparse/umfpack.jl: mx = Array{Float64}(1)
base/sparse/umfpack.jl: mx = Array{Float64}(1)
base/sparse/umfpack.jl: mz = Array{Float64}(1)
base/sparse/umfpack.jl: lnz = Array{$itype}(1)
base/sparse/umfpack.jl: unz = Array{$itype}(1)
base/sparse/umfpack.jl: n_row = Array{$itype}(1)
base/sparse/umfpack.jl: n_col = Array{$itype}(1)
base/sparse/umfpack.jl: nz_diag = Array{$itype}(1)
base/sparse/umfpack.jl: lnz = Array{$itype}(1)
base/sparse/umfpack.jl: unz = Array{$itype}(1)
base/sparse/umfpack.jl: n_row = Array{$itype}(1)
base/sparse/umfpack.jl: n_col = Array{$itype}(1)
base/sparse/umfpack.jl: nz_diag = Array{$itype}(1)
base/sparse/sparsevector.jl: nzinds = Array{Ti}(0)
base/sparse/sparsevector.jl: nzvals = Array{Tv}(0)
base/sparse/cholmod.jl:const cholmod_com_offsets = Array{Csize_t}(19)
base/sparse/cholmod.jl:const build_version_array = Array{Cint}(3)
base/sparse/cholmod.jl: current_version_array = Array{Cint}(3)
base/sparse/cholmod.jl: xmatched = Array{SuiteSparse_long}(1)
base/sparse/cholmod.jl: pmatched = Array{SuiteSparse_long}(1)
base/sparse/cholmod.jl: nzoffdiag = Array{SuiteSparse_long}(1)
base/sparse/cholmod.jl: nzdiag = Array{SuiteSparse_long}(1)
base/sparse/sparsematrix.jl: I, J = Array{Int}(0), Array{Int}(0) # indices of nonzero elements
base/sparse/sparsematrix.jl: rows = Array{Int}(0)
base/sparse/sparsematrix.jl: SparseMatrixCSC(m, n, ones(Ti, n+1), Array{Ti}(0), Array{Tv}(0))
base/array.jl: r = Array{eltype(a)}(0)
base/array.jl: ret = Array{promote_eltype(vs...)}(0)
base/linalg/lapack.jl: ihi = Array{BlasInt}(1)
base/linalg/lapack.jl: ilo = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: rcond = Array{$elty}(1)
base/linalg/lapack.jl: rcond = Array{$relty}(1)
base/linalg/lapack.jl: rnk = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: rnk = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: rnk = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: rwork = Array{$relty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: rnk = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: k = Array{BlasInt}(1)
base/linalg/lapack.jl: l = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: k = Array{BlasInt}(1)
base/linalg/lapack.jl: l = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: ilo = Array{BlasInt}(1)
base/linalg/lapack.jl: ihi = Array{BlasInt}(1)
base/linalg/lapack.jl: abnrm = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: ilo = Array{BlasInt}(1)
base/linalg/lapack.jl: ihi = Array{BlasInt}(1)
base/linalg/lapack.jl: abnrm = Array{$relty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: sestpr = Array{$elty}(1)
base/linalg/lapack.jl: s = Array{$elty}(1)
base/linalg/lapack.jl: c = Array{$elty}(1)
base/linalg/lapack.jl: sestpr = Array{$relty}(1)
base/linalg/lapack.jl: s = Array{$elty}(1)
base/linalg/lapack.jl: c = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: rank = Array{BlasInt}(1)
base/linalg/lapack.jl: rcond = Array{$elty}(1)
base/linalg/lapack.jl: m = Array{BlasInt}(1)
base/linalg/lapack.jl: rcond = Array{$relty}(1)
base/linalg/lapack.jl: m = Array{BlasInt}(1)
base/linalg/lapack.jl: m = Array{BlasInt}(1)
base/linalg/lapack.jl: nsplit = Array{BlasInt}(1)
base/linalg/lapack.jl: abstol = Array{$elty}(1)
base/linalg/lapack.jl: m = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl:# work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl:# work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl:# work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: m = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: m = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: rwork = Array{$relty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: rcond = Array{$elty}(1)
base/linalg/lapack.jl: rcond = Array{$relty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: sdim = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: scale = Array{$relty}(1)
base/linalg/blas.jl: result = Array{$elty}(1)
base/linalg/blas.jl: result = Array{$elty}(1)
base/linalg/arpack.jl: TOL = Array{TR}(1)
base/linalg/arpack.jl: rwork = cmplx ? Array{TR}(ncv) : Array{TR}(0)
base/bitarray.jl:BitVector() = BitArray{1}(0)
base/libc.jl: timestr = Array{UInt8}(128)
base/libc.jl: hn = Array{UInt8}(256)
base/essentials.jl: out = Array{Any}(4)
base/float.jl:const basetable = Array{UInt16}(512)
base/float.jl:const shifttable = Array{UInt8}(512)
base/channels.jl: new(Condition(), Condition(), :open, Nullable{Exception}(), Array{T}(0), sz, Array{Condition}(0))
base/libdl.jl: dynamic_libraries = Array{AbstractString}(0)
base/dates/io.jl:const SLOT_RULE = SlotRule(Array{Type}(256))
base/LineEdit.jl: visited = Array{Any}(0)
base/associative.jl: badkeys = Array{keytype(d)}(0)
base/sysinfo.jl: UVcpus = Array{Ptr{UV_cpu_info_t}}(1)
base/sysinfo.jl: count = Array{Int32}(1)
base/sysinfo.jl: uptime_ = Array{Float64}(1)
base/sysinfo.jl: loadavg_ = Array{Float64}(3)
base/profile.jl: iplist = Array{T}(0)
base/profile.jl: n = Array{Int}(0)
base/profile.jl: bt = Array{Vector{UInt64}}(0)
base/profile.jl: counts = Array{Int}(0)
base/libgit2/reference.jl: res = Array{typeof(val)}(0)
base/file.jl: b = Array{UInt8}(1024)
base/file.jl: temppath = Array{UInt16}(32767)
base/file.jl: tname = Array{UInt16}(32767)
base/file.jl: dirs = Array{eltype(content)}(0)
base/file.jl: files = Array{eltype(content)}(0)
base/iostream.jl:const _chtmp = Array{Char}(1)
base/datafmt.jl: a = Array{UInt8}(8192)
base/mpfr.jl:const lgamma_signp = Array{Cint}(1)
base/random.jl: RandomDevice() = new(Array{UInt128}(1))
base/random.jl: a = Array{UInt8}(36)
base/special/bessel.jl: const ai::Array{Float64,1} = Array{Float64}(2)
base/special/bessel.jl: const ae::Array{Int32,1} = Array{Int32}(2)
base/special/bessel.jl:const cy = Array{Float64}(2)
base/special/bessel.jl:const ae = Array{Int32}(2)
base/special/bessel.jl:const wrk = Array{Float64}(2)
base/special/gamma.jl: signp = Array{Int32}(1)
base/special/gamma.jl: signp = Array{Int32}(1)
base/socket.jl: # host = Array{UInt128}(1)
base/socket.jl: # host = Array{UInt128}(1)
base/util.jl: p = Array{UInt8}(128) # mimic Unix getpass in ignoring more than 128-char passwords
base/grisu/fastshortest.jl:function fastshortest(v, buffer = Array{UInt8}(17))
base/grisu/fastprecision.jl:function fastprecision(v, requested_digits, buffer = Array{UInt8}(100))
This is an incomplete list; there are constructors of the form Array{T}(x)
also that are not caught by this regular expression.
cc @tkelman
+1 for Vector
, which is also almost as short and more precise for the reader than Array
.
It looks like some of those (mostly linalg) could use Ref instead, since they only wanted a one-element array.
Aren't constants ok? E.g. Array{Int32}(n)
will be fully inlined?
I think I moved a lot of these to the new syntax, so I'll grab a broom...
As of today:
$ grep -Er 'Array\{[^,]+\}\(0\)' base
base/array.jl: r = Array{eltype(a)}(0)
base/array.jl: ret = Array{promote_eltype(vs...)}(0)
base/associative.jl: badkeys = Array{keytype(d)}(0)
base/bitarray.jl:BitVector() = BitArray{1}(0)
base/file.jl: dirs = Array{eltype(content)}(0)
base/file.jl: files = Array{eltype(content)}(0)
base/libgit2/reference.jl: res = Array{typeof(val)}(0)
There's a typo in the regex in the first post; this one catches more results:
$ grep -Er '\bArray\{[^,]+\}\([0-9]+\)' base
base/libgit2/reference.jl: res = Array{typeof(val)}(0)
base/array.jl: r = Array{eltype(a)}(0)
base/array.jl: ret = Array{promote_eltype(vs...)}(0)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: rcond = Array{$elty}(1)
base/linalg/lapack.jl: rcond = Array{$relty}(1)
base/linalg/lapack.jl: rnk = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: rnk = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: rnk = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: rwork = Array{$relty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: rnk = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: k = Array{BlasInt}(1)
base/linalg/lapack.jl: l = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: k = Array{BlasInt}(1)
base/linalg/lapack.jl: l = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: sestpr = Array{$elty}(1)
base/linalg/lapack.jl: s = Array{$elty}(1)
base/linalg/lapack.jl: c = Array{$elty}(1)
base/linalg/lapack.jl: sestpr = Array{$relty}(1)
base/linalg/lapack.jl: s = Array{$elty}(1)
base/linalg/lapack.jl: c = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: rank = Array{BlasInt}(1)
base/linalg/lapack.jl: rcond = Array{$elty}(1)
base/linalg/lapack.jl: rcond = Array{$relty}(1)
base/linalg/lapack.jl: nsplit = Array{BlasInt}(1)
base/linalg/lapack.jl: abstol = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl:# work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl:# work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl:# work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: rwork = Array{$relty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: rcond = Array{$elty}(1)
base/linalg/lapack.jl: rcond = Array{$relty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: sdim = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: work = Array{$elty}(1)
base/linalg/lapack.jl: iwork = Array{BlasInt}(1)
base/linalg/lapack.jl: scale = Array{$relty}(1)
base/associative.jl: badkeys = Array{keytype(d)}(0)
base/sparse/umfpack.jl: tmp = Array{Ptr{Void}}(1)
base/sparse/umfpack.jl: tmp = Array{Ptr{Void}}(1)
base/sparse/umfpack.jl: tmp = Array{Ptr{Void}}(1)
base/sparse/umfpack.jl: tmp = Array{Ptr{Void}}(1)
base/sparse/cholmod.jl:const cholmod_com_offsets = Array{Csize_t}(19)
base/sparse/cholmod.jl:const build_version_array = Array{Cint}(3)
base/sparse/cholmod.jl: current_version_array = Array{Cint}(3)
base/file.jl: dirs = Array{eltype(content)}(0)
base/file.jl: files = Array{eltype(content)}(0)
Nice catch! :)
https://github.com/JuliaLang/julia/pull/21533 should close this and also https://github.com/JuliaLang/julia/pull/21501 added others that I noticed
I think we can call this closed, thanks gents
Most helpful comment
It looks like some of those (mostly linalg) could use Ref instead, since they only wanted a one-element array.