2017-08-08 5 views
6

मैं https://rust.godbolt.org उपयोग करने के लिए इस समारोह की विधानसभा उत्पादन देखना चाहते हैं:रिलीज मोड में संकलित होने पर गॉडबॉल्ट कंपाइलर एक्सप्लोरर मेरे फ़ंक्शन के लिए कोई आउटपुट क्यों नहीं दिखाता है?

fn add(a: u8, b: u8) -> u8 { 
    a + b 
} 

चिपकाया जा रहा है वेबसाइट पर इस ठीक काम करता है, लेकिन विधानसभा का एक बहुत से पता चलता। यह आश्चर्यजनक नहीं है, क्योंकि rustc डिफ़ॉल्ट रूप से डीबग मोड में मेरे कोड को संकलित करता है। जब मैं रिलीज मोड by passing -O to the compiler में संकलित करता हूं, तो कोई आउटपुट नहीं होता है!

मैं क्या गलत कर रहा हूं? रस्ट कंपाइलर रिहाई मोड में सबकुछ क्यों हटाता है?

उत्तर

11

गॉडबॉल्ट कंपाइलर को --crate-type=lib पास करके लाइब्रेरी क्रेट के रूप में आपके जंग कोड को संकलित करता है। और पुस्तकालय से कोड केवल उपयोगी है अगर यह सार्वजनिक है। तो आपके मामले में, आपका add() फ़ंक्शन निजी है और इसे पूरी तरह से कंपाइलर से हटा दिया जाता है। समाधान अपेक्षाकृत सरल है:

pub जोड़कर अपना कार्य सार्वजनिक बनाएं। अब संकलक फ़ंक्शन को नहीं हटाएगा, क्योंकि यह आपकी लाइब्रेरी के सार्वजनिक इंटरफ़ेस का हिस्सा है।

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