Karim Belabas on Mon, 20 Aug 2018 18:14:05 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Using lazy vectors in library mode


* Jeroen Demeyer [2018-08-20 12:22]:
> Did you ever consider making it possible to automate dealing with this? For
> example, by storing this information in the prototype?

What would it improve ? The current situation is satisfactory on the GP side :
- no specific code is needed to handle garbage collection of these
objects, they are treated under the same general paradigm via GP variables;
- there are no memory leaks besides a few deprecated constructs
[ "inline" initializations ]. The latter can't be fixed without slowing
down the interpreter by adding further copies / destructors; so far,
it's a good compromise.

In libpari code, it's usually easy to explicitly call a destructor [ e.g.
obj_free ] any time a function such as 'ellinit' was used and we are
sure that we are now done with the object it produced. In a handful of
functions in the PARI library, it was indeed painful, for instance when
a lazy structure becomes recursive [ see e.g. ellanal_globalred ].

Writing such delicate code is hardly ever needed and in any case seems
extremely difficult to automate properly (without SEGVs) and efficiently
(without extra copies).

In something complicated like a Python interface, the tough problem is
not creating an object, but destroying it and ensuring that no pointer
to the destroyed components is ever dereferenced henceforth. You can always
call gunclone_deep() on an object you think may include leaked blocks
with a minor performance penalty.

The current situation is that the following functions create a lazy vector:
  bnfinit
  ellinit
  mfinit
  rnfinit

And many more functions include a lazy vector in their output:
  bnrinit
  mfatkininit
  mffromell
  mffromqf
  mfkohnenbijection
  mfkohneneigenbasis
  mfshimura
  mfsymbol
(there may be more). We have no plan to add this to the description system.

Cheers,

    K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite de Bordeaux         Fax: (+33) (0)5 40 00 21 23
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~kbelabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
`