2013-01-22 20 views
13

का उपयोग करना सी, कार्यावधि में, मैं कर सकते हैं:क्या रनटाइम पर जंग कोड उत्पन्न करना और निष्पादित करना संभव है?

  1. एक समारोह के स्रोत कोड बनाएँ,
  2. जीसीसी के लिए कॉल बाहर एक .so (लिनक्स) (या उपयोग LLVM, आदि) के लिए यह संकलन करने ,
  3. .so लोड, और
  4. कॉल समारोह।

जंग में एक ऐसी ही बात संभव है?

विशेष रूप से मैं बीजीय डेटा प्रकार का उपयोग करने के, तो जंग की सुविधाओं की एक सी सबसेट का उपयोग कर चाहते पर्याप्त नहीं है।

उत्तर

14

अभी तक नहीं, आधिकारिक तौर पर है, हालांकि यह नहीं बहुत ज्यादा हैकिंग के साथ कम से कम संभव हो जाना चाहिए। सबसे बड़ी बाधा यह है कि पुस्तकालयों में अभी तक गतिशील लोडिंग करने की कोई क्षमता नहीं है। इसे काम करने के लिए यहां एक संभावित रणनीति है (जंग की आने वाली शाखा पर)।

  • प्रोग्रामर को प्रोग्रामर ड्राइव करने के लिए रस्टैक क्रेट से लिंक करें। ध्यान रखें कि कंपाइलर थ्रेडसेफ नहीं है, इसलिए एक समय में केवल एक इन-प्रोसेस बिल्ड चलाएं।
  • मार्क समारोह आप #[no_mangle] साथ कॉल करना चाहते हैं। यह (मैंने कोशिश नहीं की है) एक असंगत प्रतीक नाम का उत्पादन करना चाहिए ताकि यह खोजना आसान हो।
  • dlopen/dlsym
  • फ़ंक्शन पॉइंटर ढूंढें और असुरक्षित रूप से इसे जंग के बंद करने के प्रकार में परिवर्तित करें (वर्तमान में sys::Closure में परिभाषित) में न्यूनतम बाइंडिंग बनाएं।
  • कॉल बंद।

जंग का भी न्यूनतम परीक्षण किया गया जेआईटी है जिसका उपयोग इस प्रकार की चीज़ के लिए किया जा सकता है, लेकिन इसमें कुछ बड़ी चीजें हैं।

+4

यह उत्तर काफी पुराना है। औसत समय में स्थिति कितनी बदल गई है? – xophos

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

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