ok, after thinking some, i guess it's because the type of the iterator 
isn't fixed by the function arguments.  i'll see if i can make that 
happen.  andrew

On Wednesday, 19 March 2014 18:03:09 UTC-3, andrew cooke wrote:
>
>
> various people (mainly vtjnash, i guess) have repeatedly warned me off 
> using the type system as much as i would like.  despite this, i had the 
> idea of sticking iterator parameters into the type system.  my reasoning 
> was that specialised code would be inlined for each iterator.  it failed 
> miserably (gave a 300x slowdown), but i don't understand why.
>
> so can anyone give me a rough sketch of why the code at 
> https://github.com/andrewcooke/IntModN.jl/blob/master/src/Range.jl is 
> such a bad idea?
>
> here's the meat:
>
> immutable TypedRange{S,I,E} <: Ranges{Int}
> end
>
> # MyInt is used just to isolate this code; if I re-implement the generic
> # count I cause chaos, changing code deep within the implementation...
>
> function colon(start::MyInt, inc::MyInt, end_::MyInt)
>     TypedRange{start.i, inc.i, end_.i}()
> end
>
>
> start{S,I,E}(r::TypedRange{S,I,E}) = S - I
> next{S,I,E}(r::TypedRange{S,I,E}, i::Int) = (i + I, i + I)
> done{S,I,E}(r::TypedRange{S,I,E}, i::Int) = I > 0 ? i >= E : i <= E
>
> thanks,
> andrew
>
>

Reply via email to