जब जावा को पहली बार डिज़ाइन किया गया था तो इसे गुमनाम कार्यों को छोड़ना उचित माना गया था। मैं दो कारणों के बारे में सोच सकता हूं (लेकिन वे आधिकारिक लोगों से अलग हो सकते हैं):
- जावा को कार्यों के बिना एक वस्तु-उन्मुख भाषा के रूप में डिज़ाइन किया गया था, इसलिए बिना कार्यों के किसी भाषा में अनाम कार्य करना बहुत स्वाभाविक नहीं था। या कम से कम, इसने भाषा के डिजाइन को बहुत प्रभावित किया होगा।
- बेनामी फ़ंक्शंस प्रोग्रामर समुदायों में लोकप्रिय नहीं थे कि जावा को आकर्षित करने के लिए था (सी, सी ++, पास्कल?)। अब भी, कई जावा प्रोग्रामर इन विशेषताओं को काफी विवादास्पद मानते हैं (लेकिन यह संभवतः जावा 8 के साथ बहुत जल्दी बदल जाएगा)।
बाद के वर्षों में, जैसा कि रॉबर्ट हार्वे ने बताया है, सूर्य की नीति हमेशा जावा को पिछड़े और बहुत स्थिर रखने की थी।
दूसरी ओर, अन्य प्रतिस्पर्धी भाषाएं उभरी हैं (सबसे महत्वपूर्ण C # है, जो एक जावा क्लोन के रूप में पैदा हुई थी और फिर अपनी खुद की विकास दिशा में ले गई थी)।
प्रतिस्पर्धी भाषाओं ने जावा को दो कारणों से दबाव में रखा है:
अभिव्यंजक शक्ति
नई सुविधाओं से कुछ प्रोग्रामिंग मुहावरों को लिखना आसान हो सकता है, जिससे प्रोग्रामर के लिए भाषा अधिक आकर्षक हो जाती है। आम तौर पर एक भाषा द्वारा प्रदान की जाने वाली सुविधाओं का समूह अभिव्यंजक शक्ति, भाषा की जटिलता, डिजाइन के अनुरूपता के बीच एक समझौता है: अधिक सुविधाओं को जोड़ने से भाषा अधिक अभिव्यंजक होती है, लेकिन मास्टर करने के लिए अधिक जटिल और कठिन भी होती है।
वैसे भी, पिछले कुछ वर्षों में जावा के प्रतियोगियों ने बहुत सारी नई सुविधाएँ जोड़ी हैं जो जावा के पास नहीं थीं, और इसे एक फायदा माना जा सकता है।
प्रचार
हां, दुर्भाग्य से यह प्रौद्योगिकी पसंद का एक कारक है, कम से कम मैं अपने दैनिक अनुभव में एक प्रोग्रामर के रूप में क्या देख सकता हूं: एक उपकरण में एक निश्चित सुविधा होनी चाहिए, भले ही टीम के अधिकांश सदस्य यह नहीं जानते हों कि इसका उपयोग कैसे करना है और जो लोग इसका उपयोग करने में सक्षम होंगे उन्हें इसकी सबसे अधिक आवश्यकता नहीं है।
प्रबंधकों जैसे गैर तकनीकी लोगों के लिए प्रचार और भी महत्वपूर्ण हो सकता है, जो एक निश्चित परियोजना के लिए प्लेटफ़ॉर्म तय करने वाले हो सकते हैं। प्रबंधकों को कभी-कभी केवल लैम्बडा, समानतावाद, मल्टीकोर, कार्यात्मक प्रोग्रामिंग, क्लाउड कंप्यूटिंग जैसे कुछ कीवर्ड याद आते हैं, ... यदि हमारी पसंद की तकनीक में सूची के प्रत्येक आइटम पर एक हरे रंग का निशान है, तो हम अद्यतित हैं।
तो कुछ समय के लिए आईएमओ जावा के बीच पकड़ा गया है
- भाषा स्थिरता और डिजाइन सादगी की मूल नीति, एक हाथ पर एक विशाल कोड आधार और डेवलपर समुदाय, और
- प्रतिस्पर्धा करने वाली भाषाओं का दबाव जो जावा प्रोग्रामर, सी # को पहली बार आकर्षित कर सकता है, और फिर स्काला, क्लोजर, एफ # (मैं जिन लोगों के बारे में जानता हूं, उनका नाम हो सकता है)।
आखिरकार ओरेकल ने इसे और अधिक प्रतिस्पर्धी बनाने के लिए जावा को अपग्रेड करने का फैसला किया। मेरी राय में, नई सुविधाएँ विशेष रूप से जावा प्रोग्रामर को संबोधित करती हैं जिन्हें शायद C # पर स्विच करने के लिए लुभाया जा सकता है और जो अन्य भाषाओं जैसे कि स्काला और क्लोजर को जावा से अलग देखते हैं। दूसरी ओर, डेवलपर्स जिन्हें कार्यात्मक प्रोग्रामिंग के साथ कुछ अनुभव है और अभी भी जेवीएम का उपयोग करना चाहते हैं, वे शायद पहले से ही स्काला, क्लोजर या किसी अन्य भाषा में स्विच कर चुके हैं।
तो नए जावा 8 के फीचर्स जावा को भाषा के रूप में अधिक शक्तिशाली बना देंगे और घोषित फ़ोकस समवर्ती और समानांतर प्रोग्रामिंग है, लेकिन अपग्रेड मार्केटिंग के पहलुओं (मार्क रेनहोल्ड, जावा में ओरेकल के मुख्य वास्तुकार) को भी संबोधित करता है, ने कहा: "कुछ लैम्ब्डा एक्सप्रेशन जोड़ने का मतलब सिर्फ कूल बच्चों के साथ बने रहना है, और इसमें कुछ सच्चाई है, लेकिन असली कारण है हिसाकोर प्रोसेसर, उन्हें संभालने का सबसे अच्छा तरीका है लैम्ब्डा ", इस लेख को देखें )।
तो, हाँ, कई (सभी) जावा 8 सुविधाओं को पहले से ही अच्छी तरह से जाना जाता था, लेकिन एक भाषा में एक सुविधा को क्यों और कब जोड़ा जाता है यह कई कारकों पर निर्भर करता है: दर्शकों, मौजूदा समुदाय, मौजूदा कोड आधार, प्रतियोगियों, विपणन, आदि।
संपादित करें
"... मैंने SIC (1996) में धाराओं के बारे में पढ़ा था" के बारे में एक संक्षिप्त टिप्पणी। क्या आपका मतलब है कि धाराओं को लागू करने के लिए आपको जावा 8 लैम्ब्डा की आवश्यकता है? वास्तव में आप अनाम आंतरिक कक्षाओं का उपयोग करके उन्हें लागू कर सकते हैं।