Thomas Papanikolaou on Fri, 22 May 1998 14:06:32 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
A C++ interface for pari-2.0.8 |
Dear All, I would like to announce the availability of a C++ interface for pari-2.0.8. This is an alpha release, it shows however the spirit I follow in the development. Please, take this email as an invitation to send suggestions and comments. The main WWW address will be http://www.math.u-bordeaux.fr/~papanik/pali.html The distribution contains the source, examples and (incomplete) documentation in DVI, PS and HTML. Feel free to download it http://www.math.u-bordeaux.fr/~papanik/distrib/PaLi.tar.gz There is CONFIG file in the main directory which has to be edited *manually*. In a later version it will be produced by the PARI configuration system. ----------------------------------------------------------------------- Here is a brief description: The C++ interface encapsulates the "type" GEN into a C++ class called gen. This class (together with some helper classes) can do the following for you: * automatic stack initialization * automatic garbage collecting (no gerepile is necessary anymore; however there is a standard way of combining the "old" and the "new" style) * reference-counting and delayed evaluation (to avoid annoying copying introduced by the method used for automatic garbage collecting; read the documentation for this) * algebraic operator syntax through operator overloading (higher readability) * garbage-collected versions of all functions declared in paridecl.h (done by scripts) Example: The following is the bench.gp program of the pari-2.0.8 distribution { u=v=p=q=1; for (k=1, 1000, w = u+v; u = v; v = w; p *= w; q = lcm(q,w); if (k%50 == 0, print(k " " log(p)/log(q)) ) ) } This program is rewritten in the C++ interface as #include <PaLi/genpari++.h> int main() { gen u, v, p, q, w; int k, prec = 5; u = v = p = q = 1; for (k = 1; k <= 1000; k++) { w = u + v; u = v; v = w; p = p * w; q = _glcm (q, w); if ((k % 50) == 0) cout << k << " " << _glog (p, prec) / _glog (q, prec) << "\n"; } return 0; } (the underscores denote garbage-collected functions) As you see, apart from the declarations the two programs (GP/C++) are the same. More examples are included in the distribution. Best Thomas PS I call the whole project PaLi since I aim to provide a clear interface between Pari and the LiDIA library. I hope that the resulting code will allow to use the two systems as if they were one. Thomas Papanikolaou (PhD) email: papanik@math.u-bordeaux.fr A2X - Laboratoire d'Algorithmique Arithmétique eXpérimentale 351, cours de la Libération, 33 405 Talence cedex, France