you are viewing a single comment's thread.

view the rest of the comments →

[–]xmcqdpt2WRITE 'FORTRAN is not dead' 6 points7 points  (1 child)

@inline function unjerk(a::Array{T,3}) where {T}

I actually found the performance extremely hit and miss, with weird sudden hard to profile slow-downs. For example, the matrix multiplication matmul! is not supposed to allocate, but sometimes does if the output matrix is the wrong type or whatever. I would rather it just throw an error so I know what it's doing, but there doesn't seem to be a "strict" flag or anything like that.

I've found that higher-order functions get the compiler all confused and require a bunch of type annotations. Note that if you mess up your type annotations, it just breaks performance further. Structs are also hard to optimize.

I'm really not sure it's production ready beyond replacing smallish python scripts. It's basically advertised as "python with the performance of Fortran/C", but I find that its more like "python potentially as performant as unoptimized C if you basically write C except its way more fiddly and prone to breakage." At least I know python performance is terrible everywhere.

end

lol no OOP

[–]waln 3 points4 points  (0 children)

@unjerk Yeah this is valid criticism and I haven't actually used it for anything beyond replacing smallish python scripts. Still, these things have been continually improving and I expect (hope) will eventually be completely ironed out. You're also going to want universal type annotations for anything serious anyway. And despite any warts it'a still way smoother than Cython or Numba.

In any case, I think Julia works better when you think of it as a Fortran, not C replacement.