2008-09-20 10 views
8

और वे इसे क्यों नहीं बदलते?Emacs में फ़िक्समम्स केवल 2 9 बिट्स क्यों हैं?

संपादित करें: कारण पूछना है क्योंकि मैं emacs के लिए नया हूं और मैं Emacs को "प्रोग्रामर कैलकुलेटर" के रूप में उपयोग करना चाहता हूं। इसलिए, मैं 32-बिट & 64-बिट पूर्णांक में हेरफेर कर सकता हूं और वे देशी मशीन पर व्यवहार करते हैं।

+0

तो फ़िक्समम्स वास्तव में आप जो चाहते हैं वह वास्तव में नहीं हैं। आप वास्तव में कस्टम पूर्णांक संचालन चाहते हैं जो मशीन अंकगणितीय अनुकरण करें। मैं विस्तृत कर सकता हूं, लेकिन यदि आप इसके लिए एक नया प्रश्न खोले हैं तो यह साइट पर आने वाले अन्य लोगों के लिए उपयोगी होगा। –

उत्तर

17

Emacs-Lisp गतिशील रूप से टाइप की गई भाषा है। इसका मतलब है कि आपको रनटाइम पर टाइप टैग की आवश्यकता है। यदि आप संख्याओं के साथ काम करना चाहते हैं, तो आपको आमतौर पर उन्हें किसी प्रकार के टैग किए गए कंटेनर में पैक करना होगा जिसे आप इंगित कर सकते हैं (यानी "बॉक्स" उन्हें), क्योंकि रनटाइम पर मशीन पूर्णांक से पॉइंटर को अलग करने का कोई तरीका नहीं है बिना किसी टैगिंग योजना के।

दक्षता कारणों से, अधिकांश लिस्प कार्यान्वयन इसलिए कच्चे पॉइंटर्स का उपयोग नहीं करते हैं, लेकिन मुझे लगता है कि मुझे वर्णक कहा जाता है। ये वर्णनकर्ता आमतौर पर एक एकल मशीन शब्द होते हैं जो एक पॉइंटर, एक अनबॉक्स किए गए नंबर (एक तथाकथित फ़िक्सनम) का प्रतिनिधित्व कर सकता है, या कई अन्य हार्ड-कोडित डेटा संरचनाओं में से एक (यह अक्सर एनआईएल और विपक्षी कोशिकाओं को एन्कोडिंग करने योग्य है, उदाहरण के लिए)।

अब, जाहिर है, यदि आप टाइप टैग जोड़ते हैं, तो आपके पास संख्या के लिए 32 बिट्स शेष नहीं हैं, इसलिए आपको एमआईटी योजना के रूप में 26 बिट्स या इमाक्स या किसी अन्य के रूप में 2 9 बिट्स के साथ छोड़ दिया गया है बिट्स की संख्या जिसे आपने टैगिंग के लिए उपयोग नहीं किया था।

विभिन्न गतिशील भाषाओं के कुछ कार्यान्वयन फ़िक्समम्स के लिए एकाधिक टैग आरक्षित करते हैं ताकि वे आपको 30-बिट या 31-बिट फ़िक्समम्स दे सकें। एसबीसीएल सामान्य लिस्प का एक कार्यान्वयन है जो does this है। मुझे लगता है कि इस कारण की जटिलता इमाक्स के लिए इसके लायक नहीं है। टेक्स्ट एडिटर में 2 9-बिट फिक्सनम अंकगणित के विपरीत आपको 30-बिट फ़िक्सनम अंकगणितीय के रूप में कितनी बार तेज़ी से 30-बिट फ़िक्सनम अंकगणित की आवश्यकता होती है जो अपने लिस्प कोड को मशीन कोड में संकलित नहीं करता है (या करता है? मुझे याद नहीं है, वास्तव में) ? क्या आप Emacs-Lisp में एक वितरित.net क्लाइंट लिख रहे हैं? सामान्य लिस्प के लिए बेहतर स्विच, फिर!;)

7

शेष 3 बिट्स को लिस्प दुभाषिया द्वारा झंडे के रूप में उपयोग किया जाता है। (आप 64-बिट मशीन के लिए Emacs संकलित करके बड़े पूर्णांक प्राप्त कर सकते हैं।)

0

यह केवल 32 बिट आर्किटेक्चर के लिए सच है, और बिल्ड विकल्पों के आधार पर बदला जा सकता है। अन्य बिट्स का उपयोग बुनियादी डेटा संरचनाओं को टैग करने के लिए किया जाता है।

आप 64-बिट बिल्ड का उपयोग कर सकते हैं जिसमें बड़े पूर्णांक हैं, और मनमाने ढंग से बड़े पूर्णांक अंकगणितीय के लिए पैकेज हैं।

या, आप सिर्फ एक शब्दाडंबरपूर्ण सवाल गुस्सा और महत्वपूर्ण बात करने की कोशिश कर पूछ रहे हैं ...

1

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

आप क्यों देखभाल करते हैं कि एलिसप फ़िक्सनम कितना बड़ा है? आप विशाल फाइलें खोल सकते हैं जैसा कि यह है।

3

अन्य तीन बिट्स ऑब्जेक्ट के प्रकार के टैग के रूप में उपयोग किए जाते हैं। उदाहरण के लिए K-Machine Sparc, Alpha, Burroughs, और: यह बहुत प्रचलित है कि सीपीयू आर्किटेक्चर की एक संख्या कम से कम कुछ उनके निर्देश सेट में टैग पूर्णांकों के लिए समर्थन शामिल हुआ करता था। आजकल हम अतिरिक्त हार्डवेयर समर्थन के बिना टैग के साथ लिस्प रनटाइम सौदे को जाने देते हैं। यदि आप इतिहास का त्वरित अवलोकन प्राप्त करना चाहते हैं, तो मैं स्पार्क के बारे में पहला लिंक पढ़ने की सलाह दूंगा।

5

अन्य ने टिप्पणी की है कि क्यों फ़िक्समम्स केवल 2 9 बिट चौड़े हैं। लेकिन यदि आप प्रोग्रामर के कैलकुलेटर चाहते हैं, तो calc देखें। यह मनमाना-परिशुद्धता पूर्णांक, मैट्रिक्स संचालन, यूनिट रूपांतरण, जीनप्लॉट, सांख्यिकीय कार्यों, वित्तीय कार्यों, वैज्ञानिक कार्यों, आरपीएन और बीजगणितीय नोटेशन, सूत्र सरलीकरण के माध्यम से ग्राफिक्स प्रदान करता है ... और यह पहले से ही Emacs का हिस्सा है, इसलिए शुरू करने के लिए, "कैल्क" के लिए जानकारी नोड और ट्यूटोरियल पर शुरू करें।

1

मैं प्रोग्रामर के कैलक्यूलेटर के रूप में सामान्य लिस्प दुभाषिया सीएलआईएसपी का उपयोग करता हूं। कॉमन लिस्प में सैनेस्ट नंबर हैंडलिंग है जिसे मैंने किसी भी प्रोग्रामिंग भाषा में देखा है; सबसे विशेष रूप से, इसमें मनमानी आकार, यानी bignums, साथ ही तर्कसंगत संख्या के पूर्णांक हैं। इसमें मनमानी संख्या अड्डों और बिग्नम्स के लिए बिटवाई फंक्शन में इनपुट भी है। यदि आप Emacs के भीतर से गणना करना चाहते हैं, तो आप एक एम-एक्स खोल में सीएलआईएसपी चला सकते हैं। बोनस के रूप में, सिंटैक्स लगभग उसी तरह होता है जैसा आप Emacs Lisp में उपयोग करेंगे।

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