Sự khác biệt chính giữa đa hình hàng và phân nhóm


20

Tôi thường nghe rằng đa hình hàng là một cách tiếp cận tốt hơn so với phân nhóm, nhưng tôi gặp khó khăn trong việc tìm kiếm bất cứ điều gì so sánh chúng một cách chi tiết. Tôi đặc biệt quan tâm đến viễn cảnh của một người dùng hệ thống.

Tôi đã đi qua bài viết trên blog này , nhưng nó để lại cho tôi nhiều câu hỏi hơn trước. Ví dụ, nó đưa ra một tuyên bố rằng một hệ thống có phân nhóm sẽ chỉ định một loại, trong khi đó một hệ thống có gõ hàng sẽ gán một loại khác; điều đó có nghĩa là nếu một hệ thống có phân nhóm phụ chỉ định kiểu "gõ hàng", thì nó có nghĩa là không chính xác?

Một điểm khác biệt lớn mà tôi thấy là việc gõ hàng giúp có thể căn chỉnh các loại đối số (nghĩa là viết một hàm hai đối số chỉ liên quan đến atrường đối số của nó, nhưng yêu cầu các đối số của nó có cùng các trường) .

Câu trả lời:


10

Subtyping cho biết một biểu thức của một loại chúng ta có thể cung cấp cho nó một loại khác. Chúng tôi nói cái trước là một kiểu con của cái sau và mối quan hệ phụ này tạo ra nhiều mối quan hệ khác. Trong các biểu tượng,

ΓE:SS<:TΓE:T

Điều quan trọng ở đây (và lý do tôi đã xem xét nó) là cùng một biểu thức được đưa ra hai loại khác nhau. Trong các ngôn ngữ parametrically đa hình với ngầm loại instantiation chúng tôi có mối quan hệ sau subtyping: cho tất cả các loại T . Nếu khởi tạo kiểu rõ ràng như trong Hệ thống F, mối quan hệ phụ này không giữ được.(α.τ)<:τ[T/α]T

{1:Một,2:B}<:{2:B,1:Một}{1:Một,2:B}{2:B,1:Một}STS<:TT<:S{1:Một,2:B}= ={2:B,1:Một}T<:T

Thông thường khi chúng ta nói về một ngôn ngữ với phân nhóm, chúng ta có nghĩa là một ngôn ngữ có mối quan hệ phân nhóm không tầm thường đối với các loại mặt đất , tức là các loại không có biến tự do (tất nhiên, có thể và sẽ tạo ra các mối quan hệ phụ cho các loại không phải mặt đất). Vì vậy, một hệ thống có tính đa hình hàng như Roy không phải là một ngôn ngữ có phân nhóm theo nghĩa này, mặc dù nó có mối quan hệ phụ không tầm thường đến từ bất kỳ ngôn ngữ đa hình tham số ngay lập tức nào. Mặt khác, phân nhóm cấu trúc, nêu rõ các mối quan hệ phân nhóm không tầm thường cho các loại mặt đất.

()ở trên, phân nhóm cấu trúc ngụ ý các loại hàng nhưng không phải ngược lại. Đa hình tham số là trực giao (theo nghĩa bạn có thể có hoặc không có nó, chắc chắn có tương tác) với các loại hàng hoặc phân nhóm cấu trúc. Một hệ thống với phân nhóm cấu trúc + đa hình tham số bao gồm loại hàng + đa hình tham số (giả sử một số loại "liên kết bản ghi") theo nghĩa là mọi thuật ngữ trong sau có thể được gõ cùng loại trước đây. Cái trước chỉ có thể gõ với các loại bổ sung là tốt. Sử dụng ví dụ của Brian, trong một hệ thống với subtyping cấu trúc và tính đa hình tham số answersẽ có các loại tương tự như trong các phiên bản hàng đánh máy, nhưng nó cũng sẽ có loại phiên bản subtyping của cũng .

ρ{ c : Number }thông tin: đi từ một kiểu con đến một siêu kiểu mất thông tin (loại). Đây thường có thể là những gì bạn muốn: có một loại phổ biến bạn quan tâm và mọi thứ khác là các chi tiết không liên quan. Sự thiên vị của tôi là hướng tới việc duy trì càng nhiều thông tin loại càng tốt và chỉ loại bỏ nó một cách rõ ràng. Nhược điểm của cách tiếp cận của phân nhóm thường được chứng minh bằng các chương trình đúng loại nhưng chỉ vì các loại được đẩy sang loại "hàng đầu" không có thông tin, ví dụ như bản ghi trống. Lặp lại, đa hình tham số (nói chung) bảo tồn thông tin loại, phân nhóm cố ý làm mất nó.


Cảm ơn bạn đã phản hồi chi tiết! Một câu hỏi khác: nếu phân nhóm cấu trúc + đa hình tham số bao gồm gõ hàng + đa hình tham số, tại sao bạn sẽ sử dụng cái sau?
Alex R

@AlexR Như Brian đã đề cập trong bài đăng trên blog của mình, phân nhóm tương tác cực kỳ kém với suy luận kiểu và nhiều khía cạnh khác, chẳng hạn như vấn đề công thái học mà tôi đã đề cập. Ngoài ra còn có vấn đề phức tạp về thực thi và ngôn ngữ. Công bằng mà nói, có một không gian thiết kế rộng cho cả "loại hàng" và phân nhóm, vì vậy "phần phụ" là một tuyên bố sơ bộ.
Derek Elkins
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.