Nghiên cứu về suy luận dựa trên loại trang web cuộc gọi?


9

Tôi đang cố gắng tìm hiểu thêm về kiểm tra toàn bộ loại chương trình và hệ thống suy luận sử dụng thông tin từ các trang gọi chức năng để tính toán thông tin loại (ngoài cách tiếp cận tiêu chuẩn sử dụng thân hàm). Ví dụ, một thuật toán như vậy có thể sử dụng một lệnh gọi hàm foo(1)để suy ra rằng hàm trong foocó các đối số nguyên. Rõ ràng điều này sẽ làm phức tạp suy luận rất nhiều và làm cho việc kiểm tra không theo mô-đun.

Dù sao, tôi đã không gặp nhiều may mắn khi tìm thấy bất kỳ nghiên cứu nào về phương pháp này, có lẽ vì tôi không biết thuật ngữ chính xác để mô tả những gì tôi đang nói. Bất kỳ con trỏ?


Những gì bạn đang mô tả có gợi ý về suy luận hai chiều, trừ khi tôi nhầm. Mô tả những gì bạn đang cố gắng làm có thể làm rõ, tuy nhiên.
Đaminh Mulligan

Bạn đang hỏi bởi vì bạn tìm kiếm một cách để chuyên môn hóa các chức năng đa hình?
nponeccop

Tôi hầu như chỉ đang cố gắng tìm hiểu thêm về các hệ thống loại thực sự, và vâng, tôi đã suy nghĩ chủ yếu về cách xử lý các hàm đa hình (và các cuộc gọi phương thức trong các ngôn ngữ OO, điều tương tự). Tôi đang cố gắng xác định các thuật ngữ phù hợp cho việc này để tôi có thể đọc nó.
Derek Thurn

Câu trả lời:


11

Hầu như tất cả các hệ thống có kiểu suy luận sử dụng thông tin trang web cuộc gọi để làm điều này. Ví dụ bao gồm ML tiêu chuẩn, OCaml, F # và Haskell. Nhiều ngôn ngữ khác sử dụng thông tin trang web cuộc gọi để suy ra việc khởi tạo tham số kiểu, chẳng hạn như Java, C #, Scala và Typed Vợt. Điều này thường đi theo tên "Suy luận kiểu địa phương".

Tôi chỉ mô tả những gì bạn đang tìm kiếm là "Kiểu suy luận", và có lẽ bạn nên bắt đầu bằng cách tìm kiếm cái thường được gọi là hệ thống "Hindley-Milner". Trang Wikipedia đưa ra một giới thiệu hợp lý và con trỏ đến các giấy tờ gốc.

Nơi bắt đầu cho suy luận kiểu cục bộ là giấy gốc của Pierce và Turner, được đọc tốt nhất trong phiên bản TOPLAS 2000 ( ACM , PDF ).


Tờ báo Pierce và Turner rất ngộ, cảm ơn. Bạn có biết về việc triển khai tối thiểu thuật toán mà họ mô tả trong mã không? Tôi nghĩ rằng nó sẽ rất thú vị để xem xét, nếu nó tồn tại.
Derek Thurn

Tôi không biết về bất kỳ triển khai tối thiểu nào. Có một trong Typed Vợt, và một trong Scala, nhưng cả hai đều thực hiện các thuật toán phức tạp hơn đáng kể.
Sam Tobin-Hochstadt

0

Bạn có thể xem các hệ thống loại cho các loại giao lộ có thể cung cấp cho bạn một cái gì đó giống như a :: Int -> Int | Bool -> Boolvậy, để bạn biết rằng hai chuyên ngành là IntBoolđủ, hoặc sử dụng một suy luận loại thông thường để suy ra hầu hết các loại chung theo phân tích dòng điều khiển để thu thập thực tế kiểu đối số. Trong thực tế, có những cách tiếp cận lai (CFA được thể hiện dưới dạng một hệ thống loại và ngược lại).

Nghiên cứu nghiên cứu về việc suy ra các loại ít chung nhất thay vì hầu hết các loại chung có thể tồn tại, nhưng tôi không biết về chúng.

Đối với các kỹ thuật để thực hiện đa hình, tồn tại hai giải pháp: 1) chuyên môn hóa (nghĩ về các mẫu C ++) 2) giả định biểu diễn thống nhất (nghĩ về các bộ sưu tập kiểu C có void *).

Đối với 2 bạn không cần loại từ trang web cuộc gọi trong khi đánh máy và có thể hỗ trợ biên dịch riêng biệt dễ dàng hơn.

Lưu ý rằng chúng ta đang nói về đa hình tham số ở đây và các cuộc gọi phương thức ảo OO là một thứ hoàn toàn khác gọi là đa hình phụ. Lưu ý rằng các mẫu C ++ hỗ trợ cả hai dạng như đa hình tham số và gõ vịt, đây là một dạng đa hình khác.


1
"Các cuộc gọi phương thức ảo OO là một thứ hoàn toàn khác gọi là đa hình ad-hoc" Đa hình ad-hoc là một tên gọi khác của quá tải. Bạn dường như nhầm lẫn nó với đa hình phụ.
Radu GRIGore

Nhưng các lớp con không nhất thiết phải là các kiểu con, phải không? Ví dụ, đối với các kiểu con LSP được cho là giữ.
nponeccop

1
Đúng, nhưng bên cạnh quan điểm. "Đa hình phụ" là thuật ngữ tiêu chuẩn. Xem en.wikipedia.org/wiki/Subtype_polymorphism để biết chi tiết.
Radu GRIGore
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.