UNIX / POSIX सिस्टम कॉलिंग इतनी अवैध क्यों हैं?


43

ऐसे अनछुए सिस्टम कॉल नामों का उपयोग करने का क्या कारण है, जैसे timeऔर के creatबजाय getCurrentTimeSecsऔर createFile, शायद यूनिक्स पर अधिक उपयुक्त हैं get_current_time_secsऔर create_file। जो मुझे अगले बिंदु पर लाता है: किसी cfsetospeedको ऊंट मामले के बिना या इसे पढ़ने योग्य बनाने के लिए कम से कम अंडरस्कोर क्यों चाहिए ? बेशक कॉल में अधिक वर्ण होंगे लेकिन हम सभी जानते हैं कि कोड की पठनीयता अधिक महत्वपूर्ण है?


42
क्योंकि वे हंगेरियन नोटेशन, ऊंट केस, सांप के मामले में दशकों पहले आविष्कार किए गए थे, और जैसे फैशनेबल बन गए थे। इसके अलावा, क्योंकि तब कंपाइलरों के पास बहुत कम संसाधन थे, और पहचानकर्ता नाम (IIRC) 8 वर्णों तक सीमित थे।
lcd047

3
@phresnel यह सुनिश्चित नहीं करता है कि आप फ़ाइल नाम और वैरिएबल आईडी के बीच क्या संबंध देखते हैं, लेकिन हाँ, मैं 8, 12 और 14. के बीच संकोच कर रहा था। हो सकता है कि वैरिएबल आईडी के लिए सीमा भी 14 थी। यह निश्चित रूप से 256+ नहीं था। अंकन के रूप में: कृपया "हमेशा" परिभाषित करें। क्या आर्मिनियस ने कैमलकेस शब्दों का उपयोग किया था ? शायद नहीं। AFAIR, हंगेरियन नोटेशन को विंडोज के लिए 1990 की शुरुआत में पेश किया गया था। CamelCase और sneak_case बाद में भिन्नताएं थीं। इससे पहले दोनों का इस्तेमाल किया गया था। मैं यह कह रहा हूं कि वे 1990 के दशक के मध्य में लोकप्रिय हुए हैं।
lcd047

6
@phresnel: ध्यान दें कि आपका लिंक पहले यूनिक्स फाइल सिस्टम की सीमाओं के बारे में बात करता है । जब थॉम्पसन, रिची एट अल। गया डिजाइनिंग यूनिक्स, वे करना पड़ा bootstrap मशीनों पर यूनिक्स कि यूनिक्स अभी तक नहीं चला था कि शायद और भी अधिक विवश वातावरण में, यानी।
DevSolar

11
आप यह भी पूछ सकते हैं कि वे जर्मन में क्यों नहीं लिखे गए हैं, क्योंकि यह निकटतम प्राकृतिक-भाषा सन्निकटन के बारे में है जिसके बारे में मैं सोच सकता हूं कि लंबे समय तक राक्षसी जावा ने प्रोग्रामर को स्वीकार करने के लिए सिखाया है ...
R ..

12
मुझे बहुत खुशी है कि यह इस तरह है। कल्पना कीजिए कि एक कैसे ls -la | grepदिखाई देगा: listAllHiddenAndNormalFiles() | globallySearchARegularExpressionAndPrint()
पौय जूल 10'15

जवाबों:


61

यह उस समय की तकनीकी बाधाओं के कारण है। POSIX मानक 1980 के दशक में बनाया गया था और UNIX को संदर्भित किया गया था, जो 1970 में पैदा हुआ था। उस समय कई सी कंपाइलर पहचानकर्ताओं तक सीमित थे जो 6 या 8 वर्ण लंबे थे, ताकि चर और फ़ंक्शन की लंबाई के लिए मानक तय हो सके नाम।

संबंधित सवाल:


