2013-10-26 11 views
5

मैं हार्ड रीयलटाइम प्रोग्रामिंग में सी/सी ++ के प्रतिस्थापन के रूप में जंग को देख रहा हूं। मेरे द्वारा पहचाने गए दो संभावित मुद्दे हैं:मैं जंग में रीयलटाइम प्रोग्रामिंग कैसे करूं?

1) मैं जंग के जीसी का आह्वान करने से कैसे बचूं? मैंने सुझावों को देखा है कि मैं प्रबंधित पॉइंटर्स और गैर-रीयलटाइम-सुरक्षित पुस्तकालयों (जैसे कि जंग की मानक लाइब्रेरी) से बचकर यह कर सकता हूं - क्या यह सुनिश्चित करने के लिए पर्याप्त है कि मेरे रीयलटाइम कार्य कभी भी जीसी का आह्वान नहीं करेगा?

2) मैं अपने रीयलटाइम कार्य को ओएस थ्रेड पर कैसे मैप कर सकता हूं? मुझे पता है कि जंग की मानक लाइब्रेरी एन: एम कॉन्सुरेंसी मॉडल लागू करती है, लेकिन एक रीयलटाइम कार्य सीधे एक ओएस थ्रेड के साथ मेल खाना चाहिए। क्या इस प्रकार के धागे को फैलाने का कोई तरीका है?

उत्तर

5

1) मैं जंग के जीसी का आह्वान करने से कैसे बचूं? मैंने सुझावों को देखा है कि मैं प्रबंधित पॉइंटर्स और गैर-रीयलटाइम-सुरक्षित पुस्तकालयों (जैसे कि जंग की मानक लाइब्रेरी) से बचकर यह कर सकता हूं - क्या यह सुनिश्चित करने के लिए पर्याप्त है कि मेरे रीयलटाइम कार्य कभी भी जीसी का आह्वान नहीं करेगा?

हां, @ से बचने से जीसी से बचें। (जंग वर्तमान में वास्तव में जीसी कार्यान्वित करता है नहीं किया है, इसलिए सभी कोड यह स्वचालित रूप से अब बचा जाता है, के लिए।)

2) मैं एक ओएस धागा करने के लिए अपने वास्तविक कार्य मैप करते कैसे? मुझे पता है कि जंग की मानक लाइब्रेरी एन: एम कॉन्सुरेंसी मॉडल लागू करती है, लेकिन एक रीयलटाइम कार्य सीधे एक ओएस थ्रेड के साथ मेल खाना चाहिए। क्या इस प्रकार के धागे को फैलाने का कोई तरीका है?

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) का उपयोग कर जो आप वास्तव में एक ही स्थिति देता चला सकते हैं सी/सी ++, मॉड्यूलो भाषा मतभेद और मानक लाइब्रेरी की कमी (हालांकि Rust's FFI का अर्थ है कि आप अपेक्षाकृत आसानी से libc में कॉल कर सकते हैं, और rust-core प्रोजेक्ट को कम से कम stdlib के रूप में डिज़ाइन किया गया है जिसे काम करने के लिए libc की आवश्यकता भी नहीं है)।

+0

'# [no_std] 'की मेरी समझ यह है कि यह पूरे क्रेट पर लागू होती है। क्या मैं अपने रीयलटाइम कोड को लाइब्रेरी में '# [no_std]' crate में संकलित कर सकता हूं, फिर मेरे शेष एप्लिकेशन के साथ लिंक कर सकता हूं, इसलिए मैं गैर-रीयलटाइम कोड के लिए जंग के रनटाइम और मानक लाइब्रेरी का उपयोग कर सकता हूं? – crosstalk

+0

यह crate-wide है; और हाँ, यह संभव हो सकता है लेकिन मैंने कभी कोशिश नहीं की है। – huon

+0

धन्यवाद। मैं आगे बढ़ गया और परीक्षण करने के लिए पर्याप्त जंग सीख लिया, और यह काम करता है। अगर मैंने सोचा कि यह आसान होगा, तो मैंने इसे पहले परीक्षण किया होगा। – crosstalk

संबंधित मुद्दे