I’m trying to run the test suite for the AbstractAlgebra.jl package with 0.7-beta2, but after many minutes, the first test has not started to run.
This is probably due to us doing something stupid that is hampering performance. (I note there were some issues with a previous beta relating to exceedingly slow performance with regard to compilation, but these have reportedly been solved.)
Does anyone have any insight into changes that might have occurred in the latest version of Julia that might result in impossibly slow performance when starting up tests? I understand there have been some changes here that we might not be up-to-date with.
At this point, I have not seen any test actually run, at least 10 minutes later. The CPU was running flat out for more than 10 minutes, but now seems to have slowed down, yet no test have yet run.
Note that we have not updated AbstractAlgebra for 0.7 yet, due to some bugs that would not allow us to start it up in previous betas. I am no longer hitting those, but the warnings all look harmless and mostly relate to our use of the old docstring format, use of functions that have been moved out of base, and our use of Null and ismatch. I can’t be sure, but I don’t think those could be relevant here.
If I simply type some of the tests in by hand at the console, they pass just fine.
Because our package has many types, there are many methods in some of the generic functions. This includes methods for unions, abstract types and concrete types.
Our system is also fully recursive, in that you can for example build a fraction field over a polynomial ring over a fraction field over a polynomial ring over the integers. This results in types that are parameterised two or three or four levels deep.
Because we can’t add existing Julia types, such as Julia BigInts to our type hierarchy (e.g. make them belong to our abstract class RingElem), we defined a type union, RingElement which includes all RingElems from our system, and a number of types in Julia which could also be considered ring elements, e.g. BigInts.
This means we have functions that are defined for unions of (highly parameterised) abstract types and concrete types.
All types that we have are finite, of course, but Julia-0.7-rc2 simply hangs in type inference when working with some of the larger, more complex method tables.
The issue affects us right across our whole package, not just in one or two places. However, the issue was absent in 0.6, and so is a regression.