Emacs-Lisp गतिशील रूप से टाइप की गई भाषा है। इसका मतलब है कि आपको रनटाइम पर टाइप टैग की आवश्यकता है। यदि आप संख्याओं के साथ काम करना चाहते हैं, तो आपको आमतौर पर उन्हें किसी प्रकार के टैग किए गए कंटेनर में पैक करना होगा जिसे आप इंगित कर सकते हैं (यानी "बॉक्स" उन्हें), क्योंकि रनटाइम पर मशीन पूर्णांक से पॉइंटर को अलग करने का कोई तरीका नहीं है बिना किसी टैगिंग योजना के।
दक्षता कारणों से, अधिकांश लिस्प कार्यान्वयन इसलिए कच्चे पॉइंटर्स का उपयोग नहीं करते हैं, लेकिन मुझे लगता है कि मुझे वर्णक कहा जाता है। ये वर्णनकर्ता आमतौर पर एक एकल मशीन शब्द होते हैं जो एक पॉइंटर, एक अनबॉक्स किए गए नंबर (एक तथाकथित फ़िक्सनम) का प्रतिनिधित्व कर सकता है, या कई अन्य हार्ड-कोडित डेटा संरचनाओं में से एक (यह अक्सर एनआईएल और विपक्षी कोशिकाओं को एन्कोडिंग करने योग्य है, उदाहरण के लिए)।
अब, जाहिर है, यदि आप टाइप टैग जोड़ते हैं, तो आपके पास संख्या के लिए 32 बिट्स शेष नहीं हैं, इसलिए आपको एमआईटी योजना के रूप में 26 बिट्स या इमाक्स या किसी अन्य के रूप में 2 9 बिट्स के साथ छोड़ दिया गया है बिट्स की संख्या जिसे आपने टैगिंग के लिए उपयोग नहीं किया था।
विभिन्न गतिशील भाषाओं के कुछ कार्यान्वयन फ़िक्समम्स के लिए एकाधिक टैग आरक्षित करते हैं ताकि वे आपको 30-बिट या 31-बिट फ़िक्समम्स दे सकें। एसबीसीएल सामान्य लिस्प का एक कार्यान्वयन है जो does this है। मुझे लगता है कि इस कारण की जटिलता इमाक्स के लिए इसके लायक नहीं है। टेक्स्ट एडिटर में 2 9-बिट फिक्सनम अंकगणित के विपरीत आपको 30-बिट फ़िक्सनम अंकगणितीय के रूप में कितनी बार तेज़ी से 30-बिट फ़िक्सनम अंकगणित की आवश्यकता होती है जो अपने लिस्प कोड को मशीन कोड में संकलित नहीं करता है (या करता है? मुझे याद नहीं है, वास्तव में) ? क्या आप Emacs-Lisp में एक वितरित.net क्लाइंट लिख रहे हैं? सामान्य लिस्प के लिए बेहतर स्विच, फिर!;)
स्रोत
2008-09-20 08:40:08
तो फ़िक्समम्स वास्तव में आप जो चाहते हैं वह वास्तव में नहीं हैं। आप वास्तव में कस्टम पूर्णांक संचालन चाहते हैं जो मशीन अंकगणितीय अनुकरण करें। मैं विस्तृत कर सकता हूं, लेकिन यदि आप इसके लिए एक नया प्रश्न खोले हैं तो यह साइट पर आने वाले अन्य लोगों के लिए उपयोगी होगा। –