मुझे असेंबली भाषा का उपयोग करने से नफरत नहीं है, क्योंकि मैंने अपने ओएस कोर्स में कुछ लिखा है। लेकिन जाहिर है, विधानसभा भाषा में अमूर्तता का अभाव है, आपको विवरणों पर अधिक ध्यान देना होगा।
TAOCP लिखने के लिए असेंबली भाषा वास्तव में आवश्यक है?
मुझे असेंबली भाषा का उपयोग करने से नफरत नहीं है, क्योंकि मैंने अपने ओएस कोर्स में कुछ लिखा है। लेकिन जाहिर है, विधानसभा भाषा में अमूर्तता का अभाव है, आपको विवरणों पर अधिक ध्यान देना होगा।
TAOCP लिखने के लिए असेंबली भाषा वास्तव में आवश्यक है?
जवाबों:
वह न केवल MIXAL, MIX के लिए अपनी असेंबली भाषा का उपयोग करता है, बल्कि MIX, एक साधारण कंप्यूटर के लिए एक मॉडल (जैसे कि साठ के दशक में इस्तेमाल किया गया था)। यह शिक्षण के लिए एक मॉडल है जिसके साथ वह कुछ हद तक क्षेत्र में विकास से स्वतंत्र है।
यदि वह एक अन्य प्रोग्रामिंग भाषा का उपयोग करता है (जो एक, वैसे, क्या आपको लगता है कि अनुकूल होगा?), एनपीएल (निफ्टी प्रोग्रामिंग भाषा) का कहना है, उसे या तो MIX का उपयोग करने का विचार छोड़ना होगा या एक परिचय देना होगा पसंद के कुछ कंप्यूटर भाषा के संकलक (जो कि वह वॉल्यूम 1 में काम कर रहे हैं की तुलना में कहीं अधिक जटिल बात है)। इस तरह यह TAOCP नहीं बल्कि TAONPLP बन जाएगा। पहली पसंद इस तरह की पसंद से स्वतंत्र है और इस कारण से, प्रोग्रामिंग के बारे में कुछ किताबों की एक तरह से कालातीत होगी। दूसरा शायद अब तक भूल जाएगा ...
इसके अलावा, जब तक कंप्यूटर सिद्धांत रूप में काम कर रहा होता है, जैसा कि उसका MIX करता है, तब तक उस बात को ध्यान में रखना एक अच्छी बात है यदि आप वास्तव में सीखने में रुचि रखते हैं कि उनके साथ कैसे काम करें।
आप युवा व्हिपसैन्पर मुझे कभी-कभी विस्मित कर देते हैं। आप सभी का अक्सर कोई ना कोई सुराग होता है कि स्कूल शुरू होने से पहले कुछ भी हुआ हो। (मुझे भी यही समस्या है। मुझे समझने में लंबा समय लगा कि 15 साल वास्तव में बहुत कम समय था, एक वयस्क दृष्टिकोण से। यह लगभग हिरोशिमा से क्यूबा मिसाइल संकट तक की अवधि है। मेरे लिए, द्वितीय विश्व युद्ध बस है। इतिहास, लेकिन मेरे पिता ने इसमें संघर्ष किया, और मेरी मां इस दौरान जूनियर हाई रहीं।)
TAOCP, वॉल्यूम। 1, "मौलिक एल्गोरिदम", 1 संस्करण, पहली बार 1968 में छपा था। यह 45 साल पहले है। नुथ ने तब से पहले श्रृंखला की योजना बनाना शुरू किया।
संदर्भ के लिए: इंटेल 8086 पहली बार 1978 में, दस साल बाद दिखाई दिया। PASCAL भाषा पहली बार 1971 में सामने आई; जेन्सेन और विर्थ की पुस्तक, भाषा के दूसरे संस्करण के बारे में, 1974 में सामने आई। C का प्रारंभिक विकास 1969-1973: K & R 1978 में प्रकाशित हुआ था।
नूथ ने इस क्षेत्र को कवर करने के लिए श्रृंखला का इरादा किया। उन्होंने चिकित्सकों के लिए उपयोगी होने के लिए स्टाइल, THEN सेट किया। उन्होंने कभी यह उम्मीद नहीं की कि श्रृंखला काफी हद तक उनके जीवन का काम बन जाएगी, या इसके लेखन के लिए जो संभवत: आधी शताब्दी से अधिक हो जाएगा जब वह अंत में समाप्त हो जाएगा।
असेंबली भाषा यकीनन आज उतनी महत्वपूर्ण नहीं है जितनी तब थी, लेकिन जावा / सी ++ / जावास्क्रिप्ट / पायथन / पर्ल मावेंस की तुलना में यह अभी भी बहुत महत्वपूर्ण है कि आप सभी को विश्वास है।
अब मेरे लॉन से निकलें!
नूथ प्रीफेस में अपने तर्क पर चर्चा करता है। मैं बस कुछ बिट्स और टुकड़े बोली हूँ:
... मुझे यह तय करने की आवश्यकता थी कि क्या बीजगणित की भाषा जैसे कि ALGOL या FORTRAN का उपयोग करें या इस उद्देश्य के लिए मशीन-उन्मुख भाषा का उपयोग करें। शायद आज के कई कंप्यूटर विशेषज्ञ मशीन-उन्मुख भाषा का उपयोग करने के मेरे निर्णय से असहमत होंगे, लेकिन मुझे यकीन हो गया है कि निम्नलिखित कारणों से यह निश्चित रूप से सही विकल्प था:
- बीजगणितीय भाषाएं यहां पर विचार की गई ग़ैर-समरूप समस्याओं की तुलना में संख्यात्मक समस्याओं के लिए अधिक अनुकूल हैं। [...]
- ... मशीन-उन्मुख भाषा में लिखने से, प्रोग्रामर बहुत अधिक कुशल विधि का उपयोग करेगा; यह वास्तविकता के बहुत करीब है।
- जिन कार्यक्रमों की हमें आवश्यकता है, कुछ अपवादों के साथ, बल्कि सभी कम ...
- एक व्यक्ति जो कंप्यूटर में लापरवाही से अधिक रुचि रखता है, उसे मशीन भाषा में अच्छी तरह से प्रशिक्षित किया जाना चाहिए ...
- कुछ मशीन भाषा वैसे भी आवश्यक होगी ...
हालांकि वह इसे सीधे इंगित नहीं करता है, मुझे लगता है कि उसका ALGOL और FORTRAN का उल्लेख एक और समस्या की ओर इशारा करता है जिसे वह टालता है जो अधिक महत्वपूर्ण हो सकता है। मान लें कि उसने अल्गोल को चुना था (स्पष्ट रूप से वैसे भी फोरट्रान की तुलना में गैर-संख्यात्मक कार्यक्रमों के लिए बेहतर है)। मैं बताता हूं कि अल्गोल आज के अधिकांश प्रोग्रामर के लिए और भी अधिक विदेशी होंगे, जो उन्होंने जिस विधानसभा भाषा को चुना था।
तीसरे संस्करण के लिए, उन्होंने आधुनिक प्रोसेसर के साथ अधिक निकटता के लिए मिक्स को फिर से डिज़ाइन किया, और इसके लिए कोड को फिर से लिखना पड़ा। हालाँकि, मुझे लगता है कि उसने उच्च स्तर की भाषा का उपयोग किया था, फिर से लिखना काफी हद तक अधिक होगा - और उसके द्वारा दिए गए सभी कारण भी बने रहेंगे।
नुथ ने अपने तर्क को भी अद्यतन किया है :
मशीन की भाषा क्यों है?
कई पाठकों को यह सोचने में कोई संदेह नहीं है, `` क्यों नथ एक उच्च-स्तरीय प्रोग्रामिंग भाषा से चिपके रहने के बजाय मिक्स को दूसरी मशीन से बदल देता है? इन दिनों शायद ही कोई असेंबलर इस्तेमाल करता हो। ''
ऐसे लोग अपनी राय के हकदार होते हैं, और उन्हें मेरी किताबों के मशीन-भाषा के हिस्सों को पढ़ने की ज़रूरत नहीं है। लेकिन मशीन भाषा के कारण जो मैंने 1960 के दशक की शुरुआत में लिखी गई वॉल्यूम 1 की प्रस्तावना में दिए थे, आज भी मान्य हैं:
- मेरी पुस्तकों में से एक प्रमुख लक्ष्य यह दिखाना है कि मशीनों में उच्च-स्तरीय निर्माण वास्तव में कैसे लागू किए जाते हैं, न कि केवल यह दिखाने के लिए कि उन्हें कैसे लागू किया जाता है। मैं कोरटीन लिंकेज, ट्री स्ट्रक्चर्स, रैंडम नंबर जनरेशन, हाई-प्रिसिजन एरिथमेटिक, रेडिक्स कन्वर्सेशन, डेटा की पैकिंग, कॉम्बीनेटरियल सर्चिंग, रिकर्सन आदि को जमीन से समझाता हूं।
- मेरी पुस्तकों में आवश्यक कार्यक्रम आम तौर पर इतने कम होते हैं कि उनके मुख्य बिंदुओं को आसानी से समझा जा सकता है।
- जो लोग कंप्यूटर में लापरवाही से अधिक रुचि रखते हैं, उन्हें कम से कम कुछ अंदाजा होना चाहिए कि अंतर्निहित हार्डवेयर कैसा है। अन्यथा वे जो कार्यक्रम लिखते हैं वे बहुत अजीब होंगे।
- किसी भी मामले में मशीन भाषा आवश्यक है, जैसा कि मेरे द्वारा वर्णित सॉफ्टवेयर प्रोग्रामों में से कई का उत्पादन है।
- मशीन भाषा में सॉर्टिंग और खोज के लिए एल्गोरिदम जैसे बुनियादी तरीकों को व्यक्त करना कैश और रैम आकार और अन्य हार्डवेयर विशेषताओं (मेमोरी स्पीड, पाइपलाइनिंग, कई मुद्दे), लुभावनी बफ़र्स, कैश ब्लॉक के आकार के प्रभावों का सार्थक अध्ययन करना संभव बनाता है। आदि) विभिन्न योजनाओं की तुलना करते समय।
इसके अलावा, अगर मैंने उच्च-स्तरीय भाषा का उपयोग किया, तो यह किस भाषा में होनी चाहिए? 1960 के दशक में मैंने शायद अल्गोल डब्ल्यू को चुना था; 1970 के दशक में, फिर मुझे पास्कल का उपयोग करके अपनी पुस्तकों को फिर से लिखना पड़ा; 1980 के दशक में, मैंने निश्चित रूप से C को सब कुछ बदल दिया होगा; 1990 के दशक में, मुझे C ++ और फिर संभवतः जावा में जाना होगा। 2000 के दशक में, फिर भी किसी अन्य भाषा में कोई संदेह नहीं होगा। मैं अपनी किताबों को फिर से लिखने का समय नहीं दे सकता क्योंकि भाषाएं फैशन के अंदर और बाहर जाती हैं; भाषाएं मेरी पुस्तकों की बात नहीं हैं, बल्कि यह है कि आप अपनी पसंदीदा भाषा में क्या कर सकते हैं। मेरी किताबें कालातीत सच्चाइयों पर केंद्रित हैं।
इसलिए मैं TAOCP में उच्च-स्तरीय भाषा के रूप में अंग्रेजी का उपयोग करना जारी रखूंगा, और मैं यह इंगित करने के लिए निम्न-स्तरीय भाषा का उपयोग करना जारी रखूंगा कि वास्तव में मशीनें कैसे गणना करती हैं। पाठक जो केवल एल्गोरिदम देखना चाहते हैं, जो पहले से ही एक प्लग-इन तरीके से पैक किए गए हैं, एक फैशनेबल भाषा का उपयोग करते हुए, अन्य लोगों की पुस्तकों को खरीदना चाहिए।
अच्छी खबर यह है कि आरआईएससी मशीनों के लिए प्रोग्रामिंग सुखद और सरल है, जब आरआईएससी मशीन में एक अच्छा साफ डिजाइन है। इसलिए मुझे मुख्य बिंदुओं से विचलित करने वाले, बहुत कम विवरणों को संग्रहीत करने की आवश्यकता नहीं है। इस लिहाज से MMIX, MIX से काफी बेहतर होगा।