2015-04-22 27 views
18

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?

+3

Một vài điều liên quan khác: [threadpool] (https://crates.io/crates/threadpool), [mio] (https://github.com/carllerche/mio). –

+2

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. –

Trả lời

14

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.

9

đọ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.

+0

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

+3

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 đủ. –

+0

cảm ơn bạn đã làm rõ – rofrol

0

Đố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.

Các vấn đề liên quan