क्या यह "एक समय में एक काम करना" है?
यह टिप्पणी एक सामान्य डिजाइन सिद्धांत के बारे में एक प्रश्न की तरह लगती है। अक्सर, इन के बारे में प्रश्न बहुत व्यक्तिपरक होते हैं, और हम एक उचित उत्तर लिखने में सक्षम नहीं होते हैं। चेतावनी दी है कि हम इस मामले में सवालों को बंद कर सकते हैं।
कभी-कभी हमारे पास मूल डिज़ाइन पसंद के लिए स्पष्टीकरण होता है, क्योंकि डेवलपर (ओं) ने उनके बारे में लिखा है। लेकिन मेरे पास इस सवाल का इतना अच्छा जवाब नहीं है।
cpइस तरह से क्यों बनाया गया है?
समस्या यह है कि यूनिक्स 40 साल से अधिक पुराना है।
यदि आप अभी एक नई प्रणाली बना रहे हैं, तो आप विभिन्न डिज़ाइन विकल्प चुन सकते हैं। लेकिन यूनिक्स को बदलने से मौजूदा स्क्रिप्ट्स टूट जाएंगी, जैसा कि अन्य उत्तरों में बताया गया है।
मौजूदा फ़ाइलों को चुपचाप अधिलेखित करने के लिए क्यों डिज़ाइन किया cp गया था ?
संक्षिप्त उत्तर है "मुझे नहीं पता" :-)।
समझ लें कि cpकेवल एक ही समस्या है। मुझे लगता है कि मूल कमांड प्रोग्रामों में से कोई भी फाइल को ओवरराइट करने या हटाने से सुरक्षित नहीं है। आउटपुट पुनर्निर्देशित करने पर शेल में एक समान समस्या होती है:
$ cat first.html > second.html
यह कमांड चुपचाप ओवरराइट भी करती है second.html।
मुझे यह सोचने में दिलचस्पी है कि इन सभी कार्यक्रमों को कैसे नया रूप दिया जा सकता है। इसके लिए कुछ अतिरिक्त जटिलता की आवश्यकता हो सकती है।
मुझे लगता है कि यह स्पष्टीकरण का हिस्सा है: शुरुआती यूनिक्स ने सरल कार्यान्वयन पर जोर दिया । इस बारे में अधिक विस्तृत विवरण के लिए, "उत्तर बेहतर है" देखें, इस उत्तर के अंत में जुड़ा हुआ है।
आप बदल सकते हैं > second.htmlतो यह एक त्रुटि के साथ बंद हो जाता है, अगर second.htmlपहले से मौजूद है। हालांकि, जैसा कि हम उल्लेख किया है, कभी कभी उपयोगकर्ता है किसी मौजूदा फ़ाइल को बदलना चाहते हैं। उदाहरण के लिए, वह एक जटिल कमांड का निर्माण कर सकती है, कई बार कोशिश कर रही है जब तक कि वह वह नहीं चाहती जो वह चाहती है।
rm second.htmlयदि उसे जरूरत है तो उपयोगकर्ता पहले भाग सकता है। यह एक अच्छा समझौता हो सकता है! इसके अपने कुछ संभावित नुकसान हैं।
- उपयोगकर्ता को फ़ाइल नाम दो बार लिखना होगा।
- इस्तेमाल करने में भी लोगों को बहुत परेशानी होती है
rm। इसलिए मैं और rmभी सुरक्षित बनाना चाहूंगा । पर कैसे? अगर हम बनाने के rmप्रत्येक फ़ाइल नाम दिखाने के लिए और इस बात की पुष्टि करने के लिए कहें, वह अब लिखने के लिए है तीन के बजाय एक के आदेशों की तर्ज। इसके अलावा, अगर उसे अक्सर ऐसा करना पड़ता है, तो वह एक आदत में पड़ जाएगी और बिना सोचे-समझे पुष्टि करने के लिए "y" टाइप कर देगी। तो यह बहुत कष्टप्रद हो सकता है, और यह अभी भी खतरनाक हो सकता है।
एक आधुनिक प्रणाली पर, मैं कमांड को स्थापित करनेtrash और rmजहां संभव हो , इसके बजाय इसका उपयोग करने की सलाह देता हूं । कचरा संग्रहण की शुरूआत एक एकल-उपयोगकर्ता ग्राफिकल पीसी के लिए एक महान विचार था ।
मुझे लगता है कि मूल यूनिक्स हार्डवेयर - सीमित रैम और डिस्क स्थान, धीमी प्रिंटर पर प्रदर्शित आउटपुट के साथ-साथ सिस्टम और विकास सॉफ़्टवेयर की सीमाओं को समझना भी महत्वपूर्ण है ।
ध्यान दें कि मूल यूनिक्स में टैब पूरा नहीं था , एक rmकमांड के लिए फ़ाइल नाम में जल्दी भरने के लिए । (इसके अलावा, मूल बॉर्न शेल में कमांड इतिहास नहीं है, जैसे कि जब आप ऊपर तीर कुंजी का उपयोग करते हैं bash)।
प्रिंटर आउटपुट के साथ, आप लाइन पर आधारित संपादक का प्रयोग करेंगे ed। यह दृश्य पाठ संपादक की तुलना में सीखना कठिन है। आपको कुछ वर्तमान लाइनें प्रिंट करनी होंगी, यह तय करना होगा कि आप उन्हें कैसे बदलना चाहते हैं, और एक एडिट कमांड टाइप करें।
उपयोग करना > second.htmlथोड़ा सा है जैसे लाइन-एडिटर में कमांड का उपयोग करना। इसका प्रभाव वर्तमान स्थिति पर निर्भर करता है। (यदि second.htmlपहले से मौजूद है, तो इसकी सामग्री को छोड़ दिया जाएगा)। यदि उपयोगकर्ता वर्तमान स्थिति के बारे में निश्चित नहीं है, तो उसे चलने lsया ls second.htmlपहले होने की उम्मीद है ।
एक डिजाइन सिद्धांत के रूप में "सरल कार्यान्वयन"
यूनिक्स डिजाइन की एक लोकप्रिय व्याख्या है, जो शुरू होती है:
कार्यान्वयन और इंटरफ़ेस दोनों में डिज़ाइन सरल होना चाहिए। कार्यान्वयन के लिए इंटरफ़ेस की तुलना में सरल होना अधिक महत्वपूर्ण है। सादगी एक डिजाइन में सबसे महत्वपूर्ण विचार है।
...
गैब्रियल ने तर्क दिया कि "वॉर्स इज बेटर" एमआईटी दृष्टिकोण की तुलना में अधिक सफल सॉफ्टवेयर का उत्पादन किया है: जब तक कि प्रारंभिक कार्यक्रम मूल रूप से अच्छा है, शुरू में इसे लागू करने में बहुत कम समय और प्रयास लगेगा और नई स्थितियों के अनुकूल होना आसान होगा। उदाहरण के लिए, नई मशीनों के लिए सॉफ्टवेयर को पोर्ट करना इस तरह से बहुत आसान हो जाता है। इस प्रकार इसका उपयोग तेजी से फैलेगा, इससे पहले कि [बेहतर] कार्यक्रम को विकसित करने और तैनात करने का मौका हो (पहले-प्रस्तावक लाभ)।
https://en.wikipedia.org/wiki/Worse_is_better