Bien que ce ne soit pas tout à fait la même chose, c'est en quelque sorte la raison pour laquelle le HTML est devenu la catastrophe. Les navigateurs ont toléré un mauvais balisage et la prochaine chose que vous saviez, le navigateur A ne pouvait pas être rendu de la même manière que le navigateur B (oui, il y a d'autres raisons, mais c'était l'une des rares, en particulier il y a environ 10 ans avant que certaines règles de relâchement ne deviennent conventionnelles. ).
Comme le déduit Eric Lippert, beaucoup de ces choses sont mieux gérées par l'IDE, pas par le compilateur. Cela vous permet de voir ce que les bits automatiques tentent de visser pour vous.
La stratégie que je pense qui prédomine maintenant est le raffinement continu du langage au lieu de relâcher le compilateur: si c'est vraiment quelque chose que le compilateur peut comprendre automatiquement, alors introduisez une construction de langage bien définie autour de lui.
L'exemple immédiat qui me vient à l'esprit est les propriétés automatiques en C # (pas le seul langage qui a quelque chose de similaire): étant donné que la majorité des getters / setters dans n'importe quelle application ne sont en fait que des wrappers autour d'un champ, permettez simplement au développeur d'indiquer leur intention et laissez le compilateur injecter le reste.
Ce qui me fait alors réfléchir: la plupart des langages de style C le font déjà dans une certaine mesure. Pour les choses qui peuvent être déterminées automatiquement, affinez simplement la syntaxe:
if (true == x)
{
dothis();
}
else
{
dothat();
}
Peut être réduit à:
if (true == x)
dothis();
else
dothat();
En fin de compte, je pense que cela se résume à ceci: La tendance est que vous ne rendez pas le compilateur "plus intelligent" ou "plus lâche". C'est le langage qui est rendu plus intelligent ou plus lâche.
De plus, trop «d'aide» peut être dangereux, comme le bug classique «if»:
if (true == x)
if (true == y)
dothis();
else
dothat();