2010-09-19 7 views
16

पॉल ग्राहम What Made Lisp Different में नौवीं बुलेट बिंदु का कहना है,क्लोजर के मामले में "पूरी भाषा हमेशा उपलब्ध" होती है?

9. पूरे भाषा हमेशा उपलब्ध।

रीड-टाइम, संकलन-समय और रनटाइम के बीच कोई वास्तविक भेद नहीं है। संकलन करते समय कोड पढ़ने, पढ़ने या चलाने के दौरान कोड को संकलित या चला सकते हैं, और रनटाइम पर कोड को पढ़ या संकलित कर सकते हैं।

रीड-टाइम पर कोड चलाना उपयोगकर्ताओं को लिस्प के वाक्यविन्यास को दोबारा लिखने देता है; संकलन समय पर चलने वाला कोड मैक्रोज़ का आधार है; रनटाइम पर संकलन एसीएक्स जैसे कार्यक्रमों में विस्तार भाषा के रूप में लिस्प के उपयोग का आधार है; और रनटाइम पर पढ़ना प्रोग्रामों को एस-एक्सप्रेशन का उपयोग करके संवाद करने में सक्षम बनाता है, जो हाल ही में एक्सएमएल के रूप में पुनर्निर्मित एक विचार है।

क्या यह अंतिम बुलेट बिंदु क्लोजर के लिए है?

उत्तर

13

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


असमर्थित clever hacks के माध्यम से छोड़कर।

+5

बस स्पष्ट होने के लिए, क्लोजर में मनमाने ढंग से कोड को पढ़ने के लिए संभव है और फिर इसे संकलित और निष्पादित करें; हालांकि, रीड-टाइम पर मनमानी कोड निष्पादित करने के लिए पाठक को प्लग करना संभव नहीं है, क्योंकि यह सामान्य लिस्प में है। –

+0

हैक से प्यार है। लिंक के लिए धन्यवाद! :- डी – missingfaktor

+3

क्लोजर '# =' रीडर मैक्रो के साथ रीड-टाइम पर मनमाना कोड निष्पादित कर सकता है। –

4

यह पकड़ है,

(eval (read-string "(println \"Hello World!!\")")) 
Hello World!! 
nil 
बस Emacs आप Clojure में अपने कार्यक्रम विन्यास हो सकता है की तरह

, एक परियोजना है कि मैं Clojure पता static जो आप मनमाने ढंग से के साथ एक Clojure वेक्टर के रूप में अपने टेम्पलेट के लिए अनुमति देता है के लिए कोड जिसे पढ़ने के समय निष्पादित किया जाएगा।

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