Hi all,
With Bill soon stepping down as maintainer, I propose merging Antic into Flint. Antic is not too large, fits quite well with core functionality of Flint, and should be easier to maintain as part of Flint than as a standalone library.
I also want to mention the possibility of merging Arb back into Flint. I don't know if this is actually a good idea, and even if I were to lean in favor, I'd certainly not push for it unless there is a consensus in the community. These are just my thoughts on the matter.
Pros:
+ Arb frequently uses cutting-edge Flint features and makes heavy use of Flint internals. A merge would reduce development friction and avoid issues with versions being out of sync.
+ There is the possibility to use Arb in Flint itself. Various functions in Flint currently have much faster Arb counterparts, or could be sped up using Arb implementations: special functions like Bernoulli numbers and partition numbers, finite field extension construction (Gauss period method), various utility functions like fmpz_flog/fmpz_clog, potentially the LLL.
+ Most downstream projects (Nemo, Sage, Python-Flint, ...) already depend on both Flint and Arb, so this would just simplify downstream dependency management.
+ Miscellaneous helper functionality in Arb (fmpz_extras, dirichlet, dlog, bool_mat) would fit quite well in Flint.
+ Potentially a somewhat smaller maintenance burden for me personally managing one large project instead of two large projects.
+ Brand consolidation. It may be easier to "sell" one well-established large library than a bunch of small libraries.
+ Potentially easier to maintain an active developer community, for the same reason.
Cons:
- Initial downstream breakage.
- So far Arb has been on a much faster release cycle than Flint. If I can manage it, it would be good to have more frequent releases Flint rather than less frequent releases of Arb!
- Loss of brand recognition for Arb. [For the record, I don't think this is a huge deal. In fact, it just annoys me when people occasionally suggest making Arb *less* dependent on Flint (e.g. having Arb not depend on Flint). Arb without Flint would be like pineapple without the pizza!]
- Loss of brand recognition for Flint. [This seems less likely, but just to be clear; I don't want to give the impression that Flint should evolve mainly to serve my own Arb-related interests.]
- Harder for users/developers specifically interested in Arb to navigate
the Flint codebase, documentation and issue tracker, and likewise for
Flint users/developers disinterested in Arb.
- Flint is already huge. A larger library takes longer to build and test. A case can be made for the opposite move: splitting Flint into smaller pieces (for example, leaving Flint focused on integers/rationals and spinning off p-adics and finite fields). The size problem could be mitigated somewhat with anti-bloat measures that would be a good idea anyway (using more generics; cleaning up header files; speeding up test code). (BTW, Flint's root directory is also a mess; it could be a good idea to move headers to /include/, modules to /src/, putting the C++ wrapper in its own location, and restructuring the utility modules.)
- Potential loss of commit history and issue tracker, depending on how a merge is done.
- If it turns out to be a bad idea, could be hard to undo (considering further downstream breakage and confusion).
The same pros/cons can be discussed for Calcium.
Fredrik