Có cách nào trong Haskell (sử dụng GHC nếu nó quan trọng, đối với mã cần chạy trên Linux và Windows) để thực hiện tính toán bị ràng buộc? Tức là, "tính toán kết quả của hàm này nếu nó khả thi để làm như vậy, nhưng nếu cố gắng sử dụng nhiều hơn chu kỳ CPU X, không gian ngăn xếp Y hoặc khoảng trống Z, và vẫn chưa hoàn thành, hãy dừng và trả về một dấu hiệu cho thấy nó không thể hoàn thành việc tính toán "?Tính toán bị ràng buộc trong Haskell
Trả lời
System.Timeout.timeout :: Int -> IO a -> IO (Maybe a)
Cảm ơn! Điều đó chắc chắn trông giống như câu trả lời cho thời gian giới hạn. Nhìn qua phần tài liệu đó, dường như không có giải pháp tương tự nào cho bộ nhớ? – rwallace
Thật vậy. Tôi không thể tưởng tượng được bất kỳ ngữ nghĩa hợp lý nào cho bộ nhớ, mặc dù - ngoài khó khăn cực đoan của việc đo lường mức tiêu thụ bộ nhớ một cách chính xác, điều gì sẽ xảy ra nếu có một luồng khác không bị hạn chế về bộ nhớ? Nếu bạn chia sẻ một số giá trị với chuỗi khác đó; ai "trả tiền cho nó"? Làm thế nào để bạn giải quyết những vấn đề đó một cách nhanh chóng, đủ để có được các phép đo mà không làm tê liệt chức năng đang chạy? –
Vâng, đây là những vấn đề khó khăn và thành thật mà nói, tôi không lạc quan về xác suất của một ngôn ngữ có mục đích chung cung cấp giải pháp không có giá trị, nhưng tôi thấy nó đáng để thử trước khi từ bỏ bản thân mình để quản lý bộ nhớ của chính mình. . trong C++ :-) – rwallace
Dưới đây là một giải pháp hackish bạn thể thử: đẻ trứng tính của bạn với forkIO
, và để cho các chủ đề cha mẹ (hoặc một sợi giám sát trong đó có quyền truy cập vào các chủ đề chia hai của ThreadId
) theo định kỳ thăm dò ý kiến cho bất kỳ số lượng nào bạn muốn và ném một ngoại lệ không đồng bộ vào chuỗi tính toán khi cần thiết (thú vị, đó chính xác là cách hoạt động của timeout
.)
Câu hỏi tiếp theo là liệu Đó là một cách để tìm hiểu xem heap hiện tại lớn đến mức nào từ bên trong Haskell. Tổng mức tiêu thụ bộ nhớ và chu kỳ bạn có thể tìm ra bằng các lệnh shell sinh sản hoặc truy vấn hệ điều hành theo cách khác (tôi sẽ không biết cách thực hiện điều đó trên Windows.)
Đây không phải là giải pháp hoàn hảo mà bạn có thể triển khai và thử nghiệm sau vài phút.
Tôi đang tìm kiếm một phương pháp sử dụng bộ nhớ, nhưng không thể tìm thấy nó trong Haskell. –
Thay vì theo dõi việc sử dụng heap của ngã ba, bạn cũng có thể chỉ giới hạn heap của nó với 'RTS'opts, phải không? – leftaroundabout
'forkIO' nằm trong cùng một chương trình Haskell. Trừ khi bạn đang thực sự sinh ra một quy trình mới, bạn đang làm việc trong vùng chia sẻ. –
Trên cấp độ xử lý, bạn có thể sử dụng GHC's RTS options để kiểm soát kích thước chồng và đống tối đa.
- 1. Cách tính toán trong xaml trong khi ràng buộc?
- 2. Haskell: mặc định ràng buộc để gõ
- 3. Haskell LLVM ràng buộc Loại mơ hồ
- 4. Hiểu xem mẫu mã có bị ràng buộc CPU hay bị ràng buộc bởi bộ nhớ
- 5. Memoizing IO tính toán trong Haskell
- 6. Tối ưu hóa tính toán một phần trong Haskell
- 7. Trong Haskell, hiệu suất và nơi ràng buộc
- 8. Tính toán các hạng mục được bao gồm trong chi nhánh và lô hàng bị ràng buộc
- 9. Làm cách nào để sửa đổi giá trị bị ràng buộc cho trường trong dạng bị ràng buộc trong django?
- 10. Ràng buộc hình elip bị ràng buộc theo trục ngang/dọc
- 11. Namespace không bị ràng buộc trong Android Studio
- 12. Tại sao thuộc tính Có thể duyệt web làm cho thuộc tính không bị ràng buộc?
- 13. JBoss EJB Bean không bị ràng buộc
- 14. sự kiện nào bị ràng buộc?
- 15. Ràng buộc và ràng buộc thuộc tính phụ thuộc trong Kiểm soát tùy chỉnh
- 16. OneWay ràng buộc cho thuộc tính IsChecked ToggleButton trong WPF
- 17. Ràng buộc với thuộc tính tĩnh
- 18. DataGridCheckBoxColumn IsReadOnly thuộc tính ràng buộc
- 19. Ràng buộc dữ liệu Thuộc tính POCO
- 20. Bộ chọn CSS cho nhãn bị ràng buộc để nhập
- 21. Chuyển đổi một hình thức không ràng buộc thành một hình thức bị ràng buộc?
- 22. Tên miền hoặc tên ràng buộc cho trình giả lập tính toán azure
- 23. Tuyên truyền lực lượng giá trị bị ràng buộc
- 24. Thuật toán Knuth-Morris-Pratt trong Haskell
- 25. Cài đặt SelectedValue của dữ liệu bị ràng buộc DropDownList
- 26. Tại sao bạn không thể bỏ một kiểu mở chung bị ràng buộc được nhập vào loại bị ràng buộc?
- 27. WPF Xác thực hộp văn bản không bị ràng buộc
- 28. Chuyên ràng buộc cho monads qua typeclasses đặc biệt trong Haskell
- 29. Thuộc tính cha mẹ ràng buộc WPF trong HierarchicalDataTemplate
- 30. Thuộc tính ràng buộc trong mã phía sau
Bạn đang xây dựng một số công cụ kiểm tra mô hình? –
Trong số những thứ khác, có. – rwallace
Điều này cũng có thể quan tâm: http://hackage.haskell.org/package/speculation – jberryman