On Monday, September 1, 2014 2:33:31 PM UTC-7, Alex Townsend wrote:
>
> I have written a package FastGauss.jl available here: 
>
> https://github.com/ajt60gaibb/FastGauss.jl
>

> I am a Julia beginner (only been learning for 2 weeks) so I am assuming 
> the code can be 
> improved in a million and one ways. Please tell me if I've done something 
> that Julia does 
> not like. I am not sure if it is appropriate to make this an official 
> package.
>
 
One thing to look out for is making sure your functions have consistent 
return types. E.g. in 
https://github.com/ajt60gaibb/FastGauss.jl/blob/91e2ac656b856876563d5aacf7b5a405e068b3da/src/GaussLobatto.jl#L4
 
you have

    if ( n == 1 ) 
        error("Lobatto undefined for n = 1.") 
    elseif ( n == 2 ) 
        x = ([-1.0,1.0],[1.0,1.0]) 
    elseif ( n == 3 ) 
        x = ([-1, 0, 1], [1.0, 4.0, 1.0]/3)
    # ...

In the n==2 case, you're returning a tuple of two float vectors, but in the 
n==3 case, you're returning a tuple with one Int vector and one float 
vector.

This issue crops up in a few other places, including sometimes returning a 
number and other times returning a vector.

Another thing you might want to consider is devectorizing compound 
operations on vectors to avoid allocating containers to store intermediate 
results (either using https://github.com/lindahua/Devectorize.jl or 
manually). To pick one random place where this might be 
relevant: 
https://github.com/ajt60gaibb/FastGauss.jl/blob/5e3a8a2f9a7e327622bdd43f69bb712afcb16743/src/GaussJacobi.jl#L36

I'm not 100% sure whether this will be relevant to your API, but many high 
performance Julia libs expose mutating versions of functions (marked with 
an ! at the end) that normally return arrays, allowing the caller to 
instead pass in a preallocated array for the result to be stored in that 
could potentially be reused from call to call.

If a quadrature rule may in some cases be used only once, it might be nice 
if there were a way to apply the quadrature method to a function on the fly 
without ever generating the entire node and weight vector.


Reply via email to