MAINZ, Germany, November 6, 2001
(for immediate release)
The GiNaC hackers, the leading providers of advanced mathematical
software solutions for research and industrial applications, loudly
announce the availability of GiNaC version 1.0.
GiNaC stands for "GiNaC is not a CAS", i.e. not a Computer Algebra
System. This is reminiscent to the term GNU, which stands for "GNU is
not Unix", yet GNU systems widely define Unix today. It is a C++
class-library that allows certain common symbolic manipulations to be
expressed directly in that language.
"This release is going to change a whole lot of things" says Richard
Kreckel, vice president of GiNaC's PR department. "Competing
closed-source systems like Mathematica and Maple must be considered
obsolete now and will surely soon fall into oblivion -- Macsyma
already has." Asked whether GiNaC can really compete with all the
fancy features and gimmicks found in those systems he replied: "Hey,
there is always room for version 2.0 and the next generation!"
Alexander Frink, vice president of GiNaC's sales department, could not
be reached for a statement. He was reckoned to be busy encashing
donations from millions of joyous users overwhelmed with enthusiasm.
GiNaC is free software and licensed under the GNU general public
license (GPL).
"Having a truly scalable symbolic system is going to solve many of
todays problems" says Christian Bauer, vice president of the research
and development department. "Applications range from pure maths and
physics over geological surveys, long-term stock options and wheather
forecasts to such fields as wine-making and Japanese cuisine." The
newly released version 1.0 contains "absolutely no significant changes
relative to the last version whatsoever" according to Bauer. Asked
how he sees further development he crypticly proclaimed "We are simply
going to do what we did with the Macintosh: We emulate all other
systems, including their bugs."
Instructions how to download and install GiNaC on a computer system
can be found at <http://www.ginac.de/Download.html>. Also, it comes
pre-bundled with several distributions of the popular Linux operating
system as well as with FreeBSD. Because of this dominant position on
the consumers' computer desktops the US department of justice (DOJ) is
considering filing an antitrust law-suit. "Okay, Microsoft got away
with this practice, but we are not going to tolerate imitators", said
DOJ attorney general John Ashcroft at a meeting with press.
Germany's foreign minister Joschka Fischer delayed his trip to meet
Palestinian president Jassir Arafat to stop in Mainz and congratulate
the GiNaC folks for their release on behalf of Germany's chancellor
Gerhard Schroeder. IT-industry friendly Mr. Schroeder was said to be
busy "getting the beast installed" on his PC. "This new release is
going to have a tremendous impact on global stability" Mr. Fischer
said. "We have observed how politicians and suspected terrorists
alike have become addicted to GiNaC and been converted to coding
machines -- in a noble sense. Wherever they find a PC they start
emitting mesmeric steams and then the miracle of code generation
happens."
Dear Masaharu,
On Fri, 2 Nov 2001, Masaharu Goto wrote:
> 1. Do you really need to compile above template function?
> 2. Or can you accept that this one being interpreted?
>
> In case of 1. , it is unfortunate I see no solution. In case of 2.
> I think it is as simple as to load template source file at run time.
>
> Or do I still miss something? If so, I will review your message again.
> I spent only a few minutes reading it...
No, you are not missing something. I probably was. Having this
interpreted rather than precompiled is obviously the Right Thing (tm).
Thanks for your clarifying comments. Now, given a header file containing
only the definition
template<typename T1>
inline const GiNaC::function cosh(const T1 &p1) {
return GiNaC::function(GiNaC::function_index_cosh, GiNaC::ex(p1));
}
in the GiNaC-Cint interface I can write:
Welcome to ginaccint V1.0.1 (GiNaC V0.9.9, Cint V5.15.10)
__, _______ GiNaC: (C) 1999-2001 Johannes Gutenberg University Mainz,
(__) * | Germany. Cint C/C++ interpreter: (C) 1995-2001 Masaharu
._) i N a C | Goto and Agilent Technologies, Japan. This is free software
<-------------' with ABSOLUTELY NO WARRANTY. For details, type `.warranty'
Type `.help' for help.
>> #include "testheader_cintfunction.h"
>> //ginaccint.function
next expression can be a function definition
>> ex EulerNumber(unsigned n)
> {
> const symbol xi;
> const ex generator = pow(cosh(xi),-1);
> return generator.diff(xi,n).subs(xi==0);
> }
creating file /tmp/ginacbt5aGZ
>> cout << EulerNumber(60) << endl;
18108911496579230496545807741652158688733487349236314106008095454231325
>> quit;
removing file /tmp/ginacbt5aGZ
I am almost happy. There are just the following problems left:
1) I cannot just #include <ginac/function.h> and <ginac/inifcns.h>, where
such things are declared. This is because Cint doesn't really seem
to be #including them. Probably because it has already done so while
ginaccint was compiled and the include guards of these header files are
still active. I think I can work around this problem by simply
#undef'ing the include guards and reloading those two headers in some
automatic way. First attempts look promising...
2) ...but resolution of the proper function is still not correct in Cint!
Consider cosh as above, but now sitting in namespace GiNaC:
>> cout << GiNaC::cosh(1) << endl; // this is clear
cosh(1)
>> cout << cosh(1) << endl; // one could say this should be ambigous
1.54308
>> using GiNaC::cosh;
>> cout << cosh(1) << endl; // now it should be clear, but it really called...
1.54308
>> cout << std::cosh(1) << endl; // ...this one. :-(
1.54308
Could using declarations like the above one be properly supported by
Cint?!?
As an aside, why does G__cpp_whatever.h #include <math.h>? Is this really
needed? (I seem to be able to just delete it prior to comiling
G__cpp_whatever.cpp).
Regards
-richy.
--
Richard Kreckel
<Richard.Kreckel(a)Uni-Mainz.DE>
<http://wwwthep.physik.uni-mainz.de/~kreckel/>