Somewhat OT: since the JIT compiles a different function for each argument type combination, couldn't it compile a different type object for every field type combination?
On Wednesday, October 22, 2014 10:53:26 AM UTC-4, Iain Dunning wrote: > > Do you feel like you are over-typing things? > > In function definitions, you only need types if you actually need to them > to pick a function to dispatch to. They don't make anything go faster, as a > specific version of a function will be compiled for every different set of > argument types you try calling it with. > > So, check out: > https://github.com/IainNZ/GraphLayout.jl/blob/master/src/spring.jl > for example. > layout_spring_adj{T}(adj_matrix::Array{T,2} > So it takes any array of element type T. For every time you call this with > a different element type, a different version of the function will be > compiled. So this fancy looking code: > if adj_matrix[i,j] != zero(eltype(adj_matrix)) > Simply gets turned into if adj_matrix[i,j] != 0.0 or 0 or False or .... > and so on, pretty magic! > > For Types, you should specify concrete types whenever you can, or use > parametric types if you can't. If you don't, and use say, Number, or leave > it blank, simple things like Float64s and Ints will be "boxed", so there > will be overhead whenever you use them and the compiler may struggle to > infer that some things are Float64s or Ints and not just Anys. > > Hope that helps somewhat. > > On Wednesday, October 22, 2014 7:28:12 AM UTC-4, Nils Gudat wrote: >> >> Hi Andreas, >> >> Don't know if you've seen this already and whether this is helpful at >> all, but I discovered this site >> <http://sidekick.windforwings.com/2013/03/print-julia-type-tree-with-juliatypesjl.html> >> >> once when I got confused by some TypeErrors, it basically lays out the >> entire type tree of Julia. >> >> Best, >> Nils >> >> On Wednesday, October 22, 2014 12:11:03 PM UTC+1, Andreas Lobinger wrote: >>> >>> Hello, >>> >>> i'm now a julia user for some time, but still i have problems (comming >>> from a c, f77, matlab, python background) to understand the type system. >>> Especially when i try to integrate own code into packages (happened to >>> Cairo + Compose, pending for Winston) i seem to choose always a more >>> complicated way (my observation, code similar in py or c just looks >>> shorter...) because somehow things do not match. >>> >>> So. >>> >>> What to read to understand the julia approach to types and type >>> interference? >>> >>> Wishing a happy day, >>> Andreas >>> >>> >>>