Nguồn gốc lịch sử của Scala ngụ ý


14

Scala đã được gọi là phức tạp với tính năng phong phú của nó được thiết lập bởi nhiều đồng nghiệp của tôi và một số thậm chí còn đổ lỗi cho tất cả các tính năng mới của nó. Trong khi hầu hết các lập trình viên đều biết về các tính năng OO và ít nhất những người giỏi cũng biết về lập trình chức năng, có một tính năng đặc biệt trong Scala mà tôi không biết về nguồn gốc lịch sử của nó.

Cho rằng một câu thần chú lớn trong nghề nghiệp của chúng tôi là không phát minh lại bánh xe, tôi khá tự tin, rằng Scala không có bất kỳ tính năng chưa từng thấy trước đây, nhưng tôi sẽ được sửa chữa điều này nếu cần thiết.

Để đi đến câu hỏi thực tế, trong khi tôi nhận thức được nguồn gốc của hầu hết các tính năng của Scala, tôi chưa bao giờ thấy một cái gì đó giống như implicittuyên bố của nó trước đây. Có ngôn ngữ nào khác (cũ hơn!) Ngoài ra cũng cung cấp tính năng này không?

Liệu có ý nghĩa để phân biệt các trường hợp khác nhau của ẩn ý (vì chúng có thể bắt nguồn từ các nguồn khác nhau), cụ thể là chuyển đổi ngụ ý và tham số ẩn?


Có lẽ là một bản sao ?: stackoverflow.com/questions/3069432/...
gerferra

@gerferra Không phải là một bản sao chính xác và không có khái niệm về một trang web trùng lặp. Nếu bạn muốn, bạn có thể soạn câu trả lời tham khảo câu hỏi SO và câu trả lời cũng như tài liệu tham khảo của họ, điều đó hoàn toàn chấp nhận được.
yannis

Câu trả lời:


9

Tôi không đồng ý với câu trả lời của Brian về câu hỏi khác đó.

Theo tôi biết, không có khái niệm ngầm về bất kỳ ngôn ngữ nào khác. Lịch sử thay đổi của Scala ngụ ý rằng các ẩn ý là sự khái quát hóa các giới hạn chế độ xem, và một khung nhìn bị ràng buộc, chính nó, là một khái quát của chuyển đổi loại tự động, thực sự rất phổ biến.

Ngụ ý sau đó kích hoạt các lớp loại, nhưng tôi rất ngạc nhiên nếu đó là mục đích ban đầu.

Biên tập

Ghi chú phát hành cho Scala 2.0 (2006) cho biết:

Lượt xem trong Scala 1.0 đã được thay thế bằng khái niệm tổng quát hơn về các tham số ngầm

Tất nhiên, điều đó không có nghĩa là các tham số ngầm được đưa ra với mục tiêu thay thế các khung nhìn.

Tuy nhiên, Oderky rõ ràng thích nó khi một khi khái niệm có thể thay thế nhiều cái. Theo nghĩa đó, đó có thể là trường hợp mà Oderky muốn các lớp loại, nhưng không muốn đưa ra một cơ chế để xử lý riêng nó, và do đó, đã đưa ra một cái gì đó khác cho phép anh ta loại bỏ một khái niệm (Lượt xem) và thay thế nó với một khái niệm chung hơn xử lý cả các khung nhìn và các lớp loại.

Trong trường hợp bất cứ ai quan tâm, Class Classes của Poor Man, được nhắc đến bởi Brian tại Stack Overflow, cũng là ngày 2006. Rõ ràng, Oderky đã nhận thức được mối liên hệ giữa các ẩn ý và các lớp loại khi ông giới thiệu chúng.

Tuy nhiên, tôi đứng theo yêu cầu của tôi. :-)


Còn phản ứng của Norman Ramsey thì sao? stackoverflow.com/a/3071461/63489 . Nó đề cập đến việc triển khai chuyển đổi ngầm định trước đây trong Haskell
gerferra

@gerferra Nghe có vẻ hợp lý - lưu ý rằng Oderky được đề cập trong bài báo đó. Cơ chế là khác nhau, nhưng nó cũng có thể có bóng lăn. Bài viết được giới thiệu của Oderky thảo luận về các lớp loại, và những ẩn ý đã được giới thiệu vào năm 2006, ngày của bài thuyết trình "Lớp người nghèo" được trích dẫn bởi Brian - rõ ràng, có một liên kết. Tuy nhiên, ghi chú phát hành cho Scala 2.0 (2006) cho biết "Lượt xem trong Scala 1.0 đã được thay thế bằng khái niệm chung hơn về các tham số ẩn" . Từ những gì tôi biết về Oderky, một cơ chế giải quyết nhiều vấn đề sẽ có sức hấp dẫn lớn đối với anh ta.
Daniel C. Sobral

đủ công bằng :-)
gerferra

4

Implicit trong scala có nghĩa là hai điều khác nhau

  1. Thông số ngầm định. Chúng xuất hiện trong Haskell, và có thể các ngôn ngữ khác đầu tiên. Bổ trợ chứng minh: Bài viết này từ năm 2000GHC 5.04.1 tài liệu (Sept-2002, trước khi có được một Scala)
  2. Chuyển đổi ngầm định. Tôi không biết ngôn ngữ đầu tiên có những ngôn ngữ này, nhưng chúng ở ngôn ngữ C # 1.0 (sử dụng implicttừ khóa) trước ngày phiên bản đầu tiên của Scala khoảng một năm.

+1, tôi không biết chuyển đổi ngầm định có sẵn trong C #. Cảm ơn con trỏ.
Frank

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.