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

The distribution contains the source, examples and (incomplete)
documentation in DVI, PS and HTML. Feel free to download it

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
	* garbage-collected versions of all functions declared in
          paridecl.h (done by scripts)


The following is the program of the pari-2.0.8 distribution

  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.


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:
A2X - Laboratoire d'Algorithmique Arithmétique eXpérimentale 
351, cours de la Libération, 33 405 Talence cedex, France