venerdì 24 luglio 2009

Nel 2010 la prossima definizione del C++...

C++0x - the next ISO C++ standard
	concept Semigroup<typename Op, typename T> : CopyConstructible<T> {
T operator()(Op, T, T);
axiom Associativity(Op op, T x, T y, T z) {
op(x, op(y, z)) <=> op(op(x, y), z); // T's operator may be assumed to be associative
}
}
concept Monoid<typename Op, typename T> : Semigroup<Op, T> { // a monoid is a semigroup with an identity element
T identity_element(Op);
axiom Identity(Op op, T x) {
op(x, identity_element(op)) <=> x;
op(identity_element(op), x) <=> x;
}
}
	vector<int> v = {50, -10, 20, -30};
std::sort(v.begin(), v.end()); // the default sort
// now v should be { -30, -10, 20, 50 }
// sort by absolute value:
std::sort(v.begin(), v.end(), [](int a, int b) { return abs(a)<abs(b); });
// now v should be { -10, 20, -30, 50 }
Allarme: Stroustrup ancora non è andato in pensione, e vuole presentare una nuova definizione del linguaggio C++ con altre nuove features e (si spera) cassando via alcune troppo complesse e troppo poco usate.

Il lungo documento sopra citato, scritto di suo pugno (tutto in inglese), dovrebbe "chiarire" le idee. Nel senso che le confonde ulteriormente, e rende il C++ inutilizzabile dai "comuni programmatori" che dovranno lavorarci.

La cosa comica è che copia alcuni concetti presenti in Ruby, come si vede dai due esempi citati...

Nessun commento:

Posta un commento