Dunque, ho scaricato DartEditor per capire se avevo ragione nel considerare l'operatore di somma come un metodo del primo oggetto dell'operazione.
Ho scritto così per testare l'esempio del perlaro:
var x = "2" + 2;
Non mi aspettavo che Dart si lagnasse dato che davo per scontato che l'esempio del perlaro fosse corretto, ma Dart si è lamentato e lamentandosi mi ha fatto capire che 1) avevo ragione su quanto detto qui sopra e 2) Dart non supporta più il metodo "+" per le stringhe... il che conferma che giudicare un linguaggio in base alla specifica 0.01 dello stesso non è quasi mai una buona idea.
Vediamo che errore da.
var x = "2" + 2;
- "String" has no method named "operator +"
- '+' cannot be used for string concatentation, use string interpolation or a StringBuffer instead
Prendiamo il primo messaggio di errore:
"String" has no method named "operator +"Ciò significa che per come è fatto il linguaggio considera l'operatore come metodo dell'oggetto che lo precede ("2" in questo caso che è una stringa).
Quanto affermavo quindi sul perché potesse essere logico che "2" + 2 non generasse warning mentre lo facesse 2 + "2" è corretto. Le considerazioni del perlaro sono quindi dovute alla sua ignoranza (non è un insulto dato che nemmeno io lo sapevo, l'ho tirato ad indovinare) del funzionamento interno di Dart.
Infatti a quanto pare in Dart il "+" è considerato un metodo dell'oggetto che lo precede. Perciò l'operazione si converte in "2".+(2) nel primo caso e 2.+("2") nel secondo caso. Si tratta quindi di _metodi diversi_ su oggetti diversi e quindi, naturalmente, possono avere messaggi di errore diversi (o non averne).
Andando a scavare nella documentazione di Dart infatti dice:
"Dart shares the same operators and precedences that you're familiar with from C, Java, etc. They will do what you expect. Under the hood, though, they are a little special. In Dart, an expression using an operator like 1 + 2 is really just syntactic sugar for calling a method. The previous example looks more like 1.+(2) to the language."Il fatto invece che il metodo "+" non esista più invece mi ha incuriosito. Perché mai rimuovere il metodo "+" dalle stringhe?
Risulta che la cosa sia stata scelta dopo aver analizzato i problemi che questo provoca anche in altri linguaggi (fra cui java). Si è scelto quindi di supportare la concatenazione di stringhe in modo meno ambiguo.
Le ragioni sono riportate qui con tanto di esempi perciò non sto a dilungarmi:
http://news.dartlang.org/2012/06/vm-to-remove-supp... 
Perciò non solo le considerazioni del perlaro sono dovute al non sapere quale sia il razionale che ha portato a quel warning (cosa che avrebbe potuto scoprire spendendo 2 minuti della sua vita a fare le dovute verifiche) ma sono anche obsolete perché basate su una specifica (la versione 0.01 del linguaggio) che non rispecchia più l'attuale stato del linguaggio.