Hãy nói rằng chúng tôi có một chương trình như thế này:Sử dụng tham chiếu-minh bạch để sẵn tính toán giá trị trong Haskell
list = [1..10000000]
main = print $ sum list
Tôi muốn điều này được biên soạn như vậy mà thực thi chỉ in 50000005000000, mà không cần dùng nhiều thời gian và cố gắng. Về cơ bản, bất kỳ biểu thức nào chắc chắn sẽ được tính toán (có thể phân tích nghiêm ngặt có thể giúp ở đây) có thể là được tính trước trong thời gian biên dịch (tức là chúng tôi sử dụng tính minh bạch tham chiếu để nói rằng nó không thực sự quan trọng khi chúng tôi tính toán giá trị).
Nói tóm lại: "phải được tính toán" + tham chiếu-minh bạch = có thể được tính toán trước
này sẽ như thế nào chạy chương trình cho đến khi chúng ta đạt cái gì đó phụ thuộc vào đầu vào (tức là cốt lõi của chương trình, vốn phổ biến trên tất cả các yếu tố đầu vào, sẽ được tính trước)
Có cơ chế hiện tại để đạt được điều này hiện tại (bằng Haskell hoặc bất kỳ ngôn ngữ nào khác) không? [Vui lòng không trỏ tới nội dung nào đó như mẫu trong C++ vì nó không có tính minh bạch tham chiếu ngay từ đầu.]
Nếu không, vấn đề này khó khăn như thế nào? [Các vấn đề kỹ thuật (và lý thuyết) kèm theo là gì?]
đây không phải là trường hợp sử dụng :), anyways bạn có thể nhập vào một số mã như tôi không quen với LLVM và muốn xem tôi có thể strech nó bao xa để tính toán trước – Karan
@Karan Nó được thực hiện. –
bạn có thể giải thích ngắn gọn lý do tại sao ghc có thể tối ưu hóa cho vectơ ở đây chứ không phải cho danh sách? (và nếu llvm là lý do cho phép thuật này, chúng ta có thể mượn loại logic đó từ đó đến ghc không?) – Karan