thanks for the super-nice summary!
While in Julia there is no thing like OOP – for the rest of the points I actually completely follow your design choice motivations.
Maybe one thing we did differently is to even modularise the solver, such that stopping criteria and debug could be implemented easier/more general in Julia. But that was also due to the experience from before with other solver frameworks that followed the same path.
For the description of a manifold, Matlab might miss the concrete distingtion between these elements (that is “everything” is a matrix/vector in Matlab), so maybe such a clarification is mainly a way of thinking about how to best document / communicate these differences to the user(s)?
For the note in Manifolds.jl – thanks! – we even started to do a separate package ManifoldsDiff.jl – that focuses on computation of gradients/differentials/Hessians... – But I would say for both packages, that this only makes sense if one has in mind that multiple different tool(boxes) might use that.
For example in Python (with all its Riemannian packages) a common basis PyManifolds might be nice. In Matlab, a separate package might be useful, but for now might only be a split of the toolbox? Though the split might yield that – I don't know maybe – geometric integration might be based on a package like that.
Concerning the thanks – well I would like to give that back as well – it is really a lot of fun working on these code bases (in all 3 languages).