Khi Java được thiết kế lần đầu tiên, nó được coi là phù hợp để loại bỏ các hàm ẩn danh. Tôi có thể nghĩ về hai lý do (nhưng chúng có thể khác với những lý do chính thức):
- Java được thiết kế như một ngôn ngữ hướng đối tượng không có chức năng, do đó, việc có các hàm ẩn danh trong một ngôn ngữ không có chức năng là điều không tự nhiên. Hoặc ít nhất, điều này sẽ ảnh hưởng đến thiết kế ngôn ngữ rất nhiều.
- Các hàm ẩn danh không phổ biến trong các cộng đồng lập trình viên mà Java có nghĩa là thu hút (C, C ++, Pascal?). Ngay cả bây giờ, nhiều lập trình viên Java dường như coi các tính năng này khá kỳ lạ (nhưng điều này có thể sẽ thay đổi rất nhanh với Java 8).
Trong những năm tiếp theo, như Robert Harvey đã giải thích, chính sách của Sun là luôn giữ cho Java tương thích ngược và rất ổn định.
Mặt khác, các ngôn ngữ cạnh tranh khác đã xuất hiện (quan trọng nhất là C #, được sinh ra dưới dạng bản sao Java và sau đó có hướng phát triển riêng).
Các ngôn ngữ cạnh tranh đã khiến Java chịu áp lực vì hai lý do:
Sức mạnh biểu cảm
Các tính năng mới có thể làm cho các thành ngữ lập trình nhất định dễ viết hơn, làm cho ngôn ngữ hấp dẫn hơn đối với các lập trình viên. Thông thường tập hợp các tính năng được cung cấp bởi một ngôn ngữ là sự thỏa hiệp giữa sức mạnh biểu cảm, độ phức tạp của ngôn ngữ, sự gắn kết thiết kế: thêm nhiều tính năng làm cho ngôn ngữ trở nên biểu cảm hơn nhưng cũng phức tạp hơn và khó làm chủ hơn.
Dù sao, trong vài năm qua, các đối thủ của Java đã bổ sung rất nhiều tính năng mới mà Java không có và đây có thể được coi là một lợi thế.
Sự cường điệu
Vâng, thật không may, đây là một yếu tố trong lựa chọn công nghệ, ít nhất là từ những gì tôi có thể thấy trong kinh nghiệm hàng ngày của mình với tư cách là một lập trình viên: một công cụ phải có một tính năng nhất định, ngay cả khi hầu hết các thành viên trong nhóm không biết cách sử dụng nó và những người có thể sử dụng nó hầu như không cần nó hầu hết thời gian.
Sự cường điệu có thể còn quan trọng hơn đối với những người không có kỹ thuật như các nhà quản lý, những người có thể là người quyết định nền tảng cho một dự án nhất định. Các nhà quản lý đôi khi chỉ nhớ một số từ khóa như lambda, song song, đa lõi, lập trình chức năng, điện toán đám mây, ... Nếu công nghệ lựa chọn của chúng tôi có dấu màu xanh lục trên mỗi mục của danh sách, thì chúng tôi đã cập nhật.
Vì vậy, IMO trong một thời gian Java đã bị bắt giữa
- chính sách ban đầu về sự ổn định ngôn ngữ và thiết kế đơn giản, một cơ sở mã lớn và cộng đồng nhà phát triển một mặt và
- áp lực của các ngôn ngữ cạnh tranh có thể thu hút các lập trình viên Java, C # lúc đầu và sau đó là Scala, Clojure, F # (Tôi đặt tên cho những ngôn ngữ tôi biết, có thể có những ngôn ngữ khác).
Cuối cùng, Oracle quyết định nâng cấp Java để làm cho nó cạnh tranh hơn. Theo tôi, các tính năng mới giải quyết các lập trình viên Java, đặc biệt là các lập trình viên Java có thể bị cám dỗ chuyển sang C # và những người thấy các ngôn ngữ khác như Scala và Clojure quá khác so với Java. Mặt khác, các nhà phát triển có một số kinh nghiệm về lập trình chức năng và vẫn muốn sử dụng JVM có lẽ đã chuyển sang Scala, Clojure hoặc ngôn ngữ khác.
Vì vậy, các tính năng Java 8 mới sẽ làm cho Java trở thành ngôn ngữ mạnh mẽ hơn và trọng tâm được khai báo là lập trình song song và lập trình song song, nhưng bản nâng cấp dường như cũng giải quyết các khía cạnh tiếp thị (Mark Reinhold, kiến trúc sư trưởng của Java tại Oracle, cho biết: nói rằng việc thêm các biểu thức Lambda chỉ là để theo kịp những đứa trẻ tuyệt vời, và có một số sự thật trong đó, nhưng lý do thực sự là bộ xử lý đa lõi, cách tốt nhất để xử lý chúng là với Lambda ", xem bài viết này ).
Vì vậy, vâng, nhiều tính năng (tất cả) Java 8 đã được biết đến, nhưng tại sao và khi một tính năng được thêm vào ngôn ngữ phụ thuộc vào nhiều yếu tố: đối tượng mục tiêu, cộng đồng hiện tại, cơ sở mã hiện có, đối thủ cạnh tranh, tiếp thị, v.v.
BIÊN TẬP
Một ghi chú ngắn về "... Tôi đã đọc về các luồng trong SIC (1996).": Bạn có nghĩa là bạn cần Java 8 lambdas để triển khai các luồng không? Trên thực tế bạn có thể thực hiện chúng bằng cách sử dụng các lớp bên trong ẩn danh.