5
मुझे नहीं लगता कि तकनीकी अड़चनें लागू होती हैं। आपके पास 6 बाइट्स से बड़ी फाइलें हो सकती हैं, आपके पास कोड की हजारों लाइनों के साथ प्रोग्राम हो सकते हैं; अमूर्त वाक्यविन्यास पेड़ सिर्फ छह स्तरों से अधिक गहरा है, और जिस तरह से प्रति स्तर अधिक नोड्स हैं। बस कारण से, 6 चरित्र की सीमा तकनीकी नहीं हो सकती है, बल्कि एक डिज़ाइन की गई है। और यह नहीं समझाता है कि "सृजन" "बनाने" से बेहतर क्यों है। इसके अलावा, क्या आप उन कई सी संकलक का नाम बता सकते हैं, जिनके बारे में आप बात करते हैं? आपका जवाब वास्तव में पढ़ता है जैसे "कहीं सुना है"।
१०:

41
@phresnel: वह फ़ाइल आकार, लाइनों की संख्या, या वाक्यविन्यास पेड़ की गहराई के बारे में बात नहीं कर रहा है। C भाषा के पुराने संस्करणों को आंतरिक लिंकेज वाले पहचानकर्ताओं के पहले 31 से अधिक वर्णों या बाहरी पहचानकर्ताओं के लिए 6 से अधिक रखने के लिए कंपाइलर्स और लिंकर्स की आवश्यकता नहीं थी । इस प्रकार, और इन शुरुआती टूलचिन में से कुछ के अलावा नहीं बताया जा सकता है। कारण यह था कि ये सिस्टम कुछ किलोबाइट के छोटे पैरों के निशान पर काम कर रहे थे । get_current_date()get_current_time()
DevSolar

34
लेकिन तुम सही हो creat()। केन थॉम्पसन से एक बार पूछा गया था कि यदि वह UNIX प्रणाली को फिर से डिज़ाइन कर रहे हैं तो वह क्या करेंगे। उनका जवाब: "मैं एक ई के साथ प्राणी पैदा करूंगा।"
DevSolar

8
@phresnel: केवल सीमित मेमोरी होना एक कठिन सीमा नहीं है। पहचानकर्ताओं की केवल एक सीमित गारंटीकृत समर्थित लंबाई होना । यदि आप केवल 6 महत्वपूर्ण वर्णों की गारंटी देते हैं, तो यदि आप अपने नमक के लायक हैं तो आप इसके साथ काम कर रहे हैं।
DevSolar

6
FWIW, पुराने फोरट्रान मानक सीमित 6 वर्णों की पहचान करते हैं। से इस पुस्तक : "। एक पहचानकर्ता तथ्य यह है कि छह वर्ण एक आईबीएम 704 शब्द में निरूपित किया जा सकता की वजह से उपजी में छह पात्रों में से फोरट्रान नियम" मैं सी के लिए नहीं बोल सकता, लेकिन मुझे लगता है कि सीमा एक बहुत ही मूल (या शायद, समान मूल) है
tpg2114

26

dr01 सही है, लेकिन एक और कारण भी है - प्रयोज्य। दिन में वापस, आपके पास टाइप करने के लिए कीबोर्ड जैसा आरामदायक कुछ नहीं था। यदि आप भाग्यशाली थे, तो आपके पास पुराने स्कूल के टाइपराइटर के समान कुछ था। यदि आप अशुभ थे, तो आपको उन प्रणालियों से निपटना होगा जिन्हें संचालित करने के लिए वास्तविक भौतिक कार्य की आवश्यकता होती है (जैसा कि, "कुंजी" को दबाने के लिए बहुत अधिक बल लिया गया था), या आपने मैन्युअल रूप से एक कार्ड में छेद छिद्रित किया था।

