I ran across a JPL optics engineer’s explanation of why he’s giving up on his JuliaOptical project. I know there was a discussion about posting lists of gripes, but I don’t remember where that ended up and Jeff said in his talk that he likes complaints. Anyway, in case the user report is helpful to anybody, here it is:
This organization and its repositories have been abandoned. The About section below is left intact. The work was abandoned for the following reasons:
- Julia does not offer significant acceleration over the numpy code of prysm – only about 20%
- writing performant julia is significantly more difficult than writing performant numpy. The base language emits unvectorized code which is slower than numpy, the
@avxmacro is unstable and often crashes the interpreter, the allocator is much slower than numpy or even matlab, and
!are quasi-white space symbols that are far too important to the performance of an algorithm.
@.prefixes to a line are slower than hand placing the
., so that is not a solution
- the language itself, as well as its tooling, is too immature, with poor documentation and many bugs or sharp edges
- errors in Julia are severely cluttered by multiple line long type information which does not aid clarity
JuliaOptics is an organization to house a suite of libraries for physical optics in Julia. This suite has particular goals from the outset:
To respect the prior art that exists in the enumerable physical optics codes written in matlab, python, and so on and learn from their API design.
To provide a minimal API that is easy to learn with a reasonable balance between explicit and “fluent” design.
To enable truly next generation computation in optics through automatic differentiation and other areas of significant development in Julia.
This provides a set of guiding performance marks:
To be more than (5x required, 100x desired) faster than prysm, the fastest public physical optics code.
To freely support computation on CPU or GPU
To force as few allocations as possible, keeping GC time below 15% overall.
The goal at the outset is not to have all features, but to specialize in computational physical optics with emphasis on propagation from pupil to PSF or vice-versa, and between planes. A numerical model of propagation through a coronagraph (two plane to plane, then pupil => PSF => pupil => PSF) will demonstrate the performance efficacy (or lack thereof) of Julia for this domain.