ถ่านขนส่งคืน - พิจารณาว่าล้าสมัยหรือไม่


26

ฉันเขียนไลบรารีโอเพนซอร์ซที่แยกวิเคราะห์ข้อมูลที่มีโครงสร้าง แต่ตั้งใจออกจากการตรวจจับการรับคืนของการขนส่งเนื่องจากฉันไม่เห็นจุดนั้น มันเพิ่มความซับซ้อนและค่าใช้จ่ายเพิ่มเติมเพื่อผลประโยชน์เพียงเล็กน้อย / ไม่มีเลย

ด้วยความประหลาดใจของฉันผู้ใช้ส่งข้อผิดพลาดที่ parser ไม่ทำงานและฉันค้นพบสาเหตุของปัญหาคือข้อมูลที่ใช้ปลายสาย CR ตรงข้ามกับ LF หรือ CRLF

OSX ไม่ได้ใช้การสิ้นสุดไลน์สไตล์ LF ตั้งแต่เปลี่ยนไปใช้แพลตฟอร์มที่ใช้ระบบปฏิบัติการยูนิกซ์หรือไม่?

ฉันรู้ว่ามีแอปพลิเคชั่นเช่น Notepad ++ ซึ่งสามารถเปลี่ยนจุดสิ้นสุดของบรรทัดเพื่อใช้ CR ได้อย่างชัดเจน แต่ฉันไม่เห็นว่าทำไมใครต้องการ

จะปลอดภัยไหมที่จะไม่รวมการสนับสนุนสำหรับผู้ใช้จำนวนเปอร์เซ็นต์ที่ไม่มีนัยสำคัญทางสถิติที่ตัดสินใจ (ไม่ว่าจะด้วยเหตุผลใดก็ตาม) กับการสิ้นสุดไลน์สไตล์ Mac OS เก่า?

ปรับปรุง:

ในการชี้แจงการสนับสนุนการสิ้นสุดบรรทัด Windows (เช่น CRLF) ไม่จำเป็นต้องมีการรับรู้โทเค็น CR สำหรับวัตถุประสงค์ด้านประสิทธิภาพ lexer จะทำการจับคู่แบบต่อหน่วย ด้วยการละเว้นตัวอักษร CR เงียบ ๆ โทเค็น CRLF จะทำให้ LF ง่ายขึ้น ด้วยเหตุนี้โทเค็น CRLF เองจึงถูกพิจารณาว่าเป็นสิ่งผิดปกติในตัวของมันเองทั้งหมด แต่นั่นไม่ใช่สิ่งที่คำถามนี้เกี่ยวกับ

ระบบปฏิบัติการที่ผ่านมาว่าให้การสนับสนุนทั้งระบบสำหรับ CR สไตล์ปลายสายเป็นระบบปฏิบัติการ Mac OS 9 แดกดันมีเพียงแอปพลิเคชันเดียวที่ยังคงใช้เป็นค่าเริ่มต้นใน OSX คือ Microsoft Excel


21
"มันเพิ่มความซับซ้อนและค่าใช้จ่ายเพิ่มเติม": ฉันคิดว่าความซับซ้อนและค่าใช้จ่ายเพิ่มเติมนั้นเล็กมาก
Giorgio

11
@EvanPlaice มันจะไม่ทำให้ปวดหัวน้อยลงและมีเวลามากขึ้นที่จะขี้เกียจที่จะเพียงแค่เสียบ CR ที่คุณสนับสนุนออกไปอย่างตั้งใจ?
Pieter B

11
"ในแง่ธุรกิจค่าใช้จ่ายโอกาสสูงเกินไปในแง่ง่ายฉันควรหาเหตุผลที่จะพิสูจน์ความเกียจคร้านของฉันมากกว่าการเสียเวลาเพิ่มการสนับสนุนกรณีขอบสำหรับแพลตฟอร์มที่ตายแล้ว": ในแง่ธุรกิจมันต้องใช้เวลาน้อยลง ใช้การสนับสนุนสำหรับ CR มากกว่าโพสต์คำถามที่นี่เพื่อตรวจสอบความเกี่ยวข้องของคุณลักษณะนี้
จอร์โจ

4
@EvanPlaice ความเฉื่อยทางวัฒนธรรมเป็นเหตุผลที่ดีอย่างสมบูรณ์แบบ
Pieter B

5
@EvanPlaice: การเขียนคำถามนี้ทำให้คุณเสียเวลามากกว่าการตักขึ้นCRบรรทัดใหม่เพื่อสนับสนุนcodebase ของคุณ (... และถ้าคุณเชื่อมั่นอย่างนี้ไม่เป็นเช่นนั้นการออกแบบตัวแยกวิเคราะห์ของคุณจะค่อนข้างวุ่นวาย)
ZJR

คำตอบ:


37

มีการปฏิบัติที่ดีคุณจะอยู่ที่ไหนเป็น"เสรีนิยมในสิ่งที่คุณยอมรับและอนุรักษ์นิยมในสิ่งที่คุณส่ง"

กล่าวอีกนัยหนึ่งหากมีโอกาส (เล็ก ๆ น้อย ๆ แต่จะมี) ที่ใครบางคนจะให้คุณสิ้นสุดบรรทัด cr (และคาดว่าจะทำงานอย่างถูกต้อง) คุณจะต้องสนับสนุน

TBH ฉันไม่เห็นว่าการเพิ่มการสนับสนุน CR จะใช้เวลานานแค่ไหน

เมื่อคุณเห็น a crใน lexer มองดูตัวละครตัวต่อไปและถ้าเป็นก็ให้nlกลืนขึ้นบรรทัดใหม่แล้วปล่อยโทเค็นบรรทัดใหม่ถ้าตัวละครตัวต่อไปไม่ใช่nlเพียงแค่ปล่อยโทเค็น newline และดำเนินการต่อ


23
@ZJR: กฎหมาย postels เป็นสิ่งที่อันตราย: โปรดใช้ความระมัดระวังอย่างมากเมื่อใช้หลักการความทนทานเนื่องจากมีการเปลี่ยนกลับบ่อยครั้ง ความยุ่งเหยิงในการแยกวิเคราะห์ HTML ที่เรายังคงสามารถนำมาประกอบกับความคิดนั้น เมื่อโปรแกรมยอมรับอินพุตที่มีรูปแบบไม่ถูกต้องพฤติกรรมของผลลัพธ์จะถูกคาดหวังและขึ้นอยู่กับพฤติกรรมและการเปลี่ยนแปลงใด ๆ ในภายหลังที่จัดการอินพุตที่มีรูปแบบที่แตกต่างกันหรือไม่เลยในขณะที่ถูกต้องทางเทคนิค
whatsisname

4
@whatsisname: ฉันไม่เห็นด้วย ฉันคิดว่าซอฟต์แวร์คุณภาพการผลิตควรมีความทนทาน เครื่องมือในการพัฒนาควรไม่ย่อท้ออย่างยิ่งที่ต้องอาศัยความแข็งแกร่งดังกล่าวและให้ผลลัพธ์ที่ถูกต้องเท่านั้น ความยุ่งเหยิง HTML เกิดขึ้นจากการใช้เครื่องมือที่ไม่ดีมาเกือบสองทศวรรษไม่ใช่เพราะความอ่อนโยนของเบราว์เซอร์
back2dos

2
@ back2dos: _ _ งั้นเหรอ? เครื่องมือที่ไม่ดีเกิดจากการผ่อนปรนของเบราว์เซอร์
amara

4
การใช้เครื่องมือที่ไม่ดีเป็นผลมาจากสงครามเบราว์เซอร์
ratchet freak

2
@Dibbeke: การจัดการอินพุตที่มีรูปแบบไม่ถูกต้องเพียงแมปพื้นที่ป้อนข้อมูลที่ใหญ่กว่าไปยังพื้นที่ของรัฐที่มีอยู่และไม่มีผลกระทบใด ๆ กับมัน - หากซอฟต์แวร์ของคุณมีการแยกความกังวลที่เหมาะสม
back2dos

21

ไม่ CR ไม่ล้าสมัย (นิยามเป็น "ไม่ผลิตหรือใช้แล้ว") คุณเองได้ให้หลักฐานว่า บางทีมันก็เป็นเรื่องแปลกแต่ไม่ล้าสมัย

ในส่วนของ "มันปลอดภัยไหมที่จะไม่รวมการสนับสนุน" สำหรับ CR? อย่างที่คุณพูดมันไม่ใช่เรื่องของการสูญเสียยอดขายและคุณไม่สามารถรองรับการรวมตัวละครแปลก ๆ และรูปแบบไฟล์ในโลกและมีเพียงคุณเท่านั้นที่รู้ซอฟต์แวร์และฐานผู้ใช้ของคุณ ดังนั้นฉันจะบอกว่ามันจะปลอดภัยที่จะยกเว้นถ้าคุณมั่นใจว่าภาระการสนับสนุนที่จะไม่เพิ่ม (ตามที่ mouviciel อธิบาย) ไม่ได้มีค่ามากกว่าภาระเวลาของการเพิ่ม แต่หากไม่ทราบมากขึ้นเกี่ยวกับผลิตภัณฑ์และฐานผู้ใช้ฉันไม่แน่ใจว่าจะเจาะจงเฉพาะเจาะจงมากขึ้นอย่างไร


13
+1 - IMO ฝ่าย OP พยายามติดป้าย CR ว่า "ล้าสมัย" เพื่อให้เขามีข้อแก้ตัวที่ไม่สนับสนุน
Stephen C

1
@StephenC ฉันไม่ได้พยายามซ่อนความจริงนั้น ไม่ใช่ว่าฉันต้องการข้อแก้ตัวจริงๆฉันเป็นผู้แต่งและสุดท้ายก็พูดได้ ประเด็นก็คือมันทำให้เกิดคำถามที่น่าสนใจ
Evan Plaice

18

เกี่ยวกับความเกียจคร้าน: คุณต้องสมดุล:

  • ความพยายามในการเปลี่ยนรหัสเพื่อที่ CR จะได้รับการจัดการอย่างปลอดภัย

  • ความพยายามในการอธิบายให้ผู้ใช้ทราบว่าเหตุใดไฟล์ที่พวกเขาพอใจมานานหลายทศวรรษทำให้แอปของคุณทำงานล้มเหลวอย่างกระทันหันในการหาวิธีแก้ปัญหาที่พวกเขาสามารถใช้งานได้โดยไม่ทำให้ยอดขายลดลงและถามข้อโต้แย้ง

มันขึ้นอยู่กับคุณที่จะตัดสินใจว่าเส้นทางไหนที่ขี้เกียจที่สุด


ข้อดี: การสนับสนุนมาพร้อมกับค่าใช้จ่ายแน่นอน สำหรับกรณีนี้ 'ยอดขาย' ไม่ใช่ปัญหา (เช่นเป็นโอเพ่นซอร์ส) แต่มันก็คุ้มค่าที่จะพิจารณาภาพที่ใหญ่ขึ้น ในทำนองเดียวกันฉันสามารถโยนข้อยกเว้นในรหัสเมื่อพบ CR ระบุตัวละครที่ไม่ถูกต้อง / ไม่ได้รับการสนับสนุน
Evan Plaice

7
@Evan: แน่นอนว่ามันเป็นโอเพ่นซอร์ส ถ้ามันไม่ใช่เจ้านายของคุณจะบอกคุณว่า "ฉันไม่ได้พูดอะไรที่ว่า" ไม่มีใคร "ใช้ CR อีกต่อไป! ลูกค้ากำลังบ่น. แก้ไขมัน!" : P นี่เป็นเรื่องใหญ่เกี่ยวกับ OSS ที่ทำให้ฉันโกรธ: การขาดความสนใจในกรณีจริงที่ผู้ใช้ร้องเรียน ไม่ว่าคุณจะคิดว่ามันล้าสมัยหรือไม่ก็ตามมีบางคนยังคงใช้มันอยู่
cHao

1
เนื่องจากเป็นโอเพ่นซอร์สคุณสามารถเขียนจดหมายเปิดผนึกถึงผู้ใช้ทั้งหมดที่คุณจะยอมรับการแก้ไขใด ๆ เพื่อแก้ไข
ร. ต.

1
@EvanPlaice: "ความสนใจคือ ... สกุลเงิน" สิ่งที่ทำงานได้ทั้งสองทาง หากคุณต้องการให้ผู้คนใช้แอปของคุณมันต้องทำงานและต้องแก้ปัญหาของพวกเขา แอพที่ใช้งานไม่ได้นั้นไม่สามารถวิจารณ์ได้เพราะมันฟรี ฉันไม่ได้บอกว่าคุณต้องทำทุกสิ่งที่ผู้ใช้ร้องขอ คุณควรยกเลิกคำขอที่อุกอาจ แต่ถ้าคุณไม่แก้ปัญหาผู้ใช้จริงคุณจะสูญเสียผู้ใช้ไป
cHao

1
@EvanPlaice: และโดยวิธีเมื่อฉันหมายถึง "บ่น" ฉันหมายถึง "ยื่นรายงานข้อผิดพลาดที่สรุปสิ่งที่เสียหายและวิธีการ" ไม่ "ครางแบบสุ่มเกี่ยวกับซอฟต์แวร์ที่ไม่ดี"
cHao

8

จะปลอดภัยไหมที่จะไม่รวมการสนับสนุนสำหรับผู้ใช้จำนวนเปอร์เซ็นต์ที่ไม่มีนัยสำคัญทางสถิติที่ตัดสินใจ (ไม่ว่าจะด้วยเหตุผลใดก็ตาม) กับการสิ้นสุดไลน์สไตล์ Mac OS เก่า?

อาจมีผู้ใช้ไม่มากนักที่จะตรวจพบ แต่มีช้างอยู่ในห้อง: จุดสิ้นสุดของบรรทัด Windows ( CRLF) หากคุณสนับสนุนสิ่งเหล่านั้น (โดยทั่วไปฉันทำแม้ว่าฉันจะใช้ Windows สำหรับเกมเท่านั้น) มันควรจะเป็นเรื่องเล็กน้อยที่จะสนับสนุนส่วนที่สามของสามเหลี่ยมเบอร์มิวดาประวัติศาสตร์นี้

หากคุณไม่สนับสนุนสิ่งนี้คุณควรพูดถึงอย่างน้อยในเอกสารประกอบ (สไตล์นี้ไม่ใช่ข้อผิดพลาด) และวิธีการเปลี่ยนไฟล์เพื่อทำงานกับเครื่องมือของคุณด้วยวิธีที่ง่ายที่สุด ( dos2unixตัวอย่าง)


2
+1 สำหรับการกล่าวถึง Windows โดยใช้CRLF- เป็นบรรทัดเริ่มต้นที่ลงท้ายด้วยระบบปฏิบัติการนั้น และไม่มีวิธีใดที่จะรับประกันแหล่งที่มาของไฟล์. csv ดังนั้นมันจึงสามารถสร้างได้อย่างง่ายดายบนระบบ Windows

1
การกล่าวถึง CRLF ใน Windows ไม่เกี่ยวข้องเพราะถ้าคุณจับ LF เป็นจุดพักคุณจะได้รับโบนัส CRLF โดยอัตโนมัติ OP รู้เรื่องนี้อย่างที่คุณเห็นในข้อความโพสต์ของเขา
davidethell

@davidethell ใช่นั่นเป็นวิธีที่มันทำ ปัจจุบัน CR chars ถูกละเว้นไปโดยไม่แจ้งเตือน ช้างแม้จะมี
Evan Plaice

6

มีอุปกรณ์อนุกรมจำนวนมากที่ใช้CRเป็นจุดสิ้นสุดของ data stream ก่อนที่ETXจะถูกส่ง เป็นแบบแผนที่จะไม่มีวันหายไป


3

ฉันจะปฏิบัติต่อคำขอเป็นคำขอคุณลักษณะใด ๆ ที่คุณต้องการชั่งน้ำหนักต้นทุนเทียบกับผลประโยชน์

ถ้ามีคนหนึ่งคนที่ขอการสนับสนุนจาก CR อาจจะไม่จำเป็น ดูบทหนังสือด้านล่างจาก 37 สัญญาณที่พวกเขาบอกว่าคุณควรกังวลเกี่ยวกับการร้องขอคุณสมบัติที่เป็นที่นิยมมาก

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


1
ในที่สุดจุดตอบโต้ที่ดี ถ้าฉันสามารถเลือกสองคำตอบฉันก็เลือกคำตอบนี้เช่นกัน
Evan Plaice

1

MS OS จาก MSDOS เป็นต้นไปใช้การรวม CR + LF เป็นตัวแยกบรรทัด (ฉันคิดว่าส่วนใหญ่เป็นเพราะเครื่องพิมพ์เมทริกซ์ที่ต้องการพวกเขา)

ดังนั้นใช่มันเป็นคนเกียจคร้าน แต่คุณยังต้องการการสนับสนุนสำหรับสิ่งที่ถูกสาป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.