2013-10-26 28 views
5

我正在尋找Rust作爲硬實時編程中C/C++的替代品。有兩個可能的問題我已經確定:如何在Rust中進行實時編程?

1)如何避免調用Rust的GC?我已經看到了一些建議,我可以通過簡單地避免託管指針和非實時安全庫(如Rust的標準庫)來做到這一點 - 是否足以保證我的實時任務永遠不會調用GC?

2)如何將我的實時任務映射到操作系統線程?我知道Rust的標準庫實現了N:M併發模型,但實時任務必須與一個OS線程直接對應。有沒有辦法產生這種類型的線程?

回答

5

1)如何避免調用Rust的GC?我已經看到了一些建議,我可以通過簡單地避免託管指針和非實時安全庫(如Rust的標準庫)來做到這一點 - 是否足以保證我的實時任務永遠不會調用GC?

是的,避免@將避免GC。 (Rust現在實際上並沒有實現GC,因此所有代碼現在都會自動避開它。)

2)如何將我的實時任務映射到OS線程?我知道Rust的標準庫實現了N:M併發模型,但實時任務必須與一個OS線程直接對應。有沒有辦法產生這種類型的線程?

std::task::spawn_sched (std::task::SingleThreaded , function)(當#10095土地時,特殊格式將被固定),例如,

use std::task; 
fn main() { 
    do task::spawn_sched(task::SingleThreaded) { 
     println("on my own thread"); 
    } 
} 

這就是說,鏽病的運行時間&標準庫未設置爲 -realtime編程(還),但你可以運行它給你完全一樣的情況「runtimeless」使用#[no_std]example)作爲C/C++,模語言差異和缺乏標準庫(儘管Rust's FFI意味着你可以相對容易地調用libc,並且rust-core項目被設計成一個甚至不需要libc工作的最小stdlib)。

+0

我對'#[no_std]'的理解是它適用於整個箱子。我可以在'#[no_std]'箱中將我的實時代碼編譯到庫中,然後將其與我的應用程序的其餘部分進行鏈接,以便我可以使用Rust的運行時和標準庫來處理非實時代碼? – crosstalk

+0

它是全箱的;是的,這可能是可能的,但我從來沒有嘗試過。 – huon

+0

謝謝。我繼續學習了足夠的Rust來測試它,並且它工作正常。如果我認爲這會很容易,我會早些時候對自己進行測試。 – crosstalk

相關問題