I'm trying to figure out the best way to factor code that consists of 
repeated modules which all share some common attributes.

Specifically, if I have (very abbreviated from actual code):

abstract NNModule

type LinearModule <: NNModule
  weight::Array{Float64}
  output::Array{Float64}
end

type SigmoidModule <: NNModule
  output::Array{Float64}
end

For both modules I need an 'output' variable. I know the idea of putting 
variables in an abstract type has come up before. However, while it would 
solve this problem, it is also not yet resolved (and may or may not 
actually happy).

Given that, two alternatives occur to me:
1. Keep the current design and be okay with repeated code (difficult)
2. Use a macro to create the repeated code for me

Option (1) is certainly the easiest, and probably the one I'll stick with 
for now. However, it seems error prone and (IMHO) produces ugly code.

Option (2) has the problem that it can make what's actually happening 
opaque and could potentially produce bugs that are difficult to track down.

So my questions are: 
(1) Have other people come across design issues like this before, and how 
did they deal with it?
(2) Is there a macro out there already to accomplish this? After a quick 
search, I found '@delegate' proposed as a solution for something like this, 
but it was never officially merged. If not, any suggestions on how such a 
macro should act/look?


As a side note, it would be great if Julia added properties to abstract 
types. The current design gives something equivalent to Java's interfaces, 
where most languages opt for mixins instead.

Thanks!

Reply via email to