[GiNaC-devel] GiNaC is not a C compiler [Was: Optimized C-style output]

Richard B. Kreckel kreckel at ginac.de
Tue Mar 27 22:29:20 CEST 2007


Dear Stefan,

Stefan Weinzierl wrote:
> thinking about it, we probably want the following: a data structure
> consisting of two lists,
>  lhs = lst(t0,t1,...)
>  rhs = lst(expr0,expr1,...)
> with the understanding that this should represent something like
>  ...
>  t1 = expr1;
>  t0 = expr0;
> 
> There is a consistency condition which needs to be fulfilled: The right
> hand side of the (j+1)-th entry cannot refer to symbols t0,...,tj, which
> would be defined later.
> 
> One can consider two such structures equivalent, if the values of
> t0,...,tn would be the same after execution of the corresponding code
> fragments. In most cases we are just interested in n=0.
> This is actually an equivalence relation in the mathematical sense.
> 
> For this structure we can have methods, which transform the structure into
> an equivalent one.
> These methods can add or remove entries from the two lists, or change the
> order.
> Methods, which just transform the rhs are in some sense trivial and not
> considered here.
> 
> Examples of such methods could be:
>  - replace common subexpressions of type T1, T2, ...  in the rhs.
>  - split containers with more than n_max arguments
>  - (eliminate redundant variables)
> 
> This structure has then a print method, which simply prints
>  ...
>  double t1 = expr1;
>  double t0 = expr0;
> 
> Everybody happy with this concept ?

It seems to make a lot of sense but I am not entirely sure if I 
understand the proposal correctly. Could you, please, add a small 
mock-up snippet of user code where at least two nontrivial expressions 
are "optimized" in this sense in order to make things clear?

TIA
   -richy.
-- 
Richard B. Kreckel
<http://www.ginac.de/~kreckel/>


More information about the GiNaC-devel mailing list