Đây là một câu hỏi thú vị! Như câu trả lời của Anthony cho thấy, người ta có thể sử dụng các cách tiếp cận thông thường để biên dịch ngôn ngữ chức năng không phụ thuộc, miễn là bạn đã có một trình thông dịch để đánh giá các thuật ngữ để kiểm tra loại .
Đây là cách tiếp cận của Edwin Brady. Bây giờ điều này về mặt khái niệm đơn giản hơn, nhưng nó làm mất đi lợi thế tốc độ của quá trình biên dịch khi thực hiện kiểm tra kiểu. Điều này đã được giải quyết trong một số cách cư xử.
Đầu tiên, người ta có thể thực hiện một máy ảo biên dịch các thuật ngữ thành mã byte khi đang di chuyển để thực hiện kiểm tra chuyển đổi. Đây là ý tưởng đằng sau được vm_compute
thực hiện trong Coq bởi Benjamin Gregoire . Rõ ràng cũng có luận điểm này của Dirk Kleeblatt về chủ đề chính xác này, nhưng giảm mã máy thực tế hơn là một máy ảo.
Thứ hai, người ta có thể tạo mã bằng một ngôn ngữ thông thường hơn, khi thực hiện, kiểm tra tất cả các chuyển đổi cần thiết để kiểm tra loại chương trình được gõ phụ thuộc. Điều này có nghĩa là chúng ta có thể sử dụng Haskell, giả sử, để kiểm tra loại mô-đun Agda. Mã có thể được biên dịch và chạy, và nếu nó chấp nhận, thì mã trong ngôn ngữ kiểu phụ thuộc có thể được coi là được gõ tốt (thực thi chặn và lỗi trình biên dịch). Lần đầu tiên tôi nghe phương pháp này được đề xuất bởi Mathieu Boesflug .
∗
ocamlopt
hoặc GHC :-) (Đây là cách tiếp cận Coq và Agda.)