Sebbene non sia esattamente la stessa cosa, questo è il motivo per cui l'HTML si è trasformato nel disastro che è. I browser tolleravano il markup errato e la prossima cosa che sapevi, il browser A non poteva essere eseguito allo stesso modo del browser B (sì, ci sono altri motivi, ma questo era uno dei pochi, specialmente circa 10 anni fa prima che alcune delle regole di scioltezza diventassero convenzionali ).
Come sostiene Eric Lippert, molte di queste cose sono meglio gestite dall'IDE, non dal compilatore. Vediamo quali sono i bit automatici che stanno tentando di rovinare.
La strategia che ritengo predominante ora è il perfezionamento continuo del linguaggio invece di allentare il compilatore: se è veramente qualcosa che il compilatore può capire automaticamente, quindi introdurre un costrutto linguistico ben definito attorno ad esso.
L'esempio immediato che viene in mente sono le proprietà automatiche in C # (non l'unico linguaggio che ha qualcosa di simile): dato che la maggior parte dei getter / setter in qualsiasi app è in realtà solo un involucro attorno a un campo, consenti allo sviluppatore di indicare il proprio intento e lasciare che il compilatore inietti il resto.
Il che poi mi fa pensare: la maggior parte dei linguaggi in stile C lo fa già in una certa misura. Per cose che possono essere capite automaticamente, basta affinare la sintassi:
if (true == x)
{
dothis();
}
else
{
dothat();
}
Può essere ridotto a:
if (true == x)
dothis();
else
dothat();
Alla fine, penso che ciò dipenda da questo: la tendenza è di non rendere il compilatore "più intelligente" o "più flessibile". È la lingua che è resa più intelligente o meno.
Inoltre, troppo "aiuto" può essere pericoloso, come il classico bug "if":
if (true == x)
if (true == y)
dothis();
else
dothat();