
Markus Werle wrote:
Eric Niebler wrote:
In picking a max arity for a DSEL, I think we reach the limits of human readability (a function that takes 20 arguments?! Really?) before we reach Proto's breaking point.
I am dreaming of:
scalar_field<0> rho; scalar_field<1> u; scalar_field<2> v; ....
Solver.AddPDESystem() [ddt(rho) + ddx(rho * u) + ddy(rho * v) + sourceterm == 0], [ddt(rho * u) + ddx(rho * pow<2, 1>(u)) + ddy(rho * u * v) == 0], [.. some other 10-20 partial differential eqns. omitted ];
Cool!
What is not readable here and how many operands are in the whole expression?
I don't see anything besides unary and binary expressions here, so a max arity of 2 would suffice for your purposes. (But Proto requires max arity to be at least 3 to support the ternary ?: operator.)
P.S.: rational power is missing in proto! tss, tss ...
Proto also doesn't have abs, sign, cos, sin, etc., etc. These are functions, not operators. You would probably handle pow<2,1>(u) like I handle construct<T>(_1, _2) in the Expression Construction Utilities section. -- Eric Niebler Boost Consulting www.boost-consulting.com