Julia: `Array{T}(n)` constructors

Created on 18 Jan 2017  Â·  9Comments  Â·  Source: JuliaLang/julia

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

performance types and dispatch

Most helpful comment

It looks like some of those (mostly linalg) could use Ref instead, since they only wanted a one-element array.

All 9 comments

+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! :)

I think we can call this closed, thanks gents

Was this page helpful?
0 / 5 - 0 ratings