Tôi có một tệp nặng TH mất khoảng 30 giây để biên dịch. Tôi có thể sử dụng một số kỹ thuật nào để giúp gỡ lỗi hiệu suất của Mẫu Haskell của tôi?Mẫu hồ sơ Haskell
Trả lời
Nếu tôi hiểu dòng chảy biên dịch của TH một cách chính xác, các hàm haskell thông thường đang được thực thi trong khi nối vào thời gian biên dịch. Nhưng bạn có thể chạy sau đó tại thời gian chạy của riêng bạn, tất nhiên.
Ví dụ: bạn có thứ gì đó như $ (foo x y ...) trong tệp TH-nặng của mình. Tạo một tệp khác và gọi 'foo x y' ở đó nhưng không tách kết quả. Sau đó, bạn sẽ có thể hồ sơ 'foo' như bình thường. Nếu nút cổ chai đang ở giai đoạn tạo AST, bạn sẽ định vị nó. Đừng quên xem xét sự lười biếng.
Kể từ GHC 8, điều này có thể được thực hiện với -fexternal-interpreter.
Biên dịch thư viện xác định chức năng TH có bật hồ sơ, sau đó biên dịch mã * sử dụng hàm TH trong mối nối với các tùy chọn GHC -fexternal-interpreter -opti+RTS -opti-p
. Điều này sẽ tạo ra một tập tin gọi là ghc-iserv-prof.prof
.
Cách tiếp cận này có lợi thế là bạn có thể sử dụng đầy đủ chức năng của đơn Q
.
* Bộ điểm chuẩn trong cùng một dự án cabal như thư viện TH (nhưng trong một hs-source-dir khác) cũng hoạt động. Nó thậm chí có thể làm việc với một hàm TH được định nghĩa và được sử dụng trong cùng một thư viện, nhưng tôi nghĩ rằng bạn sẽ được lược tả mã giải thích sau đó.
- 1. Hồ sơ Haskell mà không cần cài đặt cài đặt thư viện hồ sơ cho tất cả các phụ thuộc
- 2. Nhận Hồ sơ Ứng dụng Hồ sơ theo chương trình
- 3. hồ sơ maven hoặc hồ sơ mùa xuân?
- 4. Chỉnh sửa Hồ sơ Người dùng w/Xác thực Mẫu
- 5. tuples vs hồ sơ
- 6. Hồ sơ là gì?
- 7. Hồ sơ Maven
- 8. Hồ sơ ứng dụng WPF
- 9. Hiểu đầu ra của trình tạo hồ sơ Haskell - là gì == _ a3JO
- 10. Hướng dẫn lập hồ sơ Java, hiệu chỉnh và ghi lại hồ sơ bộ nhớ
- 11. hồ sơ thuyết đếm bảng
- 12. Hồ sơ ứng dụng Linux
- 13. Hồ sơ thành viên ASP.NET
- 14. hồ sơ Filtering với IEnumerable.Select
- 15. Có thể lập hồ sơ chương trình Haskell mà không cần thư viện prof?
- 16. chọn n hồ sơ ra khỏi hồ sơ thứ n trong LINQ
- 17. Hồ sơ Maven - Kích hoạt Hồ sơ tùy thuộc vào bao bì
- 18. Đăng ký Django và nhiều hồ sơ
- 19. Không thể nhập hồ sơ clojure
- 20. hồ sơ LINQ to chọn mới nhất
- 21. Nhận hồ sơ ngẫu nhiên với Doctrine
- 22. Cách sao chép hồ sơ WebSphere 8
- 23. tính hồ sơ Maven không "trọng"
- 24. Lập hồ sơ các ứng dụng JNI
- 25. Hồ sơ Powershell "khi thoát" sự kiện?
- 26. Initialising loại hồ sơ pl/sql
- 27. Nút chụp hồ sơ với v8
- 28. Nhận hồ sơ cuối cùng tại Cassandra
- 29. ios - Core Data hồ sơ cập nhật
- 30. Đếm hồ sơ MySQL với một LIMIT
Tôi đã thực sự phát hiện ra rằng, trong tập tin đã nói, TH chạy ngay lập tức và tất cả thời gian được chi tiêu bởi GHC làm độ phân giải cá thể. Vẫn còn quan tâm đến câu hỏi này mặc dù. –
Có thể bạn có thể tạo [Quasi] (http://hackage.haskell.org/packages/archive/template-haskell/2.8.0.0/doc/html/Language-Haskell-TH-Syntax.html#t:Quasi) Ví dụ cho một số monad chạy trong IO tại thời gian chạy, sau đó bạn có thể sử dụng các công cụ lược tả chuẩn. Các đơn nguyên có thể có một danh sách các thông tin và địa điểm được thống nhất (có thể được tạo ra bởi TH?), Để bạn vẫn có thể sử dụng reify. – bennofs