Skip to Content.
Sympa Menu

mathemagix-devel - Writing bindings for C++ (template) libraries in Mathemagix

Subject: Mathemagix

List archive

Writing bindings for C++ (template) libraries in Mathemagix


Chronological Thread 
  • From: Joris van der Hoeven <address@concealed>
  • To: <address@concealed>
  • Cc: <address@concealed>, <address@concealed>
  • Subject: Writing bindings for C++ (template) libraries in Mathemagix
  • Date: Fri, 25 Jun 2004 16:45:34 +0200 (CEST)


Hi All,

I am happy to announce that the new version 0.1.41 of Mathemagix
(available from mathemagix.org) should allow you to easily glue
C++ libraries as well as C++ template libraries to the interpreter.

The main mechanism is as follows: from an abstract description of
your library in a file like 'myglue.mmh' (see the examples provided
in src/glue), the mmx-extend script automatically generates a C++ file
which is compiled as a shared library 'mmx-myglue.so'. This library
can be loaded dynamically into Mathemagix via 'use "myglue"'.

Your library may also contain templates and the mmx-extend script
*automatically* creates an extension of your library which enables
you to use these templates in a generic way. I.e., having a template
class "Matrix", you will typically be able to use matrices over
matrices over matrices over integers.

Moreover, this generic extension should imply only a minimal overhead.
In the above matrix example, and as long as the operations on the scalars
are implemented in your library, no re-entrant calls to Mathemagix
are needed and operations are done quickly using some void* magic.

The code has been (incompletely) tested together with several libraries
(STL, Gmp, Synaps and Mmxlib) and contributions in this direction would
be *very much* appreciated. Apart from completing the existing binding
files, support for the following mathematical libraries would be nice:

mpfr
mpfi
CLN
NTL
GiNaC
Linbox
libfactory
CGAL
etc.

Further suggestions for interesting scientific libraries are welcome,
the aim being to focus on incorporating as much existing software as
possible before starting to write programs in Mathemagix itself.
It would also be interesting to have bindings for libraries like
gtk, qt, opengl, unicode, cryptography, etc. etc.

Some shortcomings of the current implementation are as follows:

* The GC garbage collector from Boehm seems to be bugged;
it does not allow the use of dynamic libraries ;^(
You may either configure Mathemagix using

./configure --disable-gc

or add an additional section for your library in the current
configure.in file, add your bindings to the src/glue directory
and use static compilation.

* It is only possible to import generic routines from Mathemagix.
Such routines correspond to the operations you wish to perform
on types which occur as template arguments (like the scalar
type for matrices).

It is not possible yet to import ordinary routines or types
from Mathemagix. As a consequence, if you want to write bindings
for several libraries, then you usually have to produce the glue
for all of them together. From an efficiency point of view,
this is better anyway.

* The names of exported C++ classes and functions should be
of the form "identifier" or "identifier<id1,...,idn>".
Special syntactic forms for operations like "x.f", "x->f",
"x::f", etc. are not provided yet. You may always add
the necessary macros or code to the preamble though.

* There may still be some bugs. Feedback on this is appreciated.

Don't hesitate to ask further questions on this list.
Any feedback is appreciated.

Best wishes, Joris



  • Writing bindings for C++ (template) libraries in Mathemagix, Joris van der Hoeven, 06/25/2004

Archive powered by MHonArc 2.6.18.

Top of Page