लोग कुछ पुस्तकालयों को कई प्रोग्रामिंग भाषाओं में क्यों लिखते हैं?


13

कुछ पुस्तकालय हैं, जो कई अलग-अलग प्रोग्रामिंग भाषाओं में लिखे गए उनके संस्करणों में उपलब्ध हैं, उदाहरण के लिए ल्यूसिने , जो जावा में लिखा गया है (जैसा कि वे कहते हैं, 100% शुद्ध जावा), लेकिन सी + +, सी, पर्ल में भी इसके संस्करण हैं , रूबी, लिस्प और कुछ अन्य भाषाएँ। और मैं इन भाषाओं में केवल एफएफआई इंटरफेस नहीं बल्कि कार्यान्वयन की बात कर रहा हूं ।

लोग ऐसा क्यों करते हैं? मैं एक स्पष्ट कारण देख सकता हूं: एक परियोजना में कम निर्भरता होने पर तैनाती और वितरण (और शायद विकास भी) आसान होता है। लेकिन क्या कुछ और है? यह किन स्थितियों में इसके लायक है?


4
अपने निष्पादन वातावरण की प्राकृतिक सीमाओं के पार संचार करना बहुत महंगा हो सकता है।

1
@ थोर: फिर भी कुछ भाषाएँ / वातावरण सकारात्मक रूप से प्राकृतिक सीमाओं को पार करने को प्रोत्साहित करते हैं (C इसका एक सामान्य उदाहरण है, और यह Tcl प्रोग्रामर्स के बीच एक मजबूत विषय है)। मुझे संदेह है कि यह मुख्य रूप से मेमोरी (और कभी-कभी अन्य संसाधन) प्रबंधन से संबंधित है; यह वास्तव में एक ही प्रक्रिया में दो मेमोरी मैनेजर रखने के लिए अच्छा नहीं है, खासकर यदि वे सह-अस्तित्व के लिए डिज़ाइन नहीं किए गए थे। अंत में, मुझे लगता है कि आप क्या धारणाएँ बनाते हैं, यह नीचे आता है और वे कौन-कौन से ऑपरेशन बदले में बेवजह बनाते हैं ...
डोनल फेलो

जवाबों:


16

मेरे द्वारा किए गए कुछ कारणों (मेरे मामले में हास्केल में सी कोड को फिर से लिखना):

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

19

आमतौर पर एक विशेष मंच के लिए "मूल" होने के लिए एक पुस्तकालय को फिर से लागू करने के लिए अनुमति देता है:

  • सरल तैनाती और वितरण
  • आसान डिबगिंग
  • आपके सटीक प्लेटफ़ॉर्म के लिए उपयुक्त अधिक मुहावरेदार एपीआई
  • अक्सर बेहतर प्रदर्शन (प्लेटफॉर्म इंटरोप एक दर्द हो सकता है)
  • फिक्सिंग डिजाइन के मुद्दे जो अभी भी संगतता के लिए मूल में हैं

उदाहरण के लिए, मैंने Joda Time के पोर्ट के रूप में Noda Time प्रोजेक्ट शुरू किया । यह सिर्फ Joda Time को सीधे .NET के भीतर उपयोग करने के लिए व्यावहारिक नहीं है ... आप वास्तव में एक JVM को केवल तारीख और समय की गणना करने के लिए स्पिन करने के लिए नहीं चाहते हैं, साथ ही साथ बीच में काम कैसे करें दो। एक स्वचालित पोर्ट (एक ला जे #) संभव हो सकता है, लेकिन अंतिम परिणाम सी # से उपयोग करने के लिए एक सुखद और मुहावरेदार एपीआई नहीं रहा होगा।


11

कुछ लोग इसे एक नई भाषा सीखने में मदद करने के लिए करते हैं। वे पिछली भाषा में फैमिलियर के साथ एक परिवाद उठाते हैं, देखते हैं कि नए में इसकी आवश्यकता है, और इसे पोर्ट करना शुरू करें।

किसी परिचित को पोर्ट करना एक नई भाषा के सिर्फ भाषा भागों पर ध्यान केंद्रित करने का सबसे अच्छा तरीका है, और वास्तव में समस्या डोमेन के बारे में चिंता न करें।

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


0

कभी-कभी आप एक ऐसे प्लेटफ़ॉर्म के लिए विकसित हो रहे हैं, जहाँ सॉफ्टवेयर में लिखा गया था (Java in Lucene's case) एक विकल्प नहीं है। अगर आप चाहते हैं कि कोड को बिना स्क्रैच के पुन: प्रस्तुत करने की सुविधा हो, तो आप कोड को पोर्ट कर देते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.