I'm not sure I understand. Except for one particular situation (tuple 
arguments), declaring the type of inputs has no impact on performance. The JIT 
will compile a separate version of the function for each different set of input 
types. See the "performance tips" section of the manual.

--Tim

On Thursday, May 08, 2014 01:34:12 AM Adam Smith wrote:
> Actually performance is one of the reasons I wanted to do it this way,
> rather than leaving off type info and just dealing with Anys, which is
> slower (and makes multiple dispatch very messy). I will read through
> Julia's parser a bit more and then file an issue.
 
>  a d a m
> 
> On May 8, 2014, at 1:25 AM, "Kevin Squire" <kevin.squ...@gmail.com> wrote:
> 
> 
> > Hi Adam,
> > 
> > While working with optional and union types won't be as performant as
> > regular types, this seems like it would be useful.  Why don't you file an
> > issue?  It might not be easy or feasible to do what you want, but it's
> > good to bring it to the attention of the main devs.
 
> > Cheers,
> > 
> > 
> >    Kevin
> > 
> > 
> > 
> > 
> >> On Wed, May 7, 2014 at 5:15 PM, Adam Smith
> >> <swiss.army.engin...@gmail.com> wrote:
 Did you make any progress on
> >> this? I tried to do the exact same thing as you, got the exact same
> >> error, googled, and found this post. It seems that Julia parses default
> >> values for arguments separately from the name/type of the arguments.
> >> This was the macro I attempted: 
> >> macro optional(name, ptype)
> >> 
> >>     esc(:($name::Union(Nothing, $ptype) = nothing))
> >> 
> >> end
> >> 
> >> With the desired usage being:
> >> function do_stuff(x::Int, y::String, @optional(z, Float))
> >> 
> >>     # do stuff
> >> 
> >> end
> >> 
> >> What I _really_ want (but I knew wouldn't be possible) would be:
> >> function do_stuff(x::Int, y::String, z::@optional(Float))
> >> 
> >>     # do stuff
> >> 
> >> end
> >> 
> >> The Julia documentation at
> >> http://julia.readthedocs.org/en/latest/manual/metaprogramming/#hygiene
> >> makes the exaggerated claim "An expression wrapped in this manner is
> >> left alone by the macro expander and simply pasted into the output
> >> verbatim."
 
> >> The documentation is clearly oversimplifying a bit, otherwise my macro
> >> should work.
 
> >> 
> >> 
> >> 
> >>> On Friday, February 21, 2014 3:36:07 PM UTC-5, Joosep Pata wrote:
> >>> Hi, 
> >>> 
> >>> I’m trying to write a macro that would generate functions with optional
> >>> arguments. However, I can’t figure out why the following code behaves
> >>> as it does. I’d appreciate if someone told me what I’m doing wrong. 
 
> >>> ~~~ 
> >>> #1) def. value in quote, works 
> >>> ex = :(x) 
> >>> q = quote 
> >>> 
> >>>         function f1($ex=1) 
> >>>         
> >>>                 x 
> >>>         
> >>>         end 
> >>> 
> >>> end 
> >>> macroexpand(q)|>println 
> >>> eval(q) 
> >>> f1()|>println 
> >>> 
> >>> 
> >>> #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 
> >>> ~~~ 
> >>> 
> >>> 1) does not allow me to conveniently construct a list of arguments with
> >>> values, whereas 
 2) gives me
> >>> 
> >>> > ERROR: syntax: "x=1" is not a valid function argument name 
> >>> 
> >>> 
> >>> The macroexpand of either expression looks identical, except for spaces
> >>> around the “=“ sign for 2), which should not make a syntactical
> >>> difference. 
 
> >>> cheers, Joosep
> > 
> > 

Reply via email to