Metaprogramming is immensely powerful. I think this use case is brilliant.

>From the short time that I have been experimenting with it for a bit, I'm a 
bit torn. I think we should be careful about tradeoff that this technique 
forces upon us.

Starting from a moderately complexity, macros can get difficult to reason 
about and edge case problems tends to surface during runtime instead of 
compile time with harder-to-read messages. (Sorry, an unscientific 
definition of complexity). I found myself having to spend more time in repl 
and macroexpand to debug (and to understand others' code). Someone said we 
should not use macros when a function would suffice, and I agree.

Any macros exported by a module should be either so simple that its use is 
trivial (e.g. @assert), or that its behavior is thoroughly documented and 
tested. But even so how do we communicate incorrect usage of the macro? The 
mistake may not even be local to the macro use, but elsewhere. A important 
reason why I tried make Lint.jl extensible by module designers is that 
macros are almost impossible to lint by default (some of them even 
challenges human eye-balls). We need the module designers' help, so that 
the ecosystem stays robust. 

Perhaps we should jointly formulate a stronger style guide around 
metaprogramming.

TLDR: metaprogramming (especially together with multiple-dispatch) in julia 
is really special. I have a feeling that we haven't really unlocked its 
full potential yet, but we need a way to tame the beast.

On Friday, June 20, 2014 12:31:03 PM UTC-4, Job van der Zwan wrote:
>
> For someone who has hardly ever used meta-programming outside of the 
> creation of containers, that was really enlightening! Maybe this is old hat 
> to people who work with macros all the time, or compiler writers and other 
> people close to the metal, but this is the first time I've seen the concept 
> of unrolling *trees**.* Is this a more generalizable technique which can 
> also make sense in other data structures?
>
> On Friday, 20 June 2014 15:09:47 UTC+2, Jacob Quinn wrote:
>>
>> Hey all,
>>
>> Thought I needed to jump on the Julia blogging train now that 
>> http://www.juliabloggers.com/ is live, so feel free to check out my 
>> first post!
>>
>> Blog post: 
>> http://quinnj.github.io/2014/06/19/data-structures-as-code-the-joys-of-meta-programming/index.html
>>
>> Hacker News: https://news.ycombinator.com/item?id=7917724
>>
>> /r/programming: http://www.reddit.com/tb/28kq0n
>>
>> Cheers,
>>
>> -Jacob
>>
>

Reply via email to