2010-02-07 17 views
11

जावा बंद करने के लिए spec की वर्तमान स्थिति क्या है?जावा क्लोजर प्रकार, चर, सरणी और संग्रह

  1. प्रस्तावित जावा बंद कल्पना में, हम करने में सक्षम होगा किसी सरणी या बंद होने के संग्रह बनाने के?
    यदि हां, तो क्या यह वाक्यविन्यास संभव होगा?

    {int x, int y => boolean b}[] comparisonSwitch = { 
        {int i, int j => return i>j}, 
        {int i, int j => return j<i}, 
        {int i, int j => return j==i} 
    } 
    
    boolean compare(int acase, int a, int b){ 
        return comparisonSwitch[acase].invoke(a,b); 
    } 
    
  2. क्या सामान्य तरीकों को गैर-अज्ञात बंद माना जाएगा?
    तो क्या निम्न वाक्यविन्यास संभव होगा?

    public class Asdf 
    { 
        public boolean gt(int x, int y){ 
        return x>y; 
        } 
        public boolean lt(int x, int y){ 
        return x<y; 
        } 
        public boolean eq(int x, int y){ 
        return x==y; 
        } 
    
        {int x, int y => boolean b} GT = gt; 
        {int x, int y => boolean b}[] comparisonSwitch = { 
        gt, lt, eq 
        } 
    } 
    
  3. जैसे कि, बंद और तरीकों प्रचालन interchangeble कर रहे हैं?
    क्या निम्नलिखित वाक्यविन्यास की अनुमति होगी?

    // declare a method that has a closure type as an argument 
    void closurator({String s => int a} findlen){ 
        // do whatever 
    } 
    String s = "hello"; 
    void useClosurator(){ 
        // invoke the method by supplying a non-anonymous method 
        // of an object 
        closurator(s.indexOf(String ss)); 
    } 
    
  4. हम एक इंटरफ़ेस में बंद प्रकार निर्दिष्ट करने में सक्षम कैसे होंगे?
    क्या हम निम्नलिखित विधियों को अंतिम रूप से अंतिम/निरंतर संदर्भ घोषित कर सकते हैं।

    interface Closuration 
    { 
        public class Asdf 
        { 
        static public boolean gt(int x, int y){ 
         return x>y; 
        } 
        static public boolean lt(int x, int y){ 
         return x<y; 
        } 
        static public boolean eq(int x, int y){ 
         return x==y; 
        } 
        } 
    
        {int x, int y => boolean b}[] comparisonSwitch = { 
        Asdf.gt, Asdf.lt, Asdf.eq 
        }; 
    } 
    
  5. बंद कोड अंतरिक्ष का उपयोग होता है के बाद से, बस के रूप में प्रतिबिंब, बंद करने की का प्रयोग करेंगे होगा एक कार्यक्रम के प्रदर्शन को धीमा? यदि नहीं, तो इसका मतलब यह होगा कि "बंद प्रौद्योगिकी" में किए गए उधार लेने के द्वारा प्रतिबिंब बढ़ाया जाएगा? , वास्तव में, बंद कोड कोड अंतरिक्ष के या चर ढेर में हिस्सा होगा क्योंकि मैं भविष्यवाणी कर रहा हूँ कि बंद कोड, कचरा संग्रहण द्वारा बंद साफ हो करने के लिए अतिसंवेदनशील हो सकता है सही:

नया प्रश्न सम्मिलित किया गया?

क्या मैं आपको प्रश्नों के सारांश पर ध्यान केंद्रित करने का अनुरोध कर सकता हूं, उदाहरण कोड में किसी भी वाक्यविन्यास त्रुटियों/टाइपो/गायब कीवर्ड पर नहीं। कोई टाइपो/त्रुटियां, कृपया उन्हें मेरे लिए सही करें। धन्यवाद।

+0

यदि आप में से कोई भी इस प्रश्न को "वास्तविक प्रश्न नहीं" के रूप में बंद करने के लिए बहुत ही अधीर है, तो कृपया http://stackoverflow.com/questions/2198734/demonstrate-prove-that पर अपनी स्वयं की टिप्पणी पढ़ें -हेप-सॉर्ट-ऑन-ऑन-लॉग 2 एन-टाइम-बंद: यह होमवर्क नहीं है। 50 साल पुराने प्राचीन प्रोग्रामर को कुछ रणनीति निर्णय लेने के लिए कुछ ईमानदार मदद की ज़रूरत है। –

+0

क्या यह सवाल नील गफ्फर के बंद प्रस्ताव के बारे में है, या वर्तमान में चर्चा के दौरान भेड़ का बच्चा? –

+0

वर्तमान परियोजना लैम्ब्डा: जावा भाषा विशिष्टता ड्राफ्ट 0.1 http://mail.openjdk.java.net/pipermail/lambda-dev/attachments/20100122/3764c21a/attachment.txt संस्करण 0.2 तैयार किया जा रहा है। –

उत्तर

12

आप जेडीके 7 बंद करने के काम के बारे में पूछ रहे हैं, इसलिए javac.info के संदर्भ प्रासंगिक नहीं हैं। यह साइट अब पूर्ण ओपनजेडके क्लोजर प्रोजेक्ट के बारे में है, जो दिखाता है कि कैसे पारदर्शी जावा को बंद करना - टेनेन्ट के कॉरस्पोन्डेंस सिद्धांत को संतुष्ट करने के अर्थ में पारदर्शिता और लगभग my blog में वर्णित है।

जेकेडी 7 के लिए प्रयास openjdk lambda project के तहत आयोजित किया गया है। विनिर्देश तेजी से विकास से गुज़र रहा है, इसलिए कोई भी जवाब टिकाऊ है। जैसा कि टॉम हौटिन ने बताया, here is the latest draft spec

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

आपके सवालों के जवाब के लिए:

  1. कि एक समारोह प्रकार के लिए प्रस्तावित सिंटैक्स नहीं है। उस मुद्दे को एक तरफ सेट करना, आप सोच रहे हैं कि फ़ंक्शन प्रकार की सरणी होने के लिए कानूनी होगा या नहीं। वर्तमान मसौदा विनिर्देश बताता है कि उत्तर हाँ है, लेकिन ज्ञात कार्यान्वयन रणनीतियों के परिणामस्वरूप सिस्टम सिस्टम में एक छेद होगा जब तक कि "फ़ंक्शन प्रकार की सरणी" किसी भी तरह से अस्वीकृत नहीं होती है। मसौदा विनिर्देश सावधानीपूर्वक कार्यान्वयन रणनीतियों पर चर्चा से बचाता है। यह संभव है कि इन मुद्दों को हल करने के लिए वीएम स्पेक परिवर्तन किए जा सकें। अगर मुझे लगता है, तो मुझे संदेह है कि आपके प्रश्न का उत्तर "नहीं" होगा। हालांकि, आप एक सरणी के बजाय java.util.List का उपयोग करके एक ही प्रभाव प्राप्त करने में सक्षम होंगे। यह देखते हुए कि अलग project CoinList के लिए अक्षर और अनुक्रमण संचालन जोड़ने पर विचार कर रहा है, यह सिंटैक्टिक रूप से सुविधाजनक होने की संभावना है।
  2. आप सोच रहे हैं कि क्या आप एक विधि नामकरण द्वारा एक कार्य-मूल्यवान अभिव्यक्ति तैयार करेंगे। क्योंकि (अन्य कारणों से) विधियों और चर जावा में विभिन्न नामस्थानों में दिखाई देते हैं, तो जवाब शायद नहीं है। हालांकि, यह संभव है कि विनिर्देश को एक विशिष्ट वाक्यविन्यास के साथ बढ़ाया जाए ताकि यह पूछने के लिए कि एक विधि नाम को फ़ंक्शन-मूल्यवान अभिव्यक्ति के रूप में माना जा सके। स्टीफन कोलबर्न द्वारा प्रस्तावित एक वाक्यविन्यास का उपयोग करके, दस्तावेज़ दस्तावेज़ Closures for Java (v0.6a) में एक तरीके से विचार किया जा सकता है। यह अभी तक परियोजना lambda के किसी भी मसौदे में नहीं है।
  3. (2) का जवाब देखें।
  4. (2) का जवाब देखें।
  5. आप प्रदर्शन के बारे में चिंतित हैं। संक्षेप में, यह असंभव है कि बंदियों को किसी भी तकनीक के साथ कार्यान्वित किया जाएगा जो उन्हें किसी विधि से अधिक महंगे होने का कारण बनता है। प्रदर्शन कारणों से कोई वीएम परिवर्तन आवश्यक नहीं है, हालांकि वे अन्य कारणों के लिए एक अच्छा विचार हो सकते हैं (1 का जवाब देखें)। बीजीजीए के प्रोटोटाइप के लिए पॉइंटर के लिए the Closures Project homepage देखें, एक अधिक महत्वाकांक्षी बंद विनिर्देश, जो स्टॉक जेडीके 5/जेडीके 6 पर चलता है, और जिसका प्रदर्शन आप माप सकते हैं।
1

जेडीके 7 में क्लोजर इस समय विस्तार से कम हैं। Devoxx में प्रेजेंटेशन में इस्तेमाल किए गए उदाहरण FCM closures proposal के समान थे।

मान लीजिए कि जेडीके 7 में spec का उपयोग किया जाता है, तो मुझे लगता है कि आपके प्रश्न के भाग 2, 3 और 4 का जवाब हां है (हालांकि मैं गलत हो सकता हूं)।

भाग 1 के लिए - मुझे लगता है कि विधि सारणी के लिए विधि अक्षर असाइन करने योग्य होने के बाद से सरणी होनी चाहिए।

भाग 5 के लिए मुझे संदेह होगा कि प्रदर्शन आंतरिक कक्षाओं के समान होगा।

क्षमा करें मैं थोड़ी अस्पष्ट हूं - मुझे आशा है कि इससे थोड़ा सा मदद मिलेगी। यह निश्चित रूप से निश्चित रूप से निश्चित रूप से अपने प्रश्नों का उत्तर देने के लिए अभी भी संभव है।

+0

वाक्यविन्यास एफसीएम के समान था (यह हैश चरित्र का उपयोग करता था)। वास्तविक प्रस्ताव बहुत अलग था। –

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