Tim: I like that idea. I also think Julia is getting pretty close to the 
point where one of those "watch me build a <something> in julia in 10 
minutes" videos on would be popular on HN; those can be really informative 
for learning effective workflows in a new environment.

The release of v0.3 might be a good milestone for that; if I feel 
sufficiently productive in Julia by then I might try to throw something 
together.

Although, I would prefer that the various discussions on 
docstrings/conventions were settled and implemented first, now that I think 
about it. Right now I'd be kind of embarrassed to let somebody see the way 
I've had to figure out 3rd party package usage (1: google it 2: search the 
online docs, if any 3: when those fail (most of the time), read through the 
entire source code of the package).

On Thursday, May 8, 2014 1:23:30 PM UTC-4, Tim Holy wrote:
>
> Long ago I began a project to add exercises (with answers) to the 
> documentation. We needed better web infrastructure (and more/better 
> problems) 
> to make that practical, so that was abandoned. But for metaprogramming I 
> can 
> imagine that a few exercises might help it click. 
>
> --Tim 
>
>
> On Thursday, May 08, 2014 10:11:34 AM Adam Smith wrote: 
> > I could see the potential for others to want to use this, so I made a 
> gist 
> > for it: 
> > https://gist.github.com/sunetos/0714ae73647160d76aae 
> > 
> > As an aside, I'm really not sure why I didn't understand macros better 
> > until Pierre's comment; I had read the metaprogramming 
> > docs<http://julia.readthedocs.org/en/latest/manual/metaprogramming/> 
> > multiple times. I'm only mentioning it now because I wanted to offer a 
> > suggestion for improving the docs, but now that I re-read that page, the 
> > docs seem quite thorough, so I'm just going to chalk it up to my being 
> in a 
> > daze or something. 
> > 
> > On Thursday, May 8, 2014 12:47:03 PM UTC-4, Adam Smith wrote: 
> > > Thanks to all for the responses! Pierre, you have made me positively 
> > > giddy. Your response was enough to make Julia's metaprogramming 
> finally 
> > > "click" for me, and now I realize how incredibly powerful it is. I was 
> > > able 
> > > to make something even better than I'd hoped for. 
> > > 
> > > Once I realized how easily you can just manipulate the AST, I made 
> this 
> > > really simple version which I didn't particularly like: 
> > > # Usage: 
> > > #   function(x::Int, @Optional(y, MyType)) 
> > > macro Optional(name, ptype) 
> > > 
> > >     Expr(:kw, :($name::Union(Nothing, $ptype)), nothing) 
> > > 
> > > end 
> > > 
> > > Then I was able to develop a flexible macro that better supports the 
> > > standard syntax, and I think is rather elegant: 
> > > # Flag a function argument of any type as optional by generating a 
> Union. 
> > > # If a default value is not defined, it assumes "nothing". 
> > > # Usage: 
> > > #   function(x::Int, @maybe y::MyType) 
> > > #   function(x::Int, @maybe y::MyType=someval) 
> > > macro maybe(argexpr) 
> > > 
> > >     default = nothing 
> > >     if argexpr.head == :(=) 
> > >     
> > >         argexpr, default = argexpr.args 
> > >         default = eval(default) 
> > >     
> > >     end 
> > >     @assert argexpr.head == :(::) 
> > >     name, ptype = argexpr.args 
> > >     deftype = typeof(default) 
> > >     Expr(:kw, :($name::Union($deftype, $ptype)), default) 
> > > 
> > > end 
> > > 
> > > This is exactly the type of thing I was hoping to be able to do with 
> > > Julia; I'm certainly going to try to make it my goto language over 
> python 
> > > now. 
> > > 
> > > On Thursday, May 8, 2014 11:06:11 AM UTC-4, Pierre-Yves Gérardy wrote: 
> > >> On Friday, February 21, 2014 9:36:07 PM UTC+1, Joosep Pata wrote: 
> > >>> #2) def. value in expression, does not work 
> > >>> ex = :(x=1) 
> > >>> q = quote 
> > >>> 
> > >>>         function f2($ex) 
> > >>>         
> > >>>                 x 
> > >>>         
> > >>>         end 
> > >>> 
> > >>> end 
> > >>> println("does not work") 
> > >>> macroexpand(q)|>println 
> > >>> eval(q) 
> > >>> f2()|>println 
> > >>> ~~~ 
> > >>> 
> > >>> 2) gives me 
> > >>> 
> > >>> > ERROR: syntax: "x=1" is not a valid function argument name 
> > >> 
> > >> It works if you define ex as :(f(x=1)).args[2]. While superficially 
> > >> identical, your expression is a :(=), while this one is a :kw. 
> > >> 
> > >> —Pierre-Yves 
>

Reply via email to