मैंने कहीं पढ़ा क्लोजर संकलित किया गया है। क्या यह वास्तव में जावा या स्कैला की तरह संकलित है, जैसे कि ज्योथन या जेआरबीई की तरह?क्लोजर संकलित या व्याख्या की गई है?
उत्तर
क्लोजर हमेशा संकलित है।
क्लोजर कंपाइलर जावा बाइट कोड उत्पन्न करता है, जो आमतौर पर जेआईटी-जेवीएम द्वारा देशी कोड में संकलित होता है।
जो चीज भ्रमित हो सकती है वह क्लोजर की गतिशील और संवादात्मक प्रकृति है जिसका अर्थ है कि यदि आप चाहें तो आप रन-टाइम पर कंपाइलर का आह्वान कर सकते हैं। यह लिस्प "कोड डेटा" परंपरा का हिस्सा है।
उदाहरण के लिए, निम्नलिखित रन-टाइम में Clojure संकलक आह्वान संकलन और प्रपत्र (+ 1 2)
निष्पादित करने के लिए होगा:
(eval '(+ 1 2))
=> 3
रन-टाइम में संकलक लागू करने की क्षमता बहुत उपयोगी है - उदाहरण के लिए यह आपको आरपीएल का उपयोग करके चल रहे क्लोजर एप्लिकेशन के बीच में नया कोड संकलित और चलाने में सक्षम बनाता है। लेकिन यह महत्वपूर्ण है कि "व्याख्या" होने के साथ विकास की "इंटरैक्टिव" शैली को भ्रमित न करें - क्लोजर विकास इंटरैक्टिव है, लेकिन अभी भी संकलित है।
दोनों-आश! (जब यह बाईटकोड पैदा करने की बात आती है)
Clojure है ऑन-द-fly- compiled at code load time JVM बाईटकोड है, जो भावना और एक व्याख्या की भाषा के प्रवाह है में, और ahead-of-time compiled JVM बाईटकोड में, जो प्रवाह है एक संकलित भाषा का। इन दोनों में से JIT संकलित जावा हॉटस्पॉट कंपाइलर द्वारा मशीन कोड में संकलित किया गया है जो गतिशील अनुकूलन का ख्याल रखता है जो क्लोजर गति के लिए निर्भर करता है। चीजों को दिलचस्प बनाने के लिए बस "लोड/मूल्यांकन" कोड रनटाइम पर फ्लाई पर संकलित कर सकता है, और एओटी संकलित कोड रनटाइम पर स्रोत लोड और मूल्यांकन कर सकता है।
- यदि आप "व्याख्या" करना चाहते हैं तो आप प्रतिलिपि से
(load "/my/file.clj")
कर सकते हैं। - यदि आप आगे की समय संकलन चाहते हैं, तो क्या मैं leiningen क्लोजर प्रोजेक्ट प्रबंधन टूल का उपयोग करने का सुझाव दे सकता हूं।
इस मामले जब मैं व्याख्या मैं स्पष्ट है कि मैं के बारे में JVM बाईटकोड में स्रोत कोड बदल बात कर रहा हूँ होना चाहिए बनाम संकलन का उल्लेख किया। सभी जेवीएम भाषाएं compiled by the JVM at runtime हैं ताकि भेद वास्तव में बहुत रोचक न हो।
दोनों! गलत है कि यह केवल एक व्याख्या की गई भाषा का प्रवाह है जिसका कभी भी कुछ भी व्याख्या नहीं किया गया है। – nickik
हम शुद्ध भेदभाव और स्पष्ट संक्षिप्त उत्तरों के बीच विवाद में भाग रहे हैं। अंतिम अनुच्छेद में। मैं जेवीएम बाइटकोड बनाने की प्रक्रिया के बारे में बात कर रहा हूं। –
उस विशिष्ट को और स्पष्ट करने के लिए संपादित, धन्यवाद किकिक –
क्लोजर एक संकलित जेवीएम भाषा है। इसका मतलब है कि एक नए कार्यक्रम के साथ सामना करने वाला पहला कदम यह है कि इसे JVM बाइटकोड में संकलित करना है।
कुछ जेवीएम बाइटकोड बाद में हॉटस्पॉट द्वारा मशीन कोड में संकलित किया जा सकता है, यदि आप OpenJDK का उपयोग कर रहे हैं या इसके व्युत्पन्न हैं।
एक उच्च स्तरीय भाषा के रूप में, क्लोजर में गतिशील टाइपिंग का एक रूप है, जो "पूरी तरह गतिशील" वाक्यांश का जिक्र कर रहा है।
जेएफजीआई। प्रोजेक्ट होम पेज देखें। – Marcin
@ मार्सिन मैंने किया लेकिन यह मुझे थोड़ा उलझन में डाल देता है। क्या आप donwvote के साथ एक एवर प्रदान कर सकते हैं? – OscarRyz
"क्लोजर एक संकलित भाषा है - यह सीधे जेवीएम बाइटकोड में संकलित करता है, फिर भी पूरी तरह गतिशील रहता है।" पर्याप्त रूप से स्पष्ट? – Marcin