2012-10-15 9 views
8

हास्केल में लागू सॉकेट, पाइप और फ़ाइल IO जैसे निम्न स्तर की सामग्री कैसे है? मुझे लगता है कि ये आईओ विधियां हास्केल में मूल नहीं हैं लेकिन हास्केल जल्दी से कुछ निम्न स्तर सी लाइब्रेरी को लपेटती है, है ना?हास्केल और निम्न-स्तरीय आईओ क्रिया

उत्तर

9

कर्नेल में सॉकेट, पाइप और फ़ाइलें लागू की जाती हैं; उन्हें उपयोगकर्ता-स्थान प्रोग्राम से उपयोग करने के लिए, आपको call into the kernel की आवश्यकता है। यदि आप कर्नेल को लाइब्रेरी के रूप में देखते हैं, तो हाँ, I/O आवश्यक रूप से निम्न-स्तर सी/असेंबलर लाइब्रेरी द्वारा कार्यान्वित किया जाता है।

प्रैक्टिस में, जीएचसी जैसे हास्केल कार्यान्वयन सिस्टम कॉल के आसपास सी लाइब्रेरी के रैपर का उपयोग करेंगे। उदाहरण देखें GHC RTS commentary, जो सी के बिट्स का वर्णन करता है जो जीएचसी के साथ संकलित किसी भी हास्केल प्रोग्राम का मूल बनाता है। संदेह में, source code से परामर्श लें।

4

"जल्दी लपेटें" हमेशा सबसे अच्छा वर्णन नहीं है।

  1. कभी-कभी यह इस अर्थ में लपेटा जाता है कि आप एक पार्सल लपेटते हैं (उदाहरण के लिए wxcore wraps wx)।
    इस के सबसे करीब है "जल्दी लपेटकर" आप का उल्लेख किया, लेकिन मैं इसे बेहतर बारीकी रैपिंग कहा जा सकता है क्योंकि मैं यह सब है कि के रूप में के रूप में सीधा है नहीं लगता है लगता है।
  2. कभी-कभी यह असबाब की तरह लपेटा जाता है एक कुर्सी लपेटता है (उदाहरण के लिए wxHaskell wxps wx)।
    मैं इसे "चारों ओर बनाया गया" कहूंगा।
  3. कभी-कभी यह एक इंजन की तरह लपेटा जाता है एक इंजन लपेटता है (उदाहरण के लिए प्रतिक्रियाशील केला wraps wx)।
    मैं इसे "उपयोग" कहूंगा, और यदि आप इसे देखते हैं तो आप देख सकते हैं कि इसमें एक इंजन है, लेकिन यह इंजन की तरह नहीं दिखता है, और आप इसे बहुत अलग तरीके से उपयोग करते हैं।
  4. कभी-कभी यह लॉरीज़ की तरह लपेटा जाता है जैसे माल ट्रेन (जैसे हैकेल के थ्रेड ओएस थ्रेड लपेटते हैं)। मैं इसे "अनुपूरक" कहूंगा। (हास्केल ओएस सूत्र, उपयोग कर सकते हैं लेकिन हास्केल के 'स्थानीय' धागे कहीं अधिक हल्के हैं।)

आप तर्क दे सकते हैं कि क्योंकि GHC के क्रम प्रणाली सी में लिखे और है अपने ओएस शायद सी में लिखा गया था, हास्केल एक है सी के चारों ओर रैपर, लेकिन ऐसा लगता है कि एक स्पाइकर सी 8 कार एक ऑडी वी 8 इंजन लपेटती है। यदि आप अपने प्यारे सी 8 को ऑडी के साथ एक बॉक्स कहते हैं तो स्पाइकर परेशान हो सकता है। जब आप अपनी गाड़ी चला रहे हों तो आप इंजन का उपयोग कर रहे हैं, लेकिन सीधे नहीं। कुछ लोग अपनी कार को ट्विक करना पसंद करते हैं, जैसे कि कुछ लोग अपने सीपीयू पर चढ़ना पसंद करते हैं, लेकिन आपको तब तक नहीं करना है जब तक कि आप नहीं चाहते हैं। कुछ लोग कहते हैं कि आपको पता होना चाहिए कि इंजन कैसे काम करता है यदि आप अपनी कार को समझना चाहते हैं।

यदि आप फॉर्मूला 1 संदर्भों को माफ कर सकते हैं, तो मुख्य रूप से हास्केल "लपेटें" सी जैसे टोर्रो रोसो एक फेरारी लपेटता है, लेकिन कभी-कभी यह मैकलेरन की तरह मर्सिडीज लपेटता है। (इससे पहले कि आप एक Torro रोसो धीमी गति से कहते हैं, यह एक फोर्ड के लिए की तुलना करें।)

+1

यह यकीनन सबसे मनोरंजक बात मैं आज पढ़ा है है। धन्यवाद। – MathematicalOrchid

+0

क्या यह बुरा है अगर मैं इन अनुरूपताओं को बिल्कुल समझ नहीं पा रहा हूं? – Cubic

+1

सादृश्य पुलिस @Cubic, आप को गिरफ्तार होगा हाँ। आप इंगित कर सकते हैं तो क्या अपारदर्शी है शायद मैं समझा सकता है मैं एक बेहतर तरीका क्या मतलब है, और आप एक निलंबित वाक्य के साथ भाग मिल जाएगा। – AndrewC