2010-05-26 10 views
17

का अच्छा समवर्ती उदाहरण क्लोजर एक ऐसी भाषा कहा जाता है जो बहु-थ्रेड प्रोग्रामिंग को आसान बनाता है।जावा बनाम क्लोजर

Clojure.org वेबसाइट से

:

Clojure कई मायनों में मल्टी-थ्रेडेड प्रोग्रामिंग सरल करता है।

अब मैं जावा में और क्लोजर में हल की गई एक गैर-मामूली समस्या की तलाश में हूं, इसलिए मैं उनकी सादगी की तुलना/तुलना कर सकता हूं। किसी को?

+0

विशेषताएं समझाते हुए एक अच्छा ब्लॉग: https: //perkss.github।io/#/क्लोजर/ConcurrencyClojure # टेक्स्ट-बॉडी – Matt

उत्तर

13

मैं सुझाव देता हूं कि क्रिस्टोफ़ ग्रैंड के thread safe blocking queue पर भी देखें; यह 20 से कम लाइनों से है, लेकिन बहुत सारी कार्यक्षमता पैक करता है, और मेरी राय में क्लोजर की समरूपता सुविधाओं, अपरिवर्तनीयता, परमाणुओं और आलसी अनुक्रमों के विशेषज्ञ उपयोग का प्रदर्शन होता है।

पर विचार करें कि जावा विकल्प java.util.concurrent.LinkedBlockingQueue is 842 lines के सूक्ष्म (यकीनन जटिल) कोड टिप्पणी की है, और आप को समझने के लिए Clojure वास्तव में अपने संगामिति वादे को पूरा करता है शुरू, महत्वपूर्ण रूप से अमूर्तता के स्तर को बढ़ाने और लगभग 10-20x कम कोड के साथ एक सही कार्यान्वयन प्रदान करना।

आप यह भी देखेंगे कि जावा कोड पढ़ने के दौरान पेड़ों के लिए जंगल देखना वास्तव में मुश्किल है ... यदि आपको दिया गया तो क्या आप इसे देखकर इसकी शुद्धता सुनिश्चित कर सकते हैं? यह भी ध्यान रखें कि यह कोड डौग ली (तर्कसंगत रूप से जावा कंसुरेंसी पर सबसे प्रमुख विशेषज्ञ) द्वारा लिखा गया था और जावा के लिए अत्यधिक पठनीय है; मुझे बहुत संदेह है कि मैं जावा में इस तरह के पठनीय प्रदर्शन कोड को जल्दी से लिख सकता हूं और इसकी शुद्धता सुनिश्चित कर सकता हूं।

क्लोजर संस्करण में इसकी तुलना करें और एक बार क्लोजर की मूल बातें से परिचित हो जाएं, यह अलग करना और समझना आसान है कि यह कैसे काम करता है ... 20 मिनट के भीतर मैं कार्यान्वयन की हर पंक्ति को समझने में सक्षम था, और इसके बारे में सुनिश्चित हो गया शुद्धता। और अब जब मैं क्लोजर के मुहावरे और एफपी से ज्यादा परिचित हूं, तो मुझे लगता है कि यह अब मुझे 5 मिनट के करीब ले जाएगा। मैं शायद क्लोजर में घंटे या मिनट में "सही" कोड लिखने में सक्षम हूं।

उपरोक्त जावा क्लास के क्रिस्टोफ clojure wrapper भी निर्देशक है क्योंकि यह पहले संस्करण के समान कार्यशील इंटरफ़ेस साझा करता है।

4

कृपया Rich Hickey's Ants example के लिए तत्पर हैं - यह बताती है clojure की सुविधाओं का उपयोग करने के लिए कैसे समवर्ती कार्यक्रमों

+1

क्या इसका जावा संस्करण भी है? मैं दोनों भाषाओं में उदाहरणों की तलाश में हूं इसलिए मैं तुलना/विपरीत कर सकता हूं। –

+0

मुझे याद है, कि किसी ने जावा संस्करण लिखा है, लेकिन अभी इसे नहीं मिला ... –

5

The Wide Finder Project, टिम ब्रे द्वारा शुरू किया निर्माण करने के लिए, Clojure प्रविष्टियों की एक संख्या है - सबसे उल्लेखनीय जो एलेक्स ओसबोर्न द्वारा होता है; उन्होंने a fantastic write-up पर किया है - साथ ही जावा, स्कैला और अन्य भाषाओं की प्रभावशाली संख्या में प्रविष्टियां भी की हैं।

हल करने की समस्या पूरी तरह से व्यावहारिक है और समानांतर चुनौती के रूप में दिलचस्प है और इसके बारे में टिम की पोस्टिंग (हाल ही में Wide Finder 2 श्रृंखला) को पढ़ने के लिए काफी आनंददायक है (और एक अच्छा शैक्षिक मूल्य लेना)। इसके अलावा एलेक्स का पाठ वाकई बहुत अच्छा है, अगर आप बाकी को छोड़ने का फैसला करते हैं तो भी इसे पढ़ें। यह जावा से लाए गए सामान के साथ कुछ क्लोजर-विशिष्ट विशेषताओं (जैसे परमाणुओं) का उपयोग करता है, यह नौकरी ठीक & तेजी से काम करता है ... वास्तव में, यह क्लोजर के उत्कृष्ट जावा इंटरऑप को प्रदर्शित करने के तरीके के लिए दिलचस्प होगा।

सब कुछ, मैं कहूंगा कि यह संभवतः सबसे अच्छी बात है।