2009-06-05 16 views
9

यह LINQ .NET भाषा सुविधा, LINQ से SQL के बारे में एक प्रश्न है।LINQ कितना अनूठा है?

मुझे लगता है कि इस तरह के एक सतत और घोषणात्मक तरीके से मेमोरी संग्रह में लगभग किसी भी प्रश्न पूछने की क्षमता सबसे अच्छी भाषा सुविधाओं में से एक है जिसे मैंने कभी भी पार किया है।

मुझे यह बेहद उपयोगी लगता है, और मुझे इसे प्रदान करने वाले स्वच्छ अमूर्तता से प्यार है। LINQ का उपयोग स्ट्रिंग्स को वास्तव में पूछने के लिए भी किया जा सकता है, वास्तव में यह बेहद लचीला है।

मेरे प्रश्न हैं:

  1. "भाषा समन्वित प्रश्नों" नए के इस विचार है? और यदि नहीं, तो अन्य भाषाएं एक समान सुविधा को लागू करती हैं
  2. अन्य कार्यान्वयन माइक्रोसॉफ्ट की तुलना कैसे करते हैं?
  3. यह थोड़ा सा व्यक्तिपरक है, लेकिन दूसरों को LINQ को एक विचार के रूप में कितना महत्वपूर्ण लगता है?

चियर्स

उत्तर

7

भाषा integerated क्वेरी के विचार का योग नया नहीं है, जिस तरह से एमएस कहते अद्वितीय और नया है। यह हास्केल और एसक्यूएल सिंटैक्स से प्रभावित है, हास्केल को गणक और आलसी मूल्यांकन का विचार था जो LINQ को लागू करने में मुख्य आधारभूत सिद्धांत है, वास्तव में LINQ केवल एक वाक्य रचनात्मक चीनी है।

मुझे लगता है कि लिंक आपके कार्यक्रमों और डेटा के बारे में तर्कसंगत और साफ तरीके से तर्क के बीच एक बड़ा पुल है।

+0

हाँ, वास्तव में मैं कहूंगा कि सिंटैक्टिक चीनी वास्तव में LINQ की शक्ति – andy

+3

के सिंटैक्टिक क्रिस्टल मेथ के मूल में है? – geofftnz

3

स्मृति संग्रह में से एक क्वेरी के रूप में बोलते हुए, कोई इस एक अनूठी विशेषता नहीं है। उदाहरण के लिए एफ # के पाइप आगे ऑपरेटर ले लो। यह आपको एक समान क्वेरी ऑपरेशन लिखने की अनुमति देता है क्योंकि आप एक linq क्वेरी करेंगे। उदाहरण के लिए

लें निम्नलिखित कोड है जो एक तार से अंक निकालता है और उन्हें

"foobar42".ToCharArray() 
    |> Seq.filter System.Char.IsDigit 
    |> Seq.map (fun x -> x.ToString()) 
    |> Seq.map System.Int32.Parse 
    |> Seq.sum 
+0

हे जेरेड, क्या आपको लगता है कि एफ # का कार्यान्वयन LINQ करता है सहज ज्ञान युक्त और साफ अमूर्त प्रदान करता है? मुझे लगता है कि LINQ की शक्ति दोनों कार्यान्वयन और वाक्यविन्यास संख्या है? – andy

+3

@andy मुझे लगता है कि एफ # की अंतर्दृष्टि वास्तव में आपकी पृष्ठभूमि पर निर्भर करती है। पहले कुछ बार मैंने एफ # उठाया था, मुझे वाक्यविन्यास बेहद अनूठा और अनुपालन करना मुश्किल था, लेकिन मेरे पास एक मजबूत कार्यात्मक पृष्ठभूमि नहीं है। मेरे मित्र जिनके पास मजबूत कार्यात्मक पृष्ठभूमि हैं, उन्हें पालन करना आसान है। समय के साथ मैं इसे इस्तेमाल कर लिया है और अब इसे पालन करने और सहज ज्ञान युक्त बहुत आसान लगता है। – JaredPar

+0

@ जेरेड: उत्कृष्ट बिंदु। मुझे लगता है कि एमएस ने एक वाक्यविन्यास बनाया जिस तरह से एसक्यूएल पर आधारित है। दरअसल एसक्यूएल परम क्वेरीिंग भाषा की तरह है, यह एकमात्र उद्देश्य है। वाक्यविन्यास बनाने के लिए जो SQL पर स्वयं मॉडल बनाता है यह सहज ज्ञानपूर्ण लगता है ...? – andy

2

मुझे लगता है कि LINQ बहुत दिलचस्प है।

याद रखें कि यह अनिवार्य रूप से नेट में शक्तिशाली कार्यात्मक प्रोग्रामिंग क्षमताएं जोड़ता

यह भी दिलचस्प है माइक्रोसॉफ्ट LINQ काम करने के लिए क्रम बदलने के लिए नहीं था कि, सभी जादू क्योंकि # 3 सी में नई भाषा सुविधाओं के है और कंपाइलर और कक्षा पुस्तकालय में - क्योंकि अनिवार्य रूप से आपके प्रश्नों को लैम्बडा सिंटैक्स में आंतरिक रूप से अनुवादित किया जाता है (इस के अच्छे प्रदर्शन के लिए LINQPad देखें)

मुझे विश्वास है कि इस तरह की तकनीक विकसित करने के कारण एमएस ने इसे आसान बनाना है समांतर कार्यक्रम - LINQ की वजह से एसक्यूएल कम प्रासंगिक हो सकता है।

+1

@dplante: LINQ कार्य करने वाले अंतिम चरण को न छोड़ें। अभिव्यक्ति पेड़ हो सकता है कि अन्य आधुनिक कंपाइलर एक अभिव्यक्ति को पार्स कर सकें और अभिव्यक्ति वृक्ष को रनटाइम-सुलभ संरचना में सहेज सकें, लेकिन LINQ करता है। यह LINQ प्रदाता को अभिव्यक्ति के इरादे को पूरा करने के लिए अंतर्निहित डेटा स्टोर की आवश्यकता के उत्पादन के लिए अभिव्यक्ति वृक्ष की व्याख्या करने की अनुमति देता है। –

2

मुझे लगता है कि LINQ.NET ने इसे सब कुछ शुरू किया है। आजकल, कई अन्य कार्यान्वयन हैं: http://en.wikipedia.org/wiki/Linq#Other_language_implementations, लेकिन अगर मुझे सही याद है तो एमएस LINQ पहला था।

+0

LINQ LISP के लिए बहुत कुछ है। – ocodo

2

माइक्रोसॉफ्ट के भीतर, सी # और वीबी द्वारा अपनाए जाने से पहले सी-ओमेगा (सीडब्ल्यू) में एक बहुत ही समान वाक्यविन्यास विकसित किया गया था।

2

लिंक (जहां, चयन करें, कुल) में अवधारणाएं वर्ष के लिए LISP में हैं, ये बिल्कुल नई नहीं हैं।सी # में कार्यान्वयन विशेष रूप से सुरुचिपूर्ण है, विशेष रूप से यह एक सुंदर विघटनकारी अवधारणा को जोड़ने का प्रबंधन करता है, फिर भी मौजूदा सी # 2.0 कोड के साथ इतना अच्छा मिश्रण करता है। "एसक्यूएल के रूप में लिंक एएसटी को दोबारा परिभाषित करें" भी बहुत चालाक है।

+0

हम्म, धन्यवाद पॉल। हाँ, मैं वास्तव में एमएस के कार्यान्वयन की लालित्य कहूंगा जो इसे इतना उपयोगी बनाता है ..? – andy

2

लिंक के पास List comprehensions के साथ बहुत कुछ करना है, आप कार्यात्मक भाषाओं में पाइथन जैसे अधिक मुख्यधारा की भाषाओं में पा सकते हैं, जहां यह काफी समय से मानक और बहुत व्यापक रूप से उपयोग की जाने वाली सुविधा है।

सूची comprehensions का एक अच्छा उदाहरण के लिए, इस अजगर समारोह पीटर Norvig द्वारा simple spell checker से लिया

def edits1(word): 
    s = [(word[:i], word[i:]) for i in range(len(word) + 1)] 
    deletes = [a + b[1:] for a, b in s if b] 
    transposes = [a + b[1] + b[0] + b[2:] for a, b in s if len(b)>1] 
    replaces = [a + c + b[1:] for a, b in s for c in alphabet if b] 
    inserts = [a + c + b  for a, b in s for c in alphabet] 
    return set(deletes + transposes + replaces + inserts) 

यह Linq की तरह एक बहुत लग रहा है, (छुपा हुआ) अभिव्यक्ति के शुरू में लिखा गया चुनें के साथ, लिंक में जैसे अंत में अजीब होने की बजाय।

लैम्बडास पाइथन में कुछ हद तक फहरा हुआ है, और पाइथन में डिफ़ॉल्ट सूची समझ आलसी (IEnumerable<T>) के बजाय उत्सुक हैं (लेकिन List<T>) लेकिन यह बहुत करीब है।

होने (कुछ) शुद्ध समारोह श्रृंखलन, जैसे अन्य लोगों को यहां जवाब दिया की अवधारणा का सवाल है, यह कंप्यूटर भाषाओं में सबसे पुरानी अवधारणा में से एक (50 से अधिक लिस्प जा रहा है अब ...) है

+0

वाह, वर्तनी परीक्षक के लिए वह कोड वास्तव में वास्तव में अच्छा है! – Casebash

2

इस विचार है "भाषा एकीकृत क्वेरीज़" का नया? और यदि नहीं, तो अन्य भाषाओं में एक समान सुविधा लागू होती है

यदि आप एक भाषा एसक्यूएल मानते हैं, तो नहीं। मुझे लगता है कि एमएस की अंतर्दृष्टि यह थी कि कंटेनर जैसी सरणी में सबकुछ अनिवार्य रूप से स्मृति डेटाबेस में है। इतना ही नहीं, लेकिन इन संग्रहों पर कई संचालन समान हैं। प्रोग्रामर को एक वर्ष के दौरान लाखों। चयन, .wheres, और .irsts लिखना चाहिए। इनमें से कई कार्यान्वयन में अस्थायी सरणी और परिवर्तनीय है जो अव्यवस्था कोड है। LINQ के साथ, अस्थायी/धारक परिवर्तनीय/सरणी के बिना, तर्क को और अधिक संक्षिप्त बना दिया जाता है। एमएस ने मानक LINQ ऑपरेटरों के साथ बग की एक पूरी कक्षा को मिटा दिया।

अन्य कार्यान्वयन माइक्रोसॉफ्ट की तुलना कैसे करते हैं? सुनिश्चित नहीं है

यह थोड़ा सा व्यक्तिपरक है, लेकिन दूसरों को LINQ को एक विचार के रूप में कितना महत्वपूर्ण लगता है?

मुझे लगता है कि LINQ काफी संभवतः सबसे क्रांतिकारी भाषा सुविधा है जिसे मैंने कभी देखा है, और मैंने सोचा था कि बंद होने से भी बहुत बढ़िया था। यह प्रोग्राम क्लीनर बनाता है, और प्रोग्रामर कहीं अधिक उत्पादक बनाता है।

+0

धन्यवाद स्टीव, LINQ ने क्या हासिल किया है और संभव बनाया है उत्कृष्ट उत्कृष्टता – andy

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