Aunque no es exactamente lo mismo, esta es la razón por la cual HTML se convirtió en el desastre que es. Los navegadores toleraron un marcado incorrecto y lo siguiente que sabía es que el navegador A no podía funcionar de la misma manera que el navegador B (sí, hay otras razones, pero esta fue una de las pocas, especialmente hace unos 10 años antes de que algunas de las reglas de flexibilidad se convirtieran en convenciones )
Como infiere Eric Lippert, muchas de estas cosas son mejor manejadas por el IDE, no por el compilador. Eso te permite ver lo que los bits automáticos intentan arruinarte.
La estrategia que creo que predomina ahora es el continuo refinamiento del lenguaje en lugar de aflojar el compilador: si realmente es algo que el compilador puede descubrir automáticamente, entonces introduzca una construcción de lenguaje bien definida a su alrededor.
El ejemplo inmediato que viene a la mente son las propiedades automáticas en C # (no es el único lenguaje que tiene algo similar): dado que la mayoría de los captadores / establecedores en cualquier aplicación son solo envoltorios alrededor de un campo, solo permita que el desarrollador indique su intento y dejar que el compilador inyecte el resto.
Lo que me lleva a pensar: la mayoría de los lenguajes de estilo C ya lo hacen hasta cierto punto. Para las cosas que se pueden resolver automáticamente, simplemente refine la sintaxis:
if (true == x)
{
dothis();
}
else
{
dothat();
}
Se puede reducir a:
if (true == x)
dothis();
else
dothat();
Al final, creo que todo se reduce a esto: la tendencia es que no hagas que el compilador sea "más inteligente" o "más flexible". Es el lenguaje que se hace más inteligente o más flexible.
Además, demasiada "ayuda" puede ser peligrosa, como el clásico error "if":
if (true == x)
if (true == y)
dothis();
else
dothat();