Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I specialize type definitions in Julia?

Tags:

julia

Julia's parametric types really define a family of types containing different layout in memory. I was wondering if this works also for the names and number of fields in a composite type? A simple example would be something like:

type mytype{Float64}
    a::Float64
    b::Float64
end

type mytype{Int64}
    a::Int64
end

This gives me an error for redefining mytype.

Here, I want to have two fields if mytype's type parameter was Float64 and just one if its Int64. (Actually what I want is more complicated, but this is a basic example). One could imagine having abstract types and <:, etc in the above.

I realize this might not be possible in other languages, but to me it seems the compiler should be able to figure this out much the same way functions can be specialized. After all, real (compiled) code will involve concrete types and everything will be known by the compiler. (for truly dynamical types, perhaps an additional layer of encapsulation would be required in this case?)

Perhaps there is a different/better way of achieving similar results?

like image 443
AndyF Avatar asked Jan 09 '15 10:01

AndyF


2 Answers

You could define the two types separately (mytypeF & mytypeI) and define a new type mytype as the union of the two. Then functions which really could statically determine which type they'd received would be specialized as you requested. But I'm not sure if that's sensible or what you're really after.

like image 197
Sebastian Good Avatar answered Oct 13 '22 00:10

Sebastian Good


This is currently not possible, but the feature has been speculatively proposed as "generated types" in issue #8472. Sebastian's answer is a reasonable work around so long as you take care that the grouped mytype constructor is type-stable. For a more complete example, see how ImmutableArrays.jl programmatically defines a group of types around the abstract ImmutableArray locus.

like image 21
mbauman Avatar answered Oct 12 '22 23:10

mbauman