Embora não seja exatamente a mesma coisa, é por isso que o HTML se transformou no desastre. Os navegadores toleraram a marcação incorreta e, em seguida, o navegador A não conseguiu renderizar da mesma maneira que o navegador B (sim, existem outros motivos, mas esse foi um dos poucos mais importantes, especialmente cerca de 10 anos atrás, antes que algumas regras de folga se tornassem convenções )
Como Eric Lippert deduz, muitas dessas coisas são melhor tratadas pelo IDE, não pelo compilador. Vamos ver o que os bits automáticos estão tentando estragar para você.
A estratégia que acho predominante agora é o aprimoramento contínuo da linguagem, em vez de afrouxar o compilador: se realmente é algo que o compilador pode descobrir automaticamente, introduza uma construção de linguagem bem definida em torno dele.
O exemplo imediato que vem à mente são as propriedades automáticas em C # (não o único idioma que possui algo semelhante): dado que a maioria dos getters / setters em qualquer aplicativo são realmente apenas invólucros em torno de um campo, permita ao desenvolvedor indicar seus intenção e deixe o compilador injetar o resto.
O que me leva a pensar: a maioria das linguagens no estilo C já faz isso em certa medida. Para coisas que podem ser descobertas automaticamente, basta refinar a sintaxe:
if (true == x)
{
dothis();
}
else
{
dothat();
}
Pode ser reduzido para:
if (true == x)
dothis();
else
dothat();
No final, acho que tudo se resume a isso: a tendência é que você não torne o compilador "mais inteligente" ou "mais flexível". É a linguagem que se torna mais inteligente ou mais flexível.
Além disso, muita "ajuda" pode ser perigosa, como o bug clássico "se":
if (true == x)
if (true == y)
dothis();
else
dothat();