-
Notifications
You must be signed in to change notification settings - Fork 42
Julia v1.6+ overhaul #163
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Julia v1.6+ overhaul #163
Conversation
Codecov Report
@@ Coverage Diff @@
## master #163 +/- ##
==========================================
+ Coverage 99.43% 99.65% +0.21%
==========================================
Files 14 14
Lines 1061 1157 +96
==========================================
+ Hits 1055 1153 +98
+ Misses 6 4 -2
Continue to review full report at Codecov.
|
I wonder if there's something to be investigated here. It has to do with the length of the map tuple, and it's not quite clear where inference breaks down, or which threshold could be responsible for that. |
I have not been following Julia / master development the last months, so no idea what causes this. Are both tuples no longer inferred? Could it help to add some parametric type declaration to the arguments of the function, to force the compiler to specialise? Maybe there is a heuristic in place by which this function is no longer specialised on the type of its arguments? |
I'm investigating now, but that is work in progress. It seems like it's puzzling the compiler to do |
a6bc93b
to
c2382fd
Compare
Hm, my solution requires |
This additional annotation seems necessary on current master. Otherwise it fails on map tuples longer than some number between 10 (which passes) and 13 (which fails), see our most recent commits.EDIT: This PR started because one test in the block maps test suite started to fail on nightly/v1.8. It turned out that some functions that are called in the process of constructing
BlockMap
s had type inference difficulties. Apparently, quite some work was done even in the v1.6-v1.8 period regarding type inference in Julia Base, and due to changes pre-v1.6 it seemed impossible to maintain clear code that would equally run in a type-stable fashion on all Julia versions starting from v1.0. Given that v1.6 is gonna be the new LTS once v1.7 is released, I ended up removing all theVERSION
branches and switched to by now well-established syntax. Lifting the lower compat bound to v1.6 shouldn't do much harm, as we are leaving a fully operational version behind, just in case some downstream code really requires Julia v1.0.There is no rush to merge this, and we can leave it open for a while and see if we want to merge other urgent features before we lift the lower compat bound.