Đầu tiên, một số bối cảnh (thứ mà hầu hết các bạn đều biết):
Mọi ngôn ngữ lập trình phổ biến đều có sự phát triển rõ ràng, hầu hết thời gian được đánh dấu bởi phiên bản của nó: bạn có Java 5, 6, 7, v.v., PHP 5.1, 5.2, 5.3, v.v. Phát hành phiên bản mới giúp API mới có sẵn, sửa lỗi, thêm tính năng mới, khung công tác mới, v.v ... Vì vậy, tất cả trong tất cả: nó tốt.
Nhưng còn vấn đề của ngôn ngữ (hoặc nền tảng) thì sao? Nếu và khi có điều gì đó sai trong ngôn ngữ, các nhà phát triển sẽ tránh nó (nếu có thể) hoặc họ học cách sống với ngôn ngữ đó.
Bây giờ, các nhà phát triển của những ngôn ngữ đó nhận được rất nhiều phản hồi từ các lập trình viên sử dụng chúng. Vì vậy, thật hợp lý khi thời gian (và số phiên bản) trôi qua, các vấn đề trong các ngôn ngữ đó sẽ chậm nhưng chắc chắn sẽ biến mất. Vâng, không thực sự. Tại sao? Khả năng tương thích ngược, đó là lý do tại sao. Nhưng tại sao nó lại như thế? Đọc dưới đây cho một tình huống cụ thể hơn.
Cách tốt nhất tôi có thể giải thích câu hỏi của mình là sử dụng PHP làm ví dụ:
PHP được yêu thích và ghét bởi hàng ngàn người. Tất cả các ngôn ngữ đều có sai sót, nhưng rõ ràng PHP là đặc biệt. Kiểm tra bài blog này . Nó có một danh sách rất dài về cái gọi là lỗ hổng trong PHP. Bây giờ, tôi không phải là nhà phát triển PHP (chưa), nhưng tôi đã đọc qua tất cả và tôi chắc chắn rằng một phần lớn của danh sách đó thực sự là vấn đề. (Không phải tất cả, vì nó có khả năng chủ quan).
Bây giờ, nếu tôi là một trong những người tích cực phát triển PHP, tôi chắc chắn sẽ muốn khắc phục từng vấn đề đó. Tuy nhiên, nếu tôi làm điều đó, thì mã dựa trên một hành vi cụ thể của ngôn ngữ sẽ bị phá vỡ nếu nó chạy trên phiên bản mới. Tóm tắt trong 2 từ: tương thích ngược.
Điều tôi không hiểu là: tại sao tôi phải giữ PHP tương thích ngược? Nếu tôi phát hành phiên bản PHP 8 với tất cả các vấn đề đã được sửa, tôi không thể đưa ra một cảnh báo lớn cho nó: "Đừng chạy mã cũ trên phiên bản này!"?
Có một thứ gọi là sự phản đối. Chúng tôi đã có nó trong nhiều năm và nó hoạt động. Trong ngữ cảnh của PHP: hãy xem cách những ngày này mọi người chủ động không khuyến khích việc sử dụng các mysql_*
hàm (và thay vào đó là khuyến nghị mysqli_*
và PDO). Khấu hao công trình. Chúng ta có thể sử dụng nó. Chúng ta nên sử dụng nó. Nếu nó hoạt động cho các chức năng, tại sao nó không hoạt động cho toàn bộ ngôn ngữ?
Giả sử tôi (nhà phát triển PHP) làm điều này:
- Khởi chạy một phiên bản PHP mới (giả sử 8) với tất cả các lỗi đó đã được sửa
- Các dự án mới sẽ bắt đầu sử dụng phiên bản đó, vì nó tốt hơn, rõ ràng hơn, an toàn hơn, v.v.
- Tuy nhiên, để không từ bỏ các phiên bản PHP cũ hơn, tôi tiếp tục phát hành các bản cập nhật cho nó, sửa các vấn đề bảo mật, lỗi, v.v ... Điều này hợp lý vì những lý do mà tôi không liệt kê ở đây. Đó là cách làm phổ biến: tìm ví dụ về cách Oracle tiếp tục cập nhật phiên bản 5.1.x của MySQL, mặc dù nó chủ yếu tập trung vào phiên bản 5.5.x.
- Sau khoảng 3 hoặc 4 năm, tôi ngừng cập nhật các phiên bản PHP cũ và khiến chúng chết. Điều này là tốt, vì trong 3 hoặc 4 năm đó, hầu hết các dự án sẽ chuyển sang PHP 8.
Câu hỏi của tôi là: Tất cả các bước này có ý nghĩa? Nó sẽ rất khó để làm? Nếu nó có thể được thực hiện, thì tại sao nó không được thực hiện?
Có, nhược điểm là bạn phá vỡ tính tương thích ngược. Nhưng đó không phải là một cái giá phải trả? Như một ưu điểm, trong 3 hoặc 4 năm nữa, bạn sẽ có một ngôn ngữ có 90% vấn đề được khắc phục .... một ngôn ngữ dễ chịu hơn rất nhiều khi làm việc. Tên của nó sẽ đảm bảo sự phổ biến của nó.
EDIT : OK, vì vậy tôi đã không thể hiện chính xác khi tôi nói rằng trong 3 hoặc 4 năm nữa mọi người sẽ chuyển sang PHP giả thuyết 8. Ý tôi là: trong 3 hoặc 4 năm, mọi người sẽ sử dụng PHP 8 nếu họ bắt đầu dự án mới.
mysql_*
chẳng hạn như đã bị loại bỏ trong 5.5), nhưng điều đó không liên quan nếu phần lớn các nhà cung cấp dịch vụ lưu trữ ngoài đó có một hoặc thậm chí hai phiên bản trở lại (5.3 là - không may - vẫn là phần lớn nhà cung cấp cung cấp).