Recently discovered minizinc
MiniZinc is a medium-level constraint modelling language. It is high-level enough to express most constraint problems easily, but low-level enough that it can be mapped onto existing solvers easily and consistently. It is a subset of the higher-level language Zinc. We hope it will be adopted as a standard by the Constraint Programming community.
FlatZinc is a low-level solver input language that is the target language for MiniZinc. It is designed to be easy to translate into the form required by a solver.
There are several backends for the translated problem (MIP, SAT, etc).
Here is how something similar to your question will look like in minizinc:
var int: a;
var int: b;
constraint a + b <= 10;
constraint a>0;
constraint b>0;
solve maximize a*b;
output [ show([a,b]) ];
=======
[5, 5]