इसका मतलब यह था कि 6-8 वर्ण सीमा के भीतर भी, आपने अपने आदेशों को यथासंभव कम रखने की कोशिश की। इसलिए आपके पास lsहै list, और creatइसके बजाय create। उस युग का कोड चर की तरह भरा है a, xऔर i- और निश्चित रूप से, x2और दोस्तों। टाइपिंग बहुत काम की थी - आज, आप listIndex"टाइपिंग" से जितना इस्तेमाल करते हैं, उससे कम टाइपिंग करते हैं i- और यह अब और भी धीमा नहीं है (विशेष रूप से ऑटो-पूर्णता जैसी अतिरिक्त तकनीकों के साथ)।

असली सवाल यह है - इतने यूनिक्स मुहावरे क्यों बने रहते हैं, हालांकि वे अब वांछनीय नहीं हैं?


23
दिन मेरी गिरी से बदल जाता है timeकरने के लिए getCurrentTimeSecsया ऐसा ही कुछ, मैं सिर्फ बंद उन्नयन यह करेंगे। यहां तक ​​कि मेरे आरामदायक कीबोर्ड और हाल के हार्डवेयर के साथ, ये नाम बेहद सुविधाजनक और सरल हैं (सादगी UNIX के मूल सिद्धांतों में से एक है)। मैं वास्तव में इस तरह के जावा / सी # -स्टाइल को सी भाषा में नाम देने की आवश्यकता महसूस नहीं करता हूं, अकेले एक लिनक्स कर्नेल में। IMO, कर्नेल डेवलपर या UNIX डेवलपर के दृष्टिकोण से, ये मुहावरे अवांछनीय के करीब नहीं हैं ।
जॉन डब्ल्यूएच स्मिथ

11
@Benjoyo unRootlyLongNamed.Packaged.nonsensicalFunctionहै बदसूरत मेरे लिए, और मैं नहीं बल्कि यकीन है कि क्या यह कार्य करके करता होगा man 2 timeयह करने के लिए लगता है क्या में अनुमान से अधिक है।
मूरू

7
@Benjoyo खैर, जो कोई भी इस वातावरण के लिए उपयोग नहीं किया जाता है, वह पहली बार में सिस्टम कॉल का उपयोग करने वाला नहीं है, क्योंकि वे विशेष रूप से उन लोगों के लिए हैं जो हैं। (मानक) पुस्तकालय यहाँ दूसरों के लिए हैं। UNIX इन फैशनेबल डिज़ाइन "नियमों" का पालन नहीं करता है जो इसे पहली नज़र में आसानी से समझने योग्य बना देगा। जो लोग किसी डॉक्टर को देखे बिना इसका उपयोग करते हैं, वे बहुत परेशानी में हैं, और यूनिक्स समुदाय के कुछ लोग इस बात पर विचार करेंगे कि समस्या का समाधान किया जाए।
जॉन डब्ल्यूएच स्मिथ

4
@JohnWHSmith सुनिश्चित करें कि कर्नेल मोड डेवलपर्स अपने सिस्टम और इसके डॉक्स को जानेंगे लेकिन यह संक्षिप्त और नाम न बताने का कोई कारण नहीं है ।
बेनजोय

7
@JohnWHSmith एक नीच देव के रूप में जिन्होंने कभी केवल कर्नेल ड्राइवर लिखे और सार्थक नामों को पसंद किया जो संक्षिप्त नहीं हैं जो मुझे असहमत हैं। लेकिन यह ठीक है, क्योंकि यदि आप मूल गिट स्रोत कोड में उदाहरण के लिए देखते हैं, तो आप कम से कम एक कर्नेल देव से सहमत होंगे। यद्यपि यदि आप लिनुस को बताते हैं कि उसकी get_Xया remove_file_from_cache(मैं प्रस्ताव कर सकता हूं rmfc?) कर्नेल डेवलपर्स के लिए अवांछनीय है, तो कृपया इसे सार्वजनिक रूप से करें - मुझे उसकी प्रतिक्रिया देखना अच्छा लगेगा ।
वू जूल

22

अन्य उत्तरों के अलावा, मैं यह बताना चाहूंगा कि यूनिक्स को मल्टीिक्स, सीटीएसएस और अन्य समकालीन ऑपरेटिंग सिस्टम की प्रतिक्रिया के रूप में विकसित किया गया था, जो उनके नामकरण सम्मेलनों के बारे में काफी अधिक क्रियात्मक थे। आप इन OSes के लिए http://www.multicians.org/devdoc.html पर महसूस कर सकते हैं । उदाहरण के लिए, http://www.multicians.org/mspm-bx-1-00.htmlchange_name एक फ़ाइल का नाम बदलने के लिए कमांड के रूप में देता है ; यूनिक्स की तुलना करें mv

इसके अलावा, प्रिंसिपल कारण बहुत ही कम प्रणाली कॉल नाम कायम रहता है पिछड़े संगतता है। आप देखेंगे कि नए एपीआई अधिक स्पष्ट हैं; जैसे gettimeofdayऔर clock_gettimeसिर्फ के बदले time

(आज भी, लूप इंडेक्स के whateverIndexबजाय मेरी पुस्तक iमें एक स्वचालित कोड-समीक्षा विफलता है; ;-)


2
हाँ। जब LISP मशीनें UNIX से पहले होती हैं, तो यह हार्डवेयर क्षमताओं के बारे में तकनीकी तर्क को सुनती है। ज़रूर, UNIX मशीनें खरीदने के लिए सस्ती थीं , लेकिन यह इसके बारे में है। रखरखाव की लागत को जोड़ना (जो * * निक्स भूमि में निश्चित रूप से गिनती नहीं करता है) तब भी टेबल बदल गए, लेकिन यह वैसे भी एक प्रेरक तर्क नहीं था। (और हाँ, iएक सूचकांक के लिए ठीक है , जब आप कहते हैं, एक सरणी को पुनरावृत्त करना। निर्देशांक? उपयोग करें xऔर yकुछ क्रम का पता
लगाना

@ Luaan LISP मशीनें यूनिक्स की भविष्यवाणी नहीं करती हैं। आप विफल हुए।
20 नवंबर को पिज्‍डलेक्‍ट

@pizdelect यह तकनीकी रूप से सत्य है, लेकिन तकनीकी सत्य किसी पर तस्वीर लगाने का पर्याप्त कारण नहीं है।
zwol

@pizdelect क्षमा करें, मेरा मतलब था कि लिस्प ने UNIX (और C) से पहले की है। लेकिन LISP मशीनें अनिवार्य रूप से समकालीन थीं, यदि आप उनके वाणिज्यिक प्रभाव की तुलना करते हैं (UNIX की शुरुआत लगभग तीन साल की थी, लेकिन जब तक LISP मशीनें आईं, तब तक व्यावसायिक UNIX मशीनें अभी भी कुछ और दूर थीं; अधिकांश UNIX acia में थीं या थीं) बिना किसी सहारे के)। किसी भी मामले में, यह उस समय के सामान्य तकनीकी तर्कों की प्रतिक्रिया है, जो 80 के दशक में था, जब लोग वास्तव में UNIX मशीनों और LISPM के बीच निर्णय ले रहे थे, और वे गलत थे। यह माइक्रो-कंप्यूटरों के साथ बदल गया जो कि वैसे भी तेजी से LISP चला सकता है।
लुआं

10

डेनिस रिची ने खुद को सी के साथ एक बाधा बनाया कि यह किसी भी लिंकर सुविधाओं पर भरोसा नहीं करेगा जो कि फोरट्रान द्वारा भी आवश्यक नहीं थे। इसलिए बाहरी नामों पर 6 वर्ण की सीमा।


@downvoter आप इस बारे में डेनी रिची से सहमत नहीं हो सकते हैं, लेकिन उन्होंने यही किया। इस जवाब पर इसे बाहर निकालना निरर्थक है।
user207421
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.