- प्रोग्रामिंग उत्पादकता का मूल भाषा से अधिक समृद्ध लाइब्रेरी ecosystem में है
- Ruby on Rails जैसे भाषा की उन्नत सुविधाओं का उपयोग करने वाले framework गैर-विशेषज्ञों को भी उच्च उत्पादकता देते हैं
- लेकिन भाषा की संरचनात्मक सीमाओं के कारण Rails स्तर का framework Java या C में लागू करना कठिन है
- भाषा डिज़ाइन सीधे यह तय करती है कि किस रूप और जटिलता की लाइब्रेरी लिखी जा सकती है, और यही भाषा विकास का मूल उद्देश्य है
- Stanza भाषा इस दृष्टिकोण से दिखाती है कि शक्तिशाली और उपयोग में आसान लाइब्रेरी बनाना संभव करने के लिए भाषा डिज़ाइन कितना महत्वपूर्ण है
प्रोग्रामिंग भाषाओं और लाइब्रेरी का संबंध
- अधिकांश प्रोग्रामिंग भाषाओं में variables, arrays, loops, functions जैसे समान बुनियादी तत्व होते हैं
- कुछ भाषाएँ first-class functions या coroutines जैसी उन्नत सुविधाएँ देती हैं, लेकिन गैर-विशेषज्ञ आमतौर पर उनका अच्छा उपयोग नहीं करते
- कई डेवलपर्स के लिए उत्पादकता बढ़ाने वाला कारक भाषा नहीं बल्कि लाइब्रेरी है
- उदाहरण के लिए, Ruby on Rails डेटाबेस-आधारित web applications को आसानी से बनाने देता है
- Rails की वजह से Ruby भाषा से अधिक framework के प्रति पसंद बनती है
Ruby on Rails और भाषा सुविधाओं की परस्पर क्रिया
- Rails, Ruby की metaprogramming, runtime evaluation, first-class functions, garbage collection जैसी कई सुविधाओं का उपयोग करता है
- उदाहरण: ActiveRecords metaprogramming का उपयोग करता है, और template system runtime evaluation का
- event handling, callback के रूप में first-class functions पास करके लागू की जाती है
- Java या C में ये सुविधाएँ पर्याप्त नहीं हैं, इसलिए Rails स्तर का framework लागू करना संभव नहीं
- Java की metaprogramming, ActiveRecords लागू करने जितनी शक्तिशाली नहीं है
- इसलिए Rails, Ruby भाषा की संरचना की वजह से संभव है, और भाषा डिज़ाइन लाइब्रेरी की संभावनाएँ तय करती है
भाषा डिज़ाइन लाइब्रेरी के रूप को तय करती है
- C भाषा केवल function declarations और calls के जरिए पुन: उपयोग का समर्थन करती है, इसलिए अधिकतर C libraries functions के संग्रह के रूप में होती हैं
- Ruby, first-class functions का समर्थन करती है, इसलिए “button click होने पर चलने वाला action” को संक्षेप में व्यक्त किया जा सकता है
- जबकि Java में handler class परिभाषित करनी पड़ती है, जिससे कोड जटिल हो जाता है
- भाषा की अभिव्यक्त क्षमता सीधे लाइब्रेरी की संरचना और उपयोगिता को निर्धारित करती है
इंटरैक्टिव software और विस्तार योग्य frameworks का उदय
- 1970 के दशक की batch computing में function-केंद्रित libraries पर्याप्त थीं
- आधुनिक इंटरैक्टिव software में extensible libraries की आवश्यकता होती है
- GUI या event-based systems में “user click करने पर मेरा code चलाओ” जैसी संरचना चाहिए
- Java और C++ inheritance और method overriding के जरिए विस्तार का समर्थन करते हैं, और यही संरचना आगे frameworks में विकसित हुई
Stanza डिज़ाइन की पृष्ठभूमि और भाषा की सीमाएँ
- Stanza के डिज़ाइन की प्रेरणा Java में उपयोग में आसान game programming library लिखने की कठिनाई से शुरू हुई
- Java में concurrency को state machine के रूप में व्यक्त करना पड़ता था
- Scheme, continuation का समर्थन करता है, इसलिए अधिक सहज implementation संभव है
- लेकिन Scheme static type checking का समर्थन नहीं करता, इसलिए debugging की दक्षता कम होती है
- वर्तमान में अधिकांश भाषाएँ type system को library के रूप में extend नहीं कर सकतीं
- Stanza, optional type system, garbage collection, multimethod-based object system प्रदान करता है
- लेकिन नया user-defined object system फिर से लिखना संभव नहीं है
भाषा का उद्देश्य और शोध की दिशा
- सामान्य-उद्देश्य प्रोग्रामिंग भाषा का उद्देश्य शक्तिशाली और उपयोग में आसान libraries के निर्माण का समर्थन करना है
- भाषा जितनी शक्तिशाली होगी, library का उपयोग उतना ही संक्षिप्त होगा
- जब code अच्छी तरह डिज़ाइन की गई library का उपयोग करता है, तो उसमें सहकर्मी को निर्देश देने वाले वाक्य जैसी स्वाभाविकता होती है
- Racket, Shen, meta object protocol पर शोध आदि विस्तार योग्य type और object systems की खोज कर रहे हैं
- अंततः भाषाओं का अंतर इस बात से तय होता है कि “कौन-सी libraries इस्तेमाल की जा सकती हैं, और कौन-सी नहीं”
- सुंदर libraries के पीछे दशकों का भाषा अनुसंधान और डिज़ाइन प्रयास मौजूद होता है
अभी कोई टिप्पणी नहीं है.