मेरे पास क्लोजर और जावा दोनों का उपयोग करके एक एप्लिकेशन के बारे में एक दिलचस्प वास्तुकला प्रश्न है। एप्लिकेशन में बहुत गहन, समवर्ती डेटा प्रोसेसिंग कार्य शामिल हैं जिन्हें ऑर्केस्ट्रेट करने की आवश्यकता है।क्लोजर और जावा के बीच की रेखा कहां खींचना है?
यहाँ दोनों Clojure और जावा मिश्रण के लिए तर्क दिया गया है:
- जावा कुछ बहुत CPU- सघन संख्यात्मक कोड, जहां मैं JVM पर के रूप में तेजी से संभव के रूप में चलाने के लिए एल्गोरिथ्म को अनुकूलित करने की जरूरत के लिए आवश्यक है । क्लोजर अभी तक इसे हासिल नहीं कर सकता है, और इस तरह का कोड क्लोजर में बहुत मूर्खतापूर्ण नहीं होगा क्योंकि एल्गोरिदम को प्रदर्शन कारणों से बहुत सारे परिवर्तनीय डेटा की आवश्यकता होती है।
- क्लोजर (IMHO) के लिए बहुत बेहतर है, आवेदन के कुल प्रवाह को कार्यान्वित करना, कार्यात्मक प्रोग्रामिंग के लिए उत्कृष्ट समर्थन, आरईपीएल और समवर्ती सुविधाओं पर इंटरैक्टिव गतिशील विकास के साथ।
यह देखते हुए कि मैं दोनों भाषाओं का उपयोग कर रहा हूं - दोनों के बीच विभाजन रेखा निर्धारित करने के लिए मुझे किस तर्क या सिद्धांतों को लागू करना चाहिए? विशेष रूप से, मुझे एपीआई/इंटरफ़ेस को डिज़ाइन करने में दिलचस्पी है जो दोनों भाषाओं की सापेक्ष ताकत का लाभ उठाने के लिए सही प्रकार के स्तर पर होगा।
मैं आपके पहले वक्तव्य से थोड़ा आश्चर्यचकित हूं: मेरे अनुभव में संख्यात्मक कोड क्लोजर के लिए बिल्कुल उपयुक्त है लेकिन ओओ दृष्टिकोण के लिए खुद को बहुत अच्छा नहीं देता है। जहां तक प्रदर्शन चलता है: क्या आपने वास्तव में अंतर को माप लिया? क्लोजर में संकेत टाइप करना आपको जावा प्रदर्शन के बहुत करीब ले जाएगा। मैं प्रदर्शन कारणों से परिवर्तनीय डेटा की आवश्यकता को भी समझ नहीं पा रहा हूं। शायद आप यहां एक उदाहरण के रूप में दे सकते हैं? –
@ मॉरीट्ज - हाँ मैंने अंतर मापा! टाइपिंग संकेत मुझे काफी करीब नहीं मिला (प्राइमेटिव्स का मुक्केबाजी बड़ा हत्यारा है, लेकिन कुछ अन्य ओवरहेड भी थे जिन्हें मैं समझ नहीं पाया - शायद मैं क्लोजर 1.4 :-) में फिर से देखूंगा)। मुझे उत्परिवर्तन की आवश्यकता है क्योंकि मुझे बहुत से अस्थायी कामकाजी डेटा में हेरफेर करना है। एक [i] = एक [जे] + एक्स जावा में बहुत तेज़ है, निश्चित रूप से कम से कम किसी भी अपरिवर्तनीय डेटा संरचना को अपडेट करने से तीव्रता का क्रम (जो ऑब्जेक्ट आवंटन और जीसी ओवरहेड का तात्पर्य है)। – mikera
यह वास्तव में आपके प्रश्न का उत्तर नहीं देता है लेकिन आप C++/C और JNI में संख्यात्मक पक्ष को क्लोजर – justinhj