Theo như tôi hiểu libgreen is not a part of Rust standard library nữa. Ngoài ra tôi không thể tìm thấy một gói libgreen riêng biệt. Có một vài lựa chọn thay thế - coroutine, hiện không cung cấp chủ đề màu xanh lá cây thực tế và green-rs bị hỏng. Tôi có hiểu ngay rằng hiện tại không có quy trình giống như Go nhẹ trong Rust?Điều gì đã xảy ra với libgreen?
Trả lời
Bạn đúng là không có thư viện nhiệm vụ nhẹ trong std
(hoặc phần còn lại của bản phân phối chính), rằng green
không biên dịch và coroutine
dường như không xử lý hoàn toàn khía cạnh luồng. Tôi không biết bất kỳ thư viện nào khác trong không gian này.
Đối với những gì đã xảy ra: RFC được liên kết với bởi số đó — RFC 230 — là nguồn thông tin chuẩn tắc. Tóm tắt là nó đã được tìm thấy rằng phương pháp mà luồng màu xanh/IO đã được xử lý (std
cố gắng để trừu tượng trên cả hai mô hình, cho phép chúng được sử dụng tương thích automagically) không có giá trị các nhược điểm. Bây giờ, std
nhằm mục đích chỉ cung cấp một dòng cơ sở tối thiểu hỗ trợ hữu ích: cho IO/luồng, có nghĩa là "mỏng", đóng gói an toàn cho chức năng hệ điều hành.
đọc này https://aturon.github.io/blog/2016/08/11/futures/ và cũng:
Steve Klabnik's response trong các ý kiến:
Ban đầu, Rust đã đề duy nhất màu xanh lá cây. Cuối cùng, nó đã được quyết định rằng một ngôn ngữ hệ thống mà không có chủ đề hệ thống là ... lạ. Vì vậy, chúng tôi cần thêm chúng. Tại sao không thêm lựa chọn? Vì các giao diện có thể giống nhau, tại sao không trừu tượng hóa chúng, và bạn chỉ có thể chọn cái nào bạn muốn?
Đồng thời, các vấn đề với chuỗi màu xanh lá cây theo mặc định là trở thành vấn đề. Ngăn xếp phân đoạn gây ra tương tác chậm C. Bạn cần thời gian chạy để quản lý chúng, v.v. Ngoài ra, tóm tắt tổng thể là gây ra chi phí không thể chấp nhận. Sợi chỉ xanh không xanh lắm. Ngoài ra, với nhu cầu thực sự phát hành một ngày nào đó hiện ra lờ mờ, các quyết định cần được thực hiện liên quan đến sự cân bằng. Và vì Rust được cho là là một ngôn ngữ hệ thống, có chủ đề 1: 1 và về cơ bản không có thời gian chạy có ý nghĩa hơn các chủ đề N: M và thời gian chạy. . Vì vậy, libgreen đã bị xóa , giao diện được thực hiện lại thành trung tâm chủ đề 1: 1.
'Phát hành một ngày nào đó hiện ra lờ mờ' là một phần quan trọng của nó. Chúng tôi muốn là thực sự ổn định với Rust, và với tất cả những điều cần làm để thực sự gửi 1.0, chúng tôi không muốn kết tinh một giao diện chúng tôi không phải là hài lòng với. Heck, chúng tôi đã rút ra rất nhiều thư viện thậm chí còn ít hơn quan trọng vì những lý do tương tự, như rand. Kỹ thuật là tất cả khoảng sự cân bằng và chúng tôi quyết định chọn chủ nghĩa tối giản.
mio là không thể bắt đầu cho chúng ta, cũng như hầu hết các khác async i/o khuôn khổ cho Rust, bởi vì chúng tôi cần Windows và bên cạnh chúng tôi không muốn để bị khóa vào một tốn kém để thay thế thư viện mà có thể nhận được mồ côi.
Được hiểu hoàn toàn tại đây, đặc biệt trong trường hợp chung. Trong trường hợp cụ thể , mio sẽ hỗ trợ Windows hoặc phiên bản moto dành riêng cho windows sẽ được phát hành, với gói cao cấp cung cấp các tính năng cho tất cả các nền tảng. Và trong trường hợp này, nó được duy trì bởi một trong những người hiện đang sử dụng Rủi ro nặng nề trong sản xuất, vì vậy sẽ không có khả năng biến mất bất cứ lúc nào sớm. Nhưng, trừ khi bạn đang tích cực tham gia, thật khó để biết những điều như vậy, đó là, chính nó là một vấn đề.
Một trong những lý do chúng tôi cảm thấy thoải mái khi xóa libgreen là bạn có thể viết thư viện của riêng bạn để thực hiện các loại IO khác nhau. 1.0 là một lõi mạnh mẽ mà chúng tôi cảm thấy tốt về ổn định mãi mãi, không phải là bit cuối cùng . Các thư viện như https://github.com/carllerche/mio có thể kiểm tra các cách xử lý khác nhau như IO không đồng bộ và khi chúng đủ đủ trưởng thành, chúng tôi luôn có thể đưa chúng trở lại thư viện chuẩn nếu cần . Nhưng trong khi chờ đợi, nó chỉ là một dòng vào Cargo.toml của bạn để thêm chúng vào
Và văn bản như vậy từ reddit:.
Đáng tiếc là họ đã kết thúc đóng hộp sự hỗ trợ greenlet vì họ đã chậm hơn so với các chủ đề hạt nhân mà lần lượt chứng tỏ ai đó không hiểu làm thế nào để có được một trình biên dịch ngôn ngữ để tạo ra coroutines stackless hiệu quả (không đáng ngạc nhiên, số lượng các kỹ sư có dây đúng cách không phải là nhiều trên thế giới này, nhưng xem http://www.reddit.com/r/rust/comments/2l0a4b/do_rust_web_servers_use_libuv_through_libgreen_or/ để biết thêm chi tiết). Và họ đóng hộp async i/o bởi vì libuv là "chậm" (chỉ vì nó là một luồng duy nhất, cộng với buộc một hoạt động async + miễn phí cho mỗi hoạt động async khi bộ đệm phải là cho đến khi hoàn thành, cộng với nó thực thi một hình phạt trên đồng bộ i/o xem http://blog.kazuhooku.com/2014/09/the-reasons-why-i-stopped-using-libuv.html), đó là một sự xấu hổ thực sự - họ nên có cơ hội để thay thế libuv với một cái gì đó tốt hơn (gợi ý: ASIO + AFIO, và có tôi biết chúng đều là C++, nhưng Rust có thể làm tốt hơn nhiều so với C++ interop hơn hiện tại không có nó) thay vì đóng hộp luôn luôn-async-tất cả mọi thứ trong những gì có thể có được một bước tuyệt vời lên từ C + + với hầu hết các t ông lợi ích của Erlang mà không có những bất lợi của Erlang.
Ngoài ra "* một trong những lý do chúng tôi cảm thấy thoải mái khi xóa libgreen là bạn có thể viết thư viện của riêng mình để thực hiện các loại IO * khác nhau" (cùng một liên kết). Giống như với C++, luồng màu (xanh) có thể được thực hiện như một thư viện trước tiên. – ArtemGr
Tôi để lại một số nhận xét về bài đăng đó, tôi nghĩ đây là quan điểm không đầy đủ. –
cảm ơn bạn đã làm rõ – rofrol
Đối với người mới, hiện tại có may
, một thùng thực hiện các chủ đề màu xanh lá cây tương tự như goroutines.
- 1. điều gì đã xảy ra với syscalls.h?
- 2. Điều gì đã xảy ra với NVD3?
- 3. Điều gì đã xảy ra với OmniXML?
- 4. Điều gì đã xảy ra với regtlibv12?
- 5. Python + JSON, điều gì đã xảy ra với Không?
- 6. Điều gì đã xảy ra với CFFI-UNIX?
- 7. Điều gì đã xảy ra với types.ClassType trong python 3?
- 8. Điều gì đã xảy ra với startx trên Cygwin?
- 9. Điều gì đã xảy ra với JSDT của Eclipse?
- 10. Điều gì đã xảy ra với ngoại lệ trong Perl?
- 11. Điều gì đã xảy ra với StringDecoder trong Dart?
- 12. HttpClient 4 - Điều gì đã xảy ra với MultiThreadedHttpConnectionManager?
- 13. Điều gì đã xảy ra với Android AAPT?
- 14. Điều gì đã xảy ra với Monospace trong Android Lollipop?
- 15. Điều gì đã xảy ra với java của emacs?
- 16. Điều gì đã xảy ra với biến môi trường TMP?
- 17. Điều gì đã xảy ra với Project Volta?
- 18. Điều gì đã từng xảy ra với XPathReader
- 19. Điều gì xảy ra với lớp System.Linq.Expressions.LogicalBinaryExpression?
- 20. Điều gì đã xảy ra với Arel và tôi phải làm gì với Arel :: SelectManager?
- 21. Điều gì đã xảy ra với Array.Sort() trong .NET 4.0? TrySZSort() đã biến mất chưa?
- 22. Điều gì đã xảy ra với Bảng điều khiển Typesafe để theo dõi Akka/Play?
- 23. Điều gì đã từng xảy ra với deltree và sự thay thế của nó là gì?
- 24. gì đã xảy ra với filterContext.Cancel (ASP.NET MVC)
- 25. gì đã xảy ra với System.TypeCode giá trị 17
- 26. Điều gì xảy ra với người dùng ẩn danh Firebase?
- 27. Điều gì xảy ra với "System.out.println()" trong jar thực thi?
- 28. Điều gì xảy ra với thuộc tính [OptionalField]?
- 29. Điều gì xảy ra với các cam kết mồ côi?
- 30. Khi xảy ra gián đoạn, điều gì xảy ra với hướng dẫn trong đường ống?
Một vài điều liên quan khác: [threadpool] (https://crates.io/crates/threadpool), [mio] (https://github.com/carllerche/mio). –
Nhắc nhở bình luận của Chris: không có một kích thước phù hợp với tất cả khi nói đến luồng màu xanh lá cây, vì vậy bạn phải chọn thương mại của bạn-off. –