Torbjörn Granlund wrote on 2020-06-02 11:22:

Surely the field _lc could be be renamed to something less confusing
without dire compatibility consequences.  :-)

Since it was still used like that for the backwards-compatible generator, and 
access was done through the macros anyway, this was regarded as unnecessary 
beyond the comment.

   The plan was to get rid of the struct issues in the next ABI breakage,
   but I guess no one took note of that with respect to the generators,
   or at least no one did anything about it (we've broken the ABI since
   GMP 4.0.1, right?)

What breakage happened for 4.0.1?

Sorry, my wording was a bit confusing. I mean, we've broken the ABI at some 
point between 4.0.1 and now, right? 4.0.1 is the first version where I worked 
on the patch. I remember Kevin mentioning a list of changes to make in case of 
an ABI incompatible release, but I never saw that list until 2012.

This thread talks about this kind of cleanup and mentions a list.

https://gmplib.org/list-archives/gmp-devel/2012-June/002373.html

The list is here:

https://gmplib.org/devel/incompatibility

Cleaning up the random state struct is in the list, but it needs a more 
extensive cleanup than mentioned there, because the function pointers are 
allocated separately, which is a waste.

   I'm not too sure why I removed gmp_randinit_lc, but something about it
   being broken rings a bell, so it's possible that Kevin told me to do
   that.

It's strange, but I cannot recall the reasons either.

I don't think it was ever documented, so it was probably in the works and 
planned, but considered obsolete later, and since it wasn't documented, it was 
removed.

   I don't know for sure why gmp_randinit was not adapted to the new
   generators. Probably Kevin told me to do that but I don't remember the
   rationale.

Perhaps it was to avoid more code than necessary to be pulled into a
user binary?

Very likely, yes.

Unfortunately, Mersenne Twister uses mpz, and I am not saying that that
was a bad choice when you implemented it.

It's not used if you don't call gmp_randseed[_ui](). gmp_randinit_mt includes a 
table with the initial state in order to avoid calling it. The gmp_randseed 
interface itself needs mpz.

 But in order to provide
reentrant mpn PRNG functions, we either rewrite the relevant parts of MT
to use mpn, or exclude it from a new mpn PRNG interface.

As Marco said, this is solved by using XXTEA for seeding.
_______________________________________________
gmp-devel mailing list
gmp-devel@gmplib.org
https://gmplib.org/mailman/listinfo/gmp-devel

Reply via email to