Tôi đã cố gắng hiểu lý do tại sao Nhóm chuyên gia JDK 8 Lambda (EG) quyết định không đưa một loại hàm mới vào ngôn ngữ lập trình Java.
Đi qua danh sách gửi thư tôi tìm thấy một chủ đề với cuộc thảo luận về việc loại bỏ các loại chức năng .
Nhiều tuyên bố không rõ ràng đối với tôi, có thể do thiếu bối cảnh và trong một số trường hợp do kiến thức hạn chế của tôi về việc triển khai các hệ thống loại.
Tuy nhiên, có một vài câu hỏi mà tôi tin rằng tôi có thể xây dựng một cách an toàn trong trang web này để giúp tôi hiểu rõ hơn về ý nghĩa của chúng.
Tôi biết tôi có thể đặt câu hỏi trong danh sách gửi thư, nhưng chủ đề đã cũ và tất cả các quyết định đã được đưa ra, vì vậy rất có thể tôi sẽ bị bỏ qua, trên hết là thấy những kẻ này đã bị trì hoãn với kế hoạch của họ.
Trong câu trả lời của mình để hỗ trợ loại bỏ các loại chức năng và chứng thực việc sử dụng các loại SAM, Brian Goetz nói:
Không thống nhất. Có một chủ đề dài về mức độ hữu ích của các loại chức năng được thống nhất. Không có sự thống nhất, các loại chức năng bị rối loạn.
Tôi không thể tìm thấy chủ đề mà anh ấy đề cập. Bây giờ, tôi có thể hiểu rằng việc giới thiệu một loại hàm cấu trúc có thể ngụ ý một số biến chứng nhất định trong hệ thống loại chủ yếu là danh nghĩa của Java, điều tôi không thể hiểu là các loại SAM được tham số hóa khác nhau như thế nào về mặt thống nhất.
Cả hai đều không phải chịu cùng một vấn đề thống nhất? Có ai hiểu làm thế nào các loại chức năng khác với các loại SAM tham số hóa về mặt thống nhất?
Trong một bình luận khác, Goetz nói:
Có hai cách tiếp cận cơ bản để gõ: danh nghĩa và cấu trúc. Danh tính của một danh nghĩa được dựa trên tên của nó; nhận dạng của một loại cấu trúc dựa trên những gì nó được cấu thành (chẳng hạn như "tuple của int, int" hoặc "hàm từ int đến float".) Hầu hết các ngôn ngữ chọn chủ yếu là danh nghĩa hoặc chủ yếu là cấu trúc; không có nhiều ngôn ngữ kết hợp thành công kiểu gõ danh nghĩa và cấu trúc ngoại trừ "xung quanh các cạnh". Java gần như hoàn toàn trên danh nghĩa (với một vài ngoại lệ: mảng là một kiểu cấu trúc, nhưng ở phía dưới luôn có một kiểu phần tử danh nghĩa; các tổng quát cũng có sự pha trộn giữa danh nghĩa và cấu trúc, và thực tế đây là một phần của nguồn gốc của nhiều về những phàn nàn của mọi người về thuốc generic.) Ghép một hệ thống kiểu cấu trúc (kiểu hàm) lên Java ' s hệ thống danh nghĩa có nghĩa là phức tạp mới và trường hợp cạnh. Là lợi ích của các loại chức năng có giá trị này?
Những bạn có kinh nghiệm trong việc thực hiện các hệ thống loại. Bạn có biết bất kỳ ví dụ về những sự phức tạp hoặc trường hợp cạnh mà anh ấy đề cập ở đây không?
Thành thật tôi bị lẫn lộn bởi những cáo buộc này khi tôi nghĩ rằng một ngôn ngữ lập trình như Scala, hoàn toàn dựa trên JVM, có hỗ trợ cho các kiểu cấu trúc như các hàm và bộ dữ liệu, ngay cả với các vấn đề thống nhất của nền tảng cơ bản.
Đừng hiểu sai ý tôi, tôi không nói rằng một loại chức năng nên tốt hơn các loại SAM. Tôi chỉ muốn hiểu tại sao họ đưa ra quyết định này.