Mặc dù không hoàn toàn giống như vậy, đây là lý do tại sao HTML biến thành thảm họa. Các trình duyệt chấp nhận đánh dấu xấu và điều tiếp theo bạn biết, trình duyệt A không thể hiển thị giống như Trình duyệt B đã làm (vâng, có một số lý do khác, nhưng đây là một trong những lý do hàng đầu, khoảng 10 năm trước khi một số quy tắc nới lỏng trở thành quy ước ).
Khi Eric Lippert xâm nhập, nhiều thứ trong số này được IDE xử lý tốt nhất chứ không phải trình biên dịch. Điều đó cho phép bạn xem những gì các bit tự động đang cố gắng làm hỏng cho bạn.
Chiến lược tôi nghĩ hiện đang chiếm ưu thế là tinh chỉnh ngôn ngữ liên tục thay vì nới lỏng trình biên dịch: Nếu đó thực sự là thứ mà trình biên dịch có thể tự động tìm ra, thì hãy giới thiệu một cấu trúc ngôn ngữ được xác định rõ xung quanh nó.
Ví dụ ngay lập tức xuất hiện là các thuộc tính tự động trong C # (không phải ngôn ngữ duy nhất có thứ gì đó tương tự): Cho rằng phần lớn các getters / setters trong bất kỳ ứng dụng nào thực sự chỉ là các hàm bao quanh một trường, chỉ cho phép nhà phát triển chỉ ra ý định và để cho trình biên dịch tiêm phần còn lại.
Điều đó sau đó khiến tôi suy nghĩ: Hầu hết các ngôn ngữ kiểu C đã làm điều này ở một mức độ nào đó. Đối với những thứ có thể được tìm ra tự động, chỉ cần tinh chỉnh cú pháp:
if (true == x)
{
dothis();
}
else
{
dothat();
}
Có thể rút gọn thành:
if (true == x)
dothis();
else
dothat();
Cuối cùng, tôi nghĩ rằng điều này dẫn đến điều này: Xu hướng là bạn không làm cho trình biên dịch "thông minh hơn" hoặc "lỏng hơn". Đó là ngôn ngữ được làm cho thông minh hơn hoặc lỏng hơn.
Bên cạnh đó, quá nhiều "trợ giúp" có thể nguy hiểm, chẳng hạn như lỗi "nếu" cổ điển:
if (true == x)
if (true == y)
dothis();
else
dothat();