2013-10-26 2 views
5

하드 실시간 프로그래밍에서 C/C++의 대체품으로 녹을 찾고 있습니다. 확인 된 문제는 두 가지입니다.녹에서 실시간 프로그래밍은 어떻게합니까?

1) 녹스의 GC 호출을 피하는 방법은 무엇입니까? 나는 Rust의 표준 라이브러리와 같이 관리 포인터와 비 실시간 (non-realtime-safe) 라이브러리를 피함으로써이 작업을 수행 할 수 있다는 제안을 보았습니다. 실시간 작업이 GC를 호출하지 않을 정도로 충분합니까?

2) 내 실시간 작업을 OS 스레드에 매핑하는 방법은 무엇입니까? 나는 Rust의 표준 라이브러리가 N : M 병행 모델을 구현하지만 실시간 작업은 하나의 OS 스레드와 직접 대응해야한다는 것을 알고있다. 이 유형의 스레드를 생성하는 방법이 있습니까?

답변

5

1) 녹스의 GC 호출을 피하는 방법은 무엇입니까? 나는 Rust의 표준 라이브러리와 같이 관리 포인터와 비 실시간 (non-realtime-safe) 라이브러리를 피함으로써이 작업을 수행 할 수 있다는 제안을 보았습니다. 실시간 작업이 GC를 호출하지 않을 정도로 충분합니까?

예, @을 피하면 GC가 발생하지 않습니다. (현재 Rust에는 실제로 GC가 구현되어 있지 않으므로 모든 코드가 자동으로이를 피할 수 있습니다.)

2) 어떻게 실시간 스레드를 OS 스레드에 매핑합니까? 나는 Rust의 표준 라이브러리가 N : M 병행 모델을 구현하지만 실시간 작업은 하나의 OS 스레드와 직접 대응해야한다는 것을 알고있다. 이 유형의 스레드를 생성하는 방법이 있습니까?

std::task::spawn_sched (std::task::SingleThreaded , function) (#10095이 착륙 할 때 특유한 서식이 고정됩니다. 녹의 런타임 & 표준 라이브러리가 하드 -realtime 프로그래밍 (아직)에 대해 설정되지 않은,하지만 당신은 당신에게 정확히 같은 상황을 제공 #[no_std] (example)를 사용하여 "runtimeless"를 실행할 수 있습니다 말했다

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

C/C++, 모듈 방식의 언어 차이 및 표준 라이브러리의 부재 (Rust's FFI은 libc를 비교적 쉽게 호출 할 수 있음을 의미하고 rust-core 프로젝트는 libc가 작동하지 않는 최소한의 stdlib로 설계되었습니다).

+0

'# [no_std]'에 대한 나의 이해는 그것이 전체 상자에 적용된다는 것입니다. '# [no_std]'상자에있는 실시간 코드를 라이브러리에 컴파일 한 다음 나머지 어플리케이션과 링크하여 비 실시간 코드에 Rust의 런타임 및 표준 라이브러리를 사용할 수 있습니까? – crosstalk

+0

상자 크기입니다. 그리고 네, 가능할 수도 있지만 결코 시도한 적이 없습니다. – huon

+0

고맙습니다. 나는 시험해보기에 앞서 녹을 충분히 배웠다. 이 일이 쉽지 않을 거라 생각하면 일찍 직접 테스트했을 것입니다. – crosstalk

관련 문제