क्या कैरिज-रिटर्न चार अप्रचलित माना जाता है


26

मैंने एक ओपन सोर्स लाइब्रेरी लिखी है जो संरचित डेटा को पार्स करती है लेकिन जानबूझकर गाड़ी-वापसी का पता नहीं लगाती है क्योंकि मुझे यह बात दिखाई नहीं देती है। यह कम / कोई लाभ के लिए अतिरिक्त जटिलता और उपरि जोड़ता है।

मेरे आश्चर्य के लिए, एक उपयोगकर्ता ने एक बग प्रस्तुत किया जहां पार्सर काम नहीं कर रहा था और मुझे इस मुद्दे का कारण पता चला कि डेटा ने सीआरएफ लाइनिंग का उपयोग एलएफ या सीआरएलएफ के विपरीत किया था।

OSX Lix शैली लाइन-एंडिंग का उपयोग नहीं कर रहा है क्योंकि एक यूनिक्स-आधारित प्लेटफ़ॉर्म पर स्विच कर रहा है?

मुझे पता है कि नोटपैड ++ जैसे एप्लिकेशन हैं जहां सीआर के उपयोग के लिए लाइन एंडिंग को स्पष्ट रूप से बदला जा सकता है लेकिन मैं यह नहीं देखता कि कोई क्यों चाहता है।

क्या उन उपयोगकर्ताओं के सांख्यिकीय रूप से महत्वहीन प्रतिशत के लिए समर्थन को बाहर करना सुरक्षित है जो पुराने मैक ओएस स्टाइल लाइन-एंडिंग के लिए (जो भी कारण हो) तय करते हैं?

अद्यतन करें:

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

आखिरी OS जो CR स्टाइल लाइन एंडिंग के लिए सिस्टम-वाइड समर्थन प्रदान करता था, वह था OS OS 9 । विडंबना यह है कि एकमात्र अनुप्रयोग जो अभी भी इसे OSX में डिफ़ॉल्ट के रूप में उपयोग करता है, वह Microsoft Excel है।


21
"यह अतिरिक्त जटिलता और ओवरहेड जोड़ता है": मुझे लगता है कि अतिरिक्त जटिलता और ओवरहेड वास्तव में छोटे हैं।
जियोर्जियो

11
@EvanPlaice यह कम सिरदर्द और अधिक समय नहीं दे सकता है कि सीआर में प्लग करने के लिए आलसी होने के लिए आपको जानबूझकर छोड़ दिया गया है?
पीटर बी

11
"व्यवसाय के संदर्भ में अवसर की लागत बहुत अधिक है। सरल शब्दों में, मैं समय बर्बाद करने के लिए एक मृत मंच के लिए किनारे-मामले के समर्थन को जोड़ने की तुलना में अपने आलस्य को उचित ठहराने के कारण ढूंढूंगा।": व्यावसायिक शब्दों में, इसमें कम समय लगेगा। इस सुविधा की प्रासंगिकता की जांच के लिए यहां एक प्रश्न पोस्ट करने के लिए सीआर के समर्थन को लागू करें।
जियोर्जियो

4
@EvanPlaice सांस्कृतिक जड़ता पूरी तरह से अच्छा कारण है।
Pieter B

5
@EvanPlaice: इस प्रश्न को लिखने से पहले ही CRआपके कोडबेस में newlines के समर्थन में फावड़ा चलाने की तुलना में आपके पास पहले से अधिक समय है । (... और यदि आप दृढ़ता से विश्वास करते हैं कि यह मामला नहीं है, तो आपके पार्सर का डिज़ाइन बहुत व्यस्त होना चाहिए)
ZJR

जवाबों:


37

एक अच्छा अभ्यास है जहां आप "जो आप स्वीकार करते हैं उसमें उदार हैं , और जो आप भेजते हैं उसमें रूढ़िवादी हैं"

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

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

जब आप crलेक्सर को अगले वर्ण को देखते हुए देखते हैं और यदि यह एक है nl, तो newline को निगल लें और एक newline टोकन को फेंक दें, यदि अगला वर्ण nlएक newline टोकन नहीं है और जारी रखें।


23
@ जेडजेआर: डाक कानून खतरनाक है: मजबूती के सिद्धांत को लागू करते समय बहुत सावधान रहें, क्योंकि यह अक्सर बैकफायर करता है। Html पार्सिंग गड़बड़ हम अभी भी उस मानसिकता के लिए जिम्मेदार ठहराया जा सकता है। जब कोई प्रोग्राम विकृत इनपुट को स्वीकार करता है, तो परिणाम के रूप में उसका व्यवहार जल्द ही अपेक्षित हो जाता है और व्यवहार पर निर्भर हो जाता है , और बाद में कोई भी परिवर्तन जो विकृत इनपुट को अलग तरह से व्यवहार करता है, या बिल्कुल भी नहीं, जबकि तकनीकी रूप से सही होने पर, अक्सर दोषपूर्ण माना जाता है।
whatsisname

4
@whatsisname: मैं असहमत हूं। मुझे लगता है कि उत्पादन गुणवत्ता सॉफ्टवेयर मजबूत होना चाहिए। विकास टूलकिन्स को हालांकि इस तरह की मजबूती पर भरोसा करना चाहिए और केवल वैध आउटपुट का उत्पादन करना चाहिए। जिस HTML में गड़बड़ होती है, वह लगभग दो दशकों के खराब टूलिंग के कारण होता है, ब्राउजरों की शिथिलता के कारण नहीं।
बैक

2
@ back2dos: _ _ तो? खराब टूलींग ब्राउज़रों की सुविधा के कारण होता है।
अमरा

4
खराब टूलींग ब्राउज़र युद्ध का परिणाम है
शाफ़्ट फ्रीक

2
@ डिबकेक: विकृत इनपुट से निपटने के लिए केवल एक बड़ा इनपुट स्पेस मौजूद स्टेट स्पेस में जाता है और इस तरह उस पर कोई प्रभाव नहीं पड़ता है - बशर्ते आपके सॉफ्टवेयर में चिंताओं का एक अलग पृथक्करण हो।
back2dos

21

सीआर अप्रचलित नहीं है ("अब उत्पादित या उपयोग नहीं किया गया" के रूप में परिभाषित किया गया है)। आपने स्वयं इसका प्रमाण दिया है। यह शायद असामान्य है , लेकिन अप्रचलित नहीं है ।

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


13
+1 - आईएमओ, ओपी सीआर को "अप्रचलित" के रूप में लेबल करने की कोशिश कर रहा है ताकि उसके पास इसका समर्थन न करने का बहाना हो।
स्टीफन C

1
@StephenC मैं उस तथ्य को छिपाने की कोशिश नहीं कर रहा हूँ। ऐसा लगता है कि मैं वास्तव में नहीं है की जरूरत है एक बहाना है, मैं लेखक हूँ और इस तरह अंतिम बात कहने। मुद्दा यह है, यह एक दिलचस्प सवाल उठाता है।
इवान प्लाइस

18

आलस्य के बारे में: आपको संतुलन रखना होगा:

  • कोड बदलने का प्रयास ताकि सीआर सुरक्षित रूप से संभाला (और फिर इसके बारे में भूल जाएं)।

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

यह आपको तय करना है कि कौन सा रास्ता सबसे आसान है।


अच्छे अंक, समर्थन निश्चित रूप से एक समय लागत के साथ आता है। इस विशेष मामले के लिए 'बिक्री' एक मुद्दा नहीं है (यानी यह खुला स्रोत है) लेकिन बड़ी तस्वीर पर विचार करना सार्थक है। इसी तरह, मैं कोड में एक अपवाद भी फेंक सकता हूं जब एक सीआर को अमान्य / असमर्थित चरित्र का संकेत मिलता है।
इवान प्लाइस

7
@ इवान: बेशक यह खुला स्रोत है। यदि ऐसा नहीं होता, तो आपके बॉस ने आपको बताया होता है "मैं इस बात को नहीं मानता कि 'कोई भी' सीआर का उपयोग नहीं करता है! ग्राहक शिकायत कर रहे हैं। FIX IT!" : P यह OSS के बारे में एक बड़ी बात है जो मुझे परेशान करती है: उन वास्तविक मामलों पर ध्यान देने की कमी , जिनके बारे में उपयोगकर्ताओं ने शिकायत की है। आपको लगता है कि यह अप्रचलित है या नहीं, कोई अभी भी इसका उपयोग कर रहा है।
cHao

1
क्योंकि यह खुला स्रोत है, आप सभी उपयोगकर्ताओं को एक खुला पत्र लिख सकते हैं कि आप इसे ठीक करने के लिए किसी भी पैच को स्वीकार करेंगे।
rwong

1
@ ईवानप्लिस: यह "ध्यान है ... मुद्रा" चीज दोनों तरीकों से काम करती है। यदि आप चाहते हैं कि लोग आपके ऐप का उपयोग करें, तो इसे काम करना होगा, और इसे उनकी समस्या को हल करना होगा। एक टूटी-फूटी ऐप आलोचना करने के लिए प्रतिरक्षा नहीं है, क्योंकि यह मुफ़्त है। मैं यह नहीं कह रहा हूं कि आपको उन सभी चीजों को करने की ज़रूरत है जो उपयोगकर्ता पूछते हैं; आपको अपमानजनक अनुरोधों को खारिज करना चाहिए । लेकिन अगर आप वास्तविक उपयोगकर्ताओं की समस्याओं को हल नहीं करते हैं, तो आप उपयोगकर्ताओं को खो देते हैं।
cHao

1
@EvanPlaice: और वैसे, जब मेरा मतलब है "शिकायत", मेरा मतलब है "एक बग रिपोर्ट दर्ज करें कि क्या टूटा है और कैसे", सॉफ्टवेयर "कितना खराब है" के बारे में बेतरतीब ढंग से नहीं।
cHao

8

क्या उन उपयोगकर्ताओं के सांख्यिकीय रूप से महत्वहीन प्रतिशत के लिए समर्थन को बाहर करना सुरक्षित है जो पुराने मैक ओएस स्टाइल लाइन-एंडिंग के लिए (जो भी कारण हो) तय करते हैं?

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

यदि आप इस तरह से कुछ का समर्थन नहीं करते हैं, तो आपको कम से कम प्रलेखन ("यह एक बग" शैली नहीं है) में उल्लेख करना चाहिए और अपने उपकरण के साथ सरलतम संभव तरीके से काम करने के लिए फ़ाइलों को कैसे बदलना है ( dos2unixउदाहरण के लिए)।


2
+1 का उपयोग करते हुए विंडोज का उल्लेख करने के लिए CRLF- यह उस ओएस पर समाप्त होने वाली डिफ़ॉल्ट रेखा है। और .csv फ़ाइल के स्रोत की गारंटी देने का कोई तरीका नहीं है, इसलिए यह आसानी से विंडोज सिस्टम पर बनाया जा सकता है।

1
विंडोज में CRLF का उल्लेख करना प्रासंगिक नहीं है क्योंकि यदि आप LF को ब्रेक पॉइंट के रूप में पकड़ रहे हैं तो आप स्वचालित रूप से CRLF को बोनस के रूप में प्राप्त करेंगे। ओपी यह जानता है जैसा कि आप उसके पोस्ट के पाठ में देख सकते हैं।
डेविडेथेल

@davidethell हां, यह कैसे किया जाता है। वर्तमान में, CR वर्णों को चुपचाप अनदेखा कर दिया जाता है। हाथियों के बावजूद।
इवान प्लाइस

6

कई सीरियल डिवाइस हैं जो भेजे जाने CRसे पहले डेटा स्ट्रीम के अंत के रूप में भरोसा करते हैं ETX। यह एक ऐसा सम्मेलन है जो कभी खत्म नहीं होगा।


3

मैं अनुरोध को किसी भी सुविधा अनुरोध के रूप में मानूंगा जहां आपको लाभों के खिलाफ लागतों को तौलना होगा।

यदि वास्तव में एक व्यक्ति ने सीआर समर्थन के लिए कहा है, तो शायद यह आवश्यक नहीं है। नीचे दिए गए पुस्तक अध्याय को 37 संकेतों से देखें जहां वे कहते हैं कि आपको केवल बहुत लोकप्रिय सुविधा अनुरोधों के बारे में चिंता करनी चाहिए।

http://gettingreal.37signals.com/ch05_Forget_Feature_Requests.php


1
अंत में, एक अच्छा काउंटर-पॉइंट। अगर मैं दो जवाब चुन सकता हूं तो मैं इसे भी चुनूंगा।
इवान प्लाइस

1

MSDOS के बाद से MS OS एक संयोजन विभाजक के रूप में संयोजन CR + LF का उपयोग करता है (मुझे लगता है कि ज्यादातर मैट्रिक्स प्रिंटर की आवश्यकता होती है)।

तो, हाँ, यह एक बुमेर है, लेकिन आपको अभी भी शापित चीज़ के लिए समर्थन की आवश्यकता है।

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