2011-01-03 14 views
6

मैं गैंबिट स्कीम द्वारा विशेष रूप से समर्थित प्लेटफार्मों की विस्तृत श्रृंखला से इसकी सराहना करता हूं, और इसकी आवश्यकता होने पर आपकी योजना स्रोत में सी कोड को सही करने की क्षमता है। उस ने कहा, यह एक योजना है, जिसमें आम लिस्प की तुलना में कम "बैटरी शामिल" है। कुछ लोग स्क्रैच से बहुत सारी चीजें कोडिंग करना पसंद करते हैं, (ए.के. जोरदार याक-शेविंग) लेकिन मुझे नहीं!गैंबिट w.r.t के साथ सामान्य लिस्प की तुलना करना उनकी लाइब्रेरी एक्सेस और ऑब्जेक्ट सिस्टम

यह मैं लाता है मेरे दो सवालों का, लोग हैं, जो दोनों गैम्बिट और कॉमन लिस्प के कुछ स्वाद का इस्तेमाल किया है के लिए तैयार:

1) को प्रभावी ढंग से पुस्तकालयों के लिए बेहतर पहुंच है कौन? सामान्य लिस्प की तुलना में योजना में कम पुस्तकालय हैं। हालांकि, गैंबिट स्कीम में सी/सी ++ कोड & पुस्तकालयों तक आसानी से पहुंच है, जो आम लिस्प के पुस्तकालयों से कहीं अधिक है। आपकी राय में, क्या गैंबिट के एफएफआई की चिकनीता देशी पुस्तकालयों की कमी से अधिक है?

2) योजना के ऑब्जेक्ट सिस्टम (जैसे TinyCLOS, Meroon) सामान्य लिस्प के CLOS से तुलना कैसे करते हैं? यदि आपको उनकी कमी हो रही है, तो आपको किस फीचर में सबसे ज्यादा याद आया? अंत में, लिस्प/योजना में पहली जगह में ऑब्जेक्ट सिस्टम कितना महत्वपूर्ण है? मैंने सीएलओएस को पूरी तरह से जाने के लिए पूरी लिस्पी-आधारित कंपनियों (जैसे आईटीए सॉफ्टवेयर) के बारे में सुना है। क्या वस्तुएं वास्तव में लिस्प/योजना में वैकल्पिक हैं? मुझे डर है कि अगर गैंबिट की कोई अच्छी वस्तु प्रणाली नहीं है, तो मैं उन्हें याद कर सकता हूं (मेरी प्रोग्रामिंग पृष्ठभूमि पूरी तरह से ऑब्जेक्ट उन्मुख है)।

एक महत्वाकांक्षी मदद के लिए धन्यवाद सी/अजगर ++ से कनवर्ट करते हैं,

- मैट

पुनश्च: 1500 से अधिक प्रतिनिधि के साथ किसी को, आप एक "चाल" टैग बनाने कृपया सकता है? :) धन्यवाद जोनास!

उत्तर

2

1) मैंने गैंबिट योजना का उपयोग नहीं किया है, इसलिए मैं वास्तव में यह नहीं बता सकता कि सी/सी ++ एकीकरण कितना आसान है। लेकिन मेरे द्वारा उपयोग किए जाने वाले सभी सामान्य लिस्पों में पूरी तरह कार्यात्मक सी एफएफआई है: एस। तो सी पुस्तकालयों की उपलब्धता एक ही है। इसे एकीकृत करने में कुछ काम लगता है, लेकिन मुझे लगता है कि यह गैंबिट योजना के साथ भी मामला है। आखिरकार, लिस्प और सी अलग-अलग भाषाएं हैं ..? लेकिन शायद आपके पास एक अलग अनुभव है, मैं उस मामले में और जानना चाहता हूं।

आपको Quicklisp में रुचि हो सकती है, वास्तव में एक अच्छी नई आम लिस्प परियोजना - यह बहुत सारी गुणवत्ता पुस्तकालयों को स्थापित करना बहुत आसान बनाता है।

2) सी ++ और पायथन को ओओपी और कक्षाओं का उपयोग डेटा को encapsulating और संरचना के सामान्य माध्यम के रूप में करने के लिए डिज़ाइन किया गया है। सीएलओएस में यह महत्वाकांक्षा बिल्कुल नहीं है। इसके बजाए, यह सामान्य कार्यों को प्रदान करता है जो कुछ प्रकार के तर्कों के लिए विशिष्ट हो सकते हैं - आवश्यक वर्ग नहीं। अनिवार्य रूप से यह ओओपी को सक्षम बनाता है, लेकिन आम लिस्प में, ओओपी चीजों को पूरा करने के लिए मौलिक कुछ की बजाय एक सुविधाजनक सुविधा है।

मुझे लगता है कि सीएलओएस सी ++ ऑब्जेक्ट मॉडल की तुलना में बहुत अधिक अच्छी तरह डिज़ाइन और लचीला है - TinyCLOS उस पहलू में कोई अलग नहीं होना चाहिए।

+0

केवल एफएफआई रखने में समस्या यह है कि यह आपको लिस्प से स्पर्श करने वाले प्रत्येक फ़ंक्शन को लपेटने के लिए मजबूर करता है। एसडब्ल्यूआईजी की मदद से भी, यह जल्दी से एक कोर बन सकता है। गैंबिट का लाभ आपको सी (और सी ++!) कोड के ब्लॉक को सीधे अपने स्कीम स्रोत में डालने की अनुमति देता है। दूसरे शब्दों में, आपको केवल उस ब्लॉक के पास और बाहर जाने के लिए आवश्यक डेटा के लिए इंटरफ़ेस कोड लिखना होगा, न कि उस ब्लॉक में प्रत्येक फ़ंक्शन के लिए। यह बहुत अच्छा है क्योंकि आपको रुचि रखने वाले परिणाम का उत्पादन करने के लिए अक्सर सी/सी ++ कार्यों का एक समूह उपयोग करने की आवश्यकता होती है, और केवल परिणाम लपेटने की परवाह होती है। – SuperElectric

+0

@SuperElectric: लेकिन आप हमेशा सी (या सी ++) कोड के उस ब्लॉक को एक सी फ़ंक्शन में डाल सकते हैं, और फिर इस फ़ंक्शन को एफएफआई के माध्यम से एक्सेस कर सकते हैं। –

+0

@ मिक्लोस होमोलिया सच है, लेकिन यह सुविधा का सवाल है। लश के साथ अपने अनुभव से, मैं कह सकता हूं कि कुछ सी कोड को लिस्प फ्यूशन बॉडी के बीच में डालने में सक्षम होना चाहिए और यह किसी भी प्रकार के लिस्पे वैरिएबल तक पहुंचने में सक्षम है, यह एक बड़ी उत्पादकता जीत है। – SuperElectric

5

निश्चित रूप से निश्चित योजना में परिभाषित मानक में कम पुस्तकालय हैं, लेकिन किसी दिए गए योजना कार्यान्वयन आमतौर पर उस मानक पर "बैटरी शामिल" प्रकार के कार्यों को शामिल करने के लिए उस मानक पर बनाता है।

गैंबिट, उदाहरण के लिए, Snow पैकेज सिस्टम का उपयोग करता है जो आपको कई समर्थन पुस्तकालयों तक पहुंच प्रदान करेगा।

अन्य योजनाएं अधिक बेहतर (या बेहतर) समर्थन पुस्तकालयों तक पहुंच रखने के लिए और भी बेहतर किराया देती हैं। रैकेट (PlaneT के साथ) और चिकन (eggs के साथ) तुरंत दिमाग में आते हैं।

उस ने कहा, आम लिस्प काफी समृद्ध है और बड़ी संख्या में रोचक और उपयोगी पुस्तकालय एक साधारण asdf-install दूर हैं।

योजना ऑब्जेक्ट सिस्टम के लिए, मैं व्यक्तिगत रूप से चिकन योजना का पक्ष लेता हूं और coops का पक्ष लेने के लिए लिया जाता है। उस ने कहा, TinyCLOS के साथ बिल्कुल कुछ भी गलत नहीं है। या तो अच्छी तरह से सेवा करेगा और वास्तव में कमी के लिए कुछ भी नहीं मिला है। हालांकि आखिरी वक्तव्य इस तथ्य के साथ और अधिक हो सकता है कि योजना लिखते समय मैं बहुत से ऑब्जेक्ट उन्मुख-विषयों पर भरोसा नहीं करता हूं। जब मैं "प्रोटोकॉल" लिखना चाहता हूं तो मेरे अनुभव में दोनों प्रणालियां सतह पर आती हैं और उसके बाद प्रोटोकॉल पर विशेषज्ञता का एक तरीका होता है, अगर यह समझ में आता है।

+0

"जब मैं" प्रोटोकॉल "लिखना चाहता हूं तो मेरे अनुभव में दोनों प्रणालियां सतह पर आती हैं और फिर प्रोटोकॉल पर विशेषज्ञता का एक तरीका है, अगर यह समझ में आता है।" ... वास्तव में नहीं ermmm। आप किस सिस्टम का जिक्र कर रहे हैं, और क्या आप 'प्रोटोकॉल' को परिभाषित कर सकते हैं? – SuperElectric

+0

सिस्टम ऑब्जेक्ट ओरिएंटेड सिस्टम हैं जो मैंने उल्लेख किया था। प्रोटोकॉल एक सामान्य विधि है, और TinyCLOS (या coops) ऑब्जेक्ट्स विधि के लिए प्रकार पैरामीटर विशेषज्ञता प्रदान करते हैं, ताकि एक ही इंटरफ़ेस का उपयोग कई प्रकार के लिए किया जा सके। सर्वश्रेष्ठ सादृश्य मैं एक सी ++ टेम्पलेट विधि के बारे में सोच सकता हूं, जहां आप इनपुट के प्रकार पर विशेषज्ञता (कस्टम व्यवहार प्रदान कर सकते हैं) आधार कर सकते हैं। – Shaun

+0

प्रैक्टिकल कॉमन लिस्प पुस्तक में एक अध्याय है जो समझाए जाने से बेहतर काम करता है। आप इसे यहां पढ़ सकते हैं: http://www.gigamonkeys.com/book/object-reorientation-generic-functions.html – Shaun