Tôi muốn nghe từ một người hiểu biết sâu sắc hơn bản thân sự khác biệt cơ bản giữa Enumerators, Conduits và Pipes cũng như những lợi ích và hạn chế chính. Một số discussion's alreadyongoing nhưng thật tuyệt khi có cái nhìn tổng quan cấp cao.Ưu điểm và nhược điểm của Điều tra so với Ống so với Ống là gì?
Trả lời
Điều tra viên/Lặp lại như là một sự trừu tượng được phát minh bởi Oleg Kiselyov. Chúng cung cấp một cách làm sạch IO với các yêu cầu tài nguyên có thể dự đoán được (thấp). Gói Enumerators hiện tại khá gần với tác phẩm gốc của Oleg.
Ống dẫn được tạo cho khung công tác web Yesod. Sự hiểu biết của tôi là chúng được thiết kế để có tốc độ cực nhanh. Các phiên bản ban đầu của thư viện có tính chất rất cao.
Ống tập trung vào sự sang trọng. Họ chỉ có một loại thay vì một số, hình thức monad (biến áp) và thể loại trường hợp, và rất "chức năng" trong thiết kế.
Nếu bạn thích giải thích phân loại: loại Pipe
chỉ là đơn nguyên miễn phí qua các functor đơn giản không tin kính sau
data PipeF a b m r = M (m r) | Await (a -> r) | Yield b r
instance Monad m => Functor (PipeF a b m) where
fmap f (M mr) = M $ liftM mr
fmap f (Await g) = Await $ f . g
fmap f (Yield b p) = Yield b (f p)
--Giving:
newtype Pipe a b m r = Pipe {unPipe :: Free (PipeF a b m) r}
deriving (Functor, Applicative, Monad)
--and
instance MonadTrans (Pipe a b) where
lift = Pipe . inj . M
Trong định nghĩa đường ống thực tế chúng được nướng trong, nhưng sự đơn giản của định nghĩa này là tuyệt vời. Ống tạo thành một thể loại dưới sự vận hành (<+<) :: Monad m => Pipe c d m r -> Pipe a b m r -> Pipe a d m r
lấy bất cứ ống nào đầu tiên yields
và nạp nó vào ống chờ thứ hai.
Có vẻ như Conduits
đang chuyển sang nhiều hơn Pipe
như (sử dụng CPS thay vì trạng thái và chuyển sang một loại) trong khi Ống đang hỗ trợ xử lý lỗi tốt hơn và có thể trả lại các loại riêng biệt cho máy phát điện và người tiêu dùng .
Khu vực này đang chuyển động nhanh chóng. Tôi đã hack vào một biến thể thử nghiệm của thư viện Pipe với những tính năng này, và biết những người khác là tốt (xem gói ống Guarded trên Hackage), nhưng nghi ngờ rằng Gabriel (tác giả của Pipes) sẽ tìm ra trước khi tôi làm.
Đề xuất của tôi: nếu bạn đang sử dụng Yesod, hãy sử dụng Ống dẫn. Nếu bạn muốn một thư viện trưởng thành sử dụng Enumerator. Nếu bạn chủ yếu quan tâm đến sự sang trọng, hãy sử dụng Pipe.
Sau khi viết các ứng dụng với cả ba thư viện, tôi nghĩ sự khác biệt lớn nhất mà tôi đã thấy là cách xử lý tài nguyên. Ví dụ, Pipes phá vỡ hoàn thành tài nguyên thành các loại Khung và Ngăn xếp riêng biệt.
Dường như vẫn có một số cuộc tranh luận về cách không chỉ hoàn thành tài nguyên đầu vào mà còn có khả năng là tài nguyên đầu ra. Ví dụ, nếu bạn đang đọc từ một DB và ghi vào một tập tin, kết nối cho DB cần phải được đóng lại cũng như các tập tin đầu ra cần phải được flushed và đóng cửa. Những điều có được lông khi quyết định làm thế nào để xử lý trường hợp ngoại lệ và trường hợp thất bại dọc theo đường ống.
Một sự khác biệt tinh tế hơn dường như là cách giá trị trả về của đường ống điều tra được xử lý và tính toán.
Rất nhiều sự khác biệt này và những mâu thuẫn tiềm năng đã bị phơi bày bởi việc sử dụng triển khai Đơn vị và Danh mục cho Ống và hiện đang đi vào Ống dẫn.
- 1. Ưu điểm và nhược điểm (kỹ thuật) của Flash so với AJAX/JS là gì?
- 2. Ưu điểm và nhược điểm của HTML5 Canvas so với SVG + Raphael.js là gì?
- 3. ưu và nhược điểm của TryCatch so với TryParse
- 4. Ưu điểm của Cache so với phiên
- 5. Ưu điểm và nhược điểm của Java EE so với Servlets
- 6. Ưu điểm và nhược điểm của tệp cấu hình wcf so với cấu hình mã
- 7. Ưu điểm/Nhược điểm của việc sử dụng phương pháp Declarative so với Programme với ASP.Net là gì?
- 8. Ưu điểm và nhược điểm của AppSettings so với applicationSettings (.NET app.config/Web.config)
- 9. Ưu điểm và nhược điểm của BPMN?
- 10. Ưu điểm/nhược điểm nào mà MSTest và NUnit so sánh với nhau?
- 11. Ưu điểm/nhược điểm của chú thích (không biên dịch) so với tệp cấu hình xml
- 12. Ưu điểm/nhược điểm của đối tượng quan sát toàn cầu so với mixin
- 13. Ưu điểm/nhược điểm của Canvas so với DOM trong phát triển trò chơi JavaScript là gì?
- 14. Ưu điểm/nhược điểm của việc sử dụng SRVANY so với việc tạo một dịch vụ Windows là gì?
- 15. Cây thiết bị là gì? Ưu điểm và nhược điểm?
- 16. Ưu điểm và nhược điểm của Perl đối với OOP là gì?
- 17. Ưu điểm và nhược điểm của NHibernate
- 18. Ưu điểm/nhược điểm của .NET 64 bit là gì?
- 19. Ưu điểm của VS2008 so với VS2005 đối với phát triển C++ là gì?
- 20. Ưu điểm và nhược điểm của việc sử dụng Phonegap và Titanium là gì?
- 21. Nhược điểm của hệ thống kiểu Scala so với Haskell?
- 22. Các nhược điểm của onMousedown so với onClick?
- 23. Ưu điểm/nhược điểm của việc sử dụng bộ ria mép với Backbone.js là gì?
- 24. Ưu điểm và nhược điểm của trình kích hoạt cơ sở dữ liệu so với Rails ActiveRecord gọi lại?
- 25. C++/CLI: Ưu điểm so với C#
- 26. Ưu điểm & nhược điểm của DotNetNuke?
- 27. Những ưu và khuyết điểm của RemObjects PascalScript so với kịch bản DWS là gì?
- 28. Ưu điểm của PyQt so với PyGTK và ngược lại là gì?
- 29. Trong python, ưu điểm và nhược điểm của việc nhập một lớp so với nhập mô-đun của lớp là gì?
- 30. Ưu điểm và nhược điểm của xóa và cập nhật Cascading là gì?
Ống dẫn và đường ống vẫn đang trong quá trình sửa đổi nặng, do đó khó so sánh và tương phản cho đến khi chúng ổn định. Trong tình hình lý tưởng, ống dẫn và đường ống sẽ hợp nhất vào The Way đúng để làm điều tra viên. –