On May 25, 2016 8:19 AM, "Ford Ox" <[email protected]> wrote:
>
> Lets change compiler so it replace
> array[i]
>
> with
> @getindex(array, i)
>
> instead of
> getindex(array, i)
>
> What we gain:
>
> array[end]
>
> :end can be converted to length(array) in julia itself which is nice!
>
> collections (dict, set, queue...)
>
> dequeue = ... # its a linked list
> dequeue[first]
> dequeue[last]  # IMO :last causes less confusion than :end for new
programmers, but it doesn't really matter
> dequeue[3]
>
>
> macro getindex(q:Queue, key)
>   key == :first && return :(peekfirst(q))  # complexity O(1)
>   key == :last  && return :(peeklast(q))   # complexity O(1)
>   isa(key, Int) && return :(peek(q, key))  # complexity O(n)
> end

No, the type info is not available at syntax level.

>
>
> let's say that we would also have special syntax for
>
> popindex()
> array[index]--  #completely made up
>
> and insertindex()
> array[index]++
>
> Then we could do the similar thing as above
> macro popindex(q:Queue, key)
>   key == :first && return :(shift!(q))
>   key == :last  && return :(polll!(q))
>   isa(key, Int) && return :(deleteat!(q, key))
> end
> macro insertindex .....
>
>
> This looks pretty nice, don't you think?
>
> We could even some crazy stuff like this:
> type  Foo
>  a; b; c; d
> end
>
> macro setindex(f::Foo, key, value)
>   return :(setfield(f, key, value))
> end
>
> f = Foo(1, 2, 3, 4)
> f[c] = 10
> Seems like we don't need the dot accessing aka foo.var huh?
>

Reply via email to