2014-04-26 19 views
6

Tôi đang xem xét trình biên dịch Schalin. Nó to và phức tạp. Ngoài ra, nếu tôi hiểu đúng, tác giả đã lên kế hoạch viết một loạt các bài báo chi tiết các khía cạnh của việc thực hiện, nhưng không bao giờ có xung quanh để làm điều đó.Suy luận kiểu toàn cầu trong trình biên dịch Đề án Stalin

Khía cạnh của Stalin mà tôi quan tâm là suy luận kiểu toàn cục: suy ra các loại sự vật dựa trên việc sử dụng chúng ở những nơi khác trong chương trình. Liệu Stalin có thực sự làm điều đó? Nếu có, làm thế nào, và ở đâu trong cơ sở mã của nó? Nó có sử dụng một biến thể/mở rộng của thuật toán Hindley-Milner không?

+0

Bạn đã thấy [cặp Q/A này tại cstheory.SE] (http://cstheory.stackexchange.com/questions/9765/the-stalin-compiler-brutally-optimizes-but-how) chưa? Về cơ bản nó cho thấy rằng Stalin không cần phải xây dựng "lên" từ các loại như vậy, nó đã infers * tất cả mọi thứ * về giá trị và cách sử dụng của nó. – Leushenko

+0

@Leushenko cảm ơn! Tôi nghĩ rằng bạn là đúng: có vẻ như trình biên dịch này "bỏ qua" khái niệm về các loại, và hoạt động trên các kiểu dữ liệu nguyên thủy. – yotsov

Trả lời

2

Từ README:

Stalin không phân tích kiểu tĩnh toàn cầu sử dụng một hệ thống kiểu mềm mà hỗ trợ các loại kết hợp đệ quy. Stalin có thể xác định một loại hẹp hoặc thậm chí cho mỗi biểu thức mã nguồn trong Chương trình tùy ý các chương trình không có khai báo kiểu. Điều này cho phép Stalin giảm hoặc thường loại bỏ, kiểm tra và điều phối loại thời gian chạy. Stalin cũng lựa chọn biểu diễn cấp thấp trên cơ sở mỗi biểu thức. Điều này cho phép việc sử dụng các biểu diễn dữ liệu máy cơ sở không được mở hộp cho tất cả các loại đơn hình dẫn đến mã số hiệu số cực cao hiệu suất .

Từ một 1997 talk by Siskind:

Stalin thực hiện gõ suy luận sử dụng phân tích thiết lập dựa trên (SBA aka 0CFA). Phân tích này được tăng cường để hỗ trợ các thủ tục polyvariant tách. Kết quả của SBA được sử dụng để giảm thời gian chạy loại kiểm tra và gửi đi. Kết quả của SBA cũng được sử dụng để thực hiện lựa chọn biểu diễn cấp thấp trên cơ sở mỗi biểu thức. Điều này có hai lợi ích. Đầu tiên, loại thẻ có thể được loại bỏ cho các kiểu mẫu, cho phép sử dụng các đại diện máy cơ sở cho dữ liệu nguyên thủy . Thứ hai, có thể loại bỏ quyền anh, giảm bớt chi phí của việc chuyển nhượng, phân bổ và cải tạo số liên quan đến quyền anh. Loại bỏ quyền anh yêu cầu tổ chức chạy thời gian cho phép các biến, tham số, khe cấu trúc và khe vectơ có các chiều rộng khác nhau tùy thuộc vào loại dữ liệu mà chúng giữ giữ . Hơn nữa, cấu trúc do người dùng xác định chỉ có thể được unboxed nếu những cấu trúc đó là không thay đổi. SBA được mở rộng để xác định dữ liệu độ rộng và khả năng thay đổi tại thời gian biên dịch.

Thuật toán suy luận loại thực tế dường như được thực hiện chủ yếu trong nguồn tệp source/stalin3b.sc.

Dường như SBA/0CFA là một thuật toán hoàn toàn riêng biệt với Hindley-Milner. Tuy nhiên, Hindley-Milner cũng có thể được sử dụng để thực hiện gõ mềm.

Dưới đây là description of the 0CFA algorithm đẹp hơn.

giấy tờ liên quan là Olin Shivers' 1991 tiến sĩ luận án Control-dòng chảy Phân tích các bậc cao Ngôn ngữ hoặc Taming Lambda và Flanagan & 1995 giấy Set-Based Phân tích Felleisen cho đầy đủ Đề án và sử dụng nó trong Soft- Nhập.

Các vấn đề liên quan