लिटिल एंडियन जीता है?


34

जब हाल ही में बिग बनाम लिटिल एंडियन लड़ाई के बारे में पढ़ाते हुए, एक छात्र ने पूछा कि क्या यह व्यवस्थित हो गया है, और मुझे एहसास हुआ कि मुझे नहीं पता था। विकिपीडिया लेख को देखते हुए , ऐसा लगता है कि सबसे लोकप्रिय वर्तमान ओएस / वास्तुकला जोड़े लिटिल एंडियन का उपयोग करते हैं लेकिन यह कि इंटरनेट प्रोटोकॉल पैकेट हेडर में संख्यात्मक मानों को स्थानांतरित करने के लिए बिग एंडियन को निर्दिष्ट करता है। क्या यह वर्तमान स्थिति का अच्छा सारांश होगा? क्या वर्तमान नेटवर्क कार्ड या सीपीयू बाइट ऑर्डर को बदलने के लिए हार्डवेयर समर्थन प्रदान करते हैं?

जवाबों:


25

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

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

मेरा सामान्य संदेह यह है कि ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग एंडियन की देखभाल के अंत की शुरुआत थी क्योंकि उपयोगकर्ता से एक अच्छा OO सिस्टम छिपाने कार्यान्वयन विवरण में पहुंच और अमूर्तता की परतें। चूंकि कार्यान्वयन में एंडियनस शामिल है, इसलिए लोगों को यह स्पष्ट कारक नहीं होने की आदत है।

परिशिष्ट: zxcdw उल्लेख किया जा रहा पोर्टेबिलिटी चिंता का विषय है। हालांकि, पिछले 20 वर्षों में प्रतिशोध के साथ क्या हुआ है? प्रोग्रामिंग मशीनें आभासी मशीनों पर निर्मित। निश्चित रूप से वर्चुअल मशीन एंडियननेस मायने रखती है, लेकिन इसे उस भाषा के लिए बहुत संगत बनाया जा सकता है जहां यह मूल रूप से एक गैर-मुद्दा है। केवल वीएम कार्यान्वयनकर्ताओं को पोर्टेबिलिटी के दृष्टिकोण से एंडियननेस के बारे में चिंता करना होगा।


2
अभी भी बहुत सारे प्रासंगिक डोमेन हैं जिनमें यह मायने रखता है, उदाहरण के लिए किसी भी प्रकार का पोर्टेबल कोड लिखते समय । वास्तव में, जहां यह संभवतया कोई फर्क नहीं पड़ता है जब गैर पोर्टेबल कोड लिखना होता है जो एक मंच से जुड़ा होता है।
zxcdw

@zxcdw जो हमें सीधे वर्चुअल मशीन भाषाओं की सेना की ओर ले जाता है ... मैंने ऐसा नहीं सोचा था।
वर्ल्ड इंजीनियर

आपका परिशिष्ट पूरी तरह से सच नहीं है (और न ही मैं @zxcdw से सहमत हूं): एंडियननेस केवल तभी मायने रखता है जब मल्टीबाइट पूर्णांक और बाइट धाराओं के बीच अनुवाद करते हैं, और यह एक समस्या बन जाती है जब यह अंतर्निहित रूप से किया जाता है और प्लेटफार्मों के बीच भिन्न होता है। अधिकांश आधुनिक भाषाएं (चाहे वीएम-आधारित हों या नहीं) आपको शायद ही कभी ऐसा करने से पोर्टेबिलिटी प्राप्त होती है (एक अपारदर्शी डेटाटाइप के रूप में पूर्णांक के साथ), और फिर अंत में या तो मंच के स्वतंत्र, या स्पष्ट रूप से प्रोग्रामर द्वारा चुना गया है।
माइकल बोर्गवर्ड्ट


2
@zxcdw - असेंबलर में भी, आपको हमेशा एंडियन ऑर्डर को जानने की जरूरत नहीं है। उदाहरण के लिए, एक बार में एक बाइट को निर्दिष्ट करने की आवश्यकता नहीं होती है। स्थिति कुछ हद तक सी में क्रमबद्धता की एक निश्चित शैली के समान है - x & 0xFFहमेशा आपको एंडियन ऑर्डर करने के बावजूद कम से कम महत्वपूर्ण बाइट देता है (आपके बाइट्स प्रत्येक 8 बिट्स हैं) क्योंकि आपने उन बिट्स को निर्दिष्ट किया है जिन्हें आप उनके मूल्य में रुचि रखते हैं, स्मृति में उनकी सापेक्ष स्थिति नहीं।
स्टीव ३४

4

जब आप द्विआधारी डेटा सिस्टम को स्थानांतरित कर रहे हैं, तो केवल एंडियंस वास्तव में मायने रखता है।

प्रोसेसर की गति (और भंडारण की बहुत कम लागत) की प्रगति के साथ, द्विआधारी डेटा इंटरफेस दुर्लभ होते जा रहे हैं ताकि आप उन्हें एप्लिकेशन परत पर ध्यान न दें। आप या तो एक टेक्स्ट ट्रांसफर फॉर्मेट (XML / JSON) का उपयोग कर रहे हैं या आप डेटा लेयर एब्सट्रैक्शन का उपयोग कर रहे हैं जो आपके लिए अनुवाद का ध्यान रखता है (इसलिए आपको यह भी ध्यान नहीं है कि अनुवाद है)।

लेकिन जब आप बाइनरी डेटा लेयर पर कोडिंग करते हैं तो आप नोटिस करते हैं और यह बहुत महत्वपूर्ण है। उदाहरण के लिए जब मैंने VERITAS (अब सिमेंटेक) में काम किया था तो मैं सॉफ्टवेयर का निर्माण कर रहा था जो 25 विभिन्न हार्डवेयर प्लेटफार्मों पर बनाया जा रहा था (न केवल बड़े / छोटे एंडियन अन्य प्रकार के हैं)।


मेरे छात्रों ने मोबाइल फोन के लिए भी विकास किया है और क्लाउड कंप्यूटिंग का उपयोग किया है, इसलिए उन्हें पता है कि दुनिया पीसी और मैक नहीं है।
एलेन स्पार्टस

@ लोकी - मशीन के एंडियन को जानने के बिना इसे अनुक्रमित और डी-सीरियल करना संभव है। आपको केवल फाइलों / धाराओं / जो भी हो, में डेटा के बाइट-ऑर्डर को जानना होगा। उदाहरण के लिए, (char) (x & 0xFF)सी में आपको एंडियन मुद्दों के बावजूद कम से कम महत्वपूर्ण बाइट देता है, केवल यह मानते हुए कि एक बाइट 8 बिट है। मैंने उन मशीनों को जाने बिना द्विआधारी फ़ाइल स्वरूपों को डिज़ाइन किया है जो सॉफ़्टवेयर चलेंगे - मैंने मूल रूप से हार्डवेयर के बारे में परवाह किए बिना फ़ाइल प्रारूप के लिए एक एंडियन ऑर्डरिंग चुना।
स्टीव ३४

@ एस्पर्टस: निश्चित रूप से संभव है।
मार्टिन यॉर्क

1
@ स्टीव ३१४: हाँ, बिल्कुल। जब आप "बाइनरी डेटा लेयर" पर काम कर रहे होते हैं, तो आप अपने डेटा को क्रमबद्ध करने के लिए जो भी योजना बनाना चाहते हैं, उसे तैयार कर सकते हैं और उन योजनाओं को तैयार करना मुश्किल नहीं है जो कि आंशिक रूप से हैं। हालाँकि व्यक्तिगत रूप से मैं एक ऐसे पहिये का फिर से आविष्कार करने की जहमत नहीं उठाऊँगा जो 60 के दशक से निर्मित और अच्छी तरह से परीक्षण किया गया हो। ` H2nl और परिवार को देखें। कार्यों का यह परिवार उन चीजों को करने का एक पोर्टेबल (मानक) तरीका प्रदान करता है जो आपके प्लेटफ़ॉर्म के लिए इष्टतम है।
मार्टिन

4

नहीं, कोई नहीं जीता है। हम एक प्रजाति के रूप में हम उस क्रम को मानकीकृत करने में विफल रहे हैं जिसमें हम अपनी बाइट्स को स्टोर करते हैं, साथ ही हम जिस दिशा में लिखते हैं और जिस सड़क पर हम ड्राइव करते हैं उसके किनारे।

परिणामस्वरूप, जो कोई भी नेटवर्क या फ़ाइल में दो अलग-अलग प्रणालियों के बीच डेटा ट्रांसफर करना चाहता है, उसके पास अपने डेटा डंपिंग कोड के उचित प्रारंभिक संस्करण का केवल 50% मौका होता है जो उनके वातावरण में सही होता है, और भले ही यह काम करता हो , उनके ग्राहक में काम करने का 50% मौका है।

इससे निपटने के लिए आपको मंच विशिष्ट कार्यों को देखने की आवश्यकता है जैसे कि "htonl" जैसे नामों के साथ हेडर में नाम के साथ स्पष्ट रूप से 70 की तरह "arpa / inet.h" पर वापस डेटिंग करें, क्योंकि तब से स्थिति में सुधार नहीं हुआ है और शायद कभी नहीं। ।


10
यह पता चलता है कि हमने पूर्णांक बना लिया है - पूर्णांक का प्रतिनिधित्व करने के लिए 4 बाइट भेजने के बजाय, हम विशेष हेडर टेक्स्ट, एंगल ब्रैकेट, कीवर्ड और उन 4 बाइट्स के ASCII प्रतिनिधित्व के साथ स्वरूपित पाठ का एक ब्लॉक भेजते हैं। तब प्राप्त होने वाला अंत पूर्णांक पाठ प्राप्त करने के लिए प्रारूपण करता है और इसे 4 बाइट्स में परिवर्तित करता है। इसे प्रगति कहा जाता है, मुझे :-)
gbjbaanb

$ एप्टीट्यूड सर्च xml | wc -l 677
एंड्रयू वैगनर

1

अभी भी कोई सहमति नहीं है:

  • अधिकांश बड़े कंप्यूटर सिस्टम (सर्वर / डेस्कटॉप / लैपटॉप) वर्तमान में छोटे-एंडियन आर्किटेक्चर का उपयोग करते हैं
  • अधिकांश छोटे कंप्यूटर (टैबलेट / फोन) एक एंडियननेस-स्वतंत्र प्रोसेसर आर्किटेक्चर का उपयोग करते हैं, लेकिन ऑपरेटिंग सिस्टम चलाते हैं जो छोटे-एंडियन ऑर्डर का उपयोग करते हैं

इसलिए हार्डवेयर स्तर पर, LE कहीं अधिक सामान्य है। परंतु:

  • अधिकांश अंतर-कंप्यूटर संचार प्रोटोकॉल का उपयोग करके किया जाता है जो बड़े-एंडियन ऑर्डर को निर्दिष्ट करते हैं
  • दुनिया के सॉफ्टवेयर का एक बहुत बड़ा हिस्सा एक वर्चुअल प्लेटफॉर्म पर चलता है जो डेटा को बाहरी स्टोरेज में लिखे जाने पर बड़े-एंडियन ऑर्डर को डिफॉल्ट करता है।

दोनों आदेश भविष्य के लिए हमारे साथ होने जा रहे हैं।


अधिकांश बड़ी प्रणालियाँ (यानी, "बड़ा लोहा") आम तौर पर बड़े-एंडियन हैं। यही है, तथाकथित मिनी या मेनफ्रेम सिस्टम (जो बैकएंड प्रसंस्करण की एक बड़ी राशि बनाते हैं, हममें से अधिकांश को इसकी परवाह नहीं है।)

@jdv लेकिन सबसे बड़ी कंप्यूटिंग सिस्टम थोड़ा एंडियन x86-64 मशीन हैं, और वहां, प्रदर्शन मामले।
user877329

मुझे नहीं लगता कि कोई भी किसी भी मजबूत दावे कर सकता है कि वास्तुकला डिजाइनरों की ओर से सुविधा की तुलना में धीरज से अधिक कुछ भी है (जो भी वे प्राप्त करना चाहते हैं)। उस समय मैंने उस प्राचीन टिप्पणी पर, बड़ा लोहा बी.ई. लेकिन ऐसा इसलिए नहीं है क्योंकि यह बीई है, बल्कि इसलिए कि आर्किटेक्चर ऐसा ही होता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.