Хотя это не совсем то же самое, именно поэтому HTML превратился в катастрофу. Браузеры терпели плохую разметку, и следующее, что вы знали, браузер A не мог отображать так же, как браузер B (да, есть и другие причины, но это была одна из лучших причин, особенно 10 лет назад, до того, как некоторые из правил расшатанности стали общепринятыми ).
Как делает вывод Эрик Липперт, многие из этих вещей лучше всего обрабатываются в IDE, а не в компиляторе. Это позволяет вам увидеть, что автоматические биты пытаются испортить для вас.
Стратегия, которая, на мой взгляд, является преобладающей, заключается в непрерывном уточнении языка вместо ослабления компилятора: если это действительно то, что компилятор может выяснить автоматически, то введите четко определенную языковую конструкцию вокруг него.
Непосредственный пример, который приходит на ум, - это автоматические свойства в C # (не единственный язык, который имеет нечто подобное): учитывая, что большинство методов получения / установки в любом приложении на самом деле являются просто оболочками вокруг поля, просто позвольте разработчику указать их намерение и позволить компилятору ввести остальное.
Что заставляет меня задуматься: большинство языков стилей Си уже делают это до некоторой степени. Для вещей, которые могут быть выяснены автоматически, просто уточните синтаксис:
if (true == x)
{
dothis();
}
else
{
dothat();
}
Может быть уменьшено до:
if (true == x)
dothis();
else
dothat();
В конце концов, я думаю, что это сводится к следующему: тенденция в том, что вы не делаете компилятор «умнее» или «слабее». Это язык, который сделан умнее или слабее.
Кроме того, слишком много «помощи» может быть опасно, например, классическая ошибка «if»:
if (true == x)
if (true == y)
dothis();
else
dothat();