ความหมายของ carriage return และ line feed
- Carriage Return (CR): ย้ายเคอร์เซอร์ไปที่ขอบซ้ายของบรรทัดเดิม
- Line Feed (LF): ย้ายเคอร์เซอร์ลงไปหนึ่งบรรทัด และเลื่อนบรรทัดก่อนหน้าให้ขึ้นด้านบน
- Newline (NL): ย้ายเคอร์เซอร์ลงไปหนึ่งบรรทัดและย้ายไปที่ขอบซ้าย
ข้อสังเกต
- CR และ NL เป็นอักขระควบคุมที่มีประโยชน์ โดย NL เป็นการทำงานที่พบได้บ่อยที่สุด คือเริ่มบรรทัดใหม่จากขอบซ้าย
- LF แทบไม่มีประโยชน์ในทางปฏิบัติ ไม่มีใครอยากเลื่อนลงไปบรรทัดถัดไปจากกลางบรรทัดแล้วพิมพ์ต่อในคอลัมน์เดิม
- LF มีต้นกำเนิดย้อนกลับไปราว 70 ปีก่อน ในยุคของเครื่องพิมพ์โทรเลขแบบกลไก
ภูมิหลังทางประวัติศาสตร์
- เครื่องพิมพ์โทรเลขพิมพ์ได้ประมาณ 5 ตัวอักษรต่อวินาที
- ธรรมเนียมของ CRLF มีที่มาจากข้อจำกัดทางกลไกของเครื่องพิมพ์โทรเลขในทศวรรษ 1950
- ในยุคของ Multix และ Unix เริ่มมีการตระหนักว่าการใช้ CRLF แทน NL นั้นไม่มีประสิทธิภาพ
สถานการณ์ในปัจจุบัน
- ปัจจุบัน CR แทนด้วย U+000d ส่วน LF และ NL แทนด้วย U+000a
- เครื่องสมัยใหม่ส่วนใหญ่ใช้ U+000a เป็น NL เท่านั้น
- โปรโตคอลบางตัวยังคงบังคับใช้ CRLF แต่ซอฟต์แวร์ส่วนใหญ่รองรับ NL ตัวเดียว
ข้อเรียกร้องให้ลงมือทำ
- เปลี่ยนชื่อ code point U+000a จาก "line feed" เป็น "newline"
- หยุดส่ง CR ที่ไม่จำเป็น
- สำหรับโปรโตคอลที่ต้องการ CRLF ให้ส่งเฉพาะ NL
- แก้ไขซอฟต์แวร์ที่ทำให้เกิดข้อผิดพลาดเมื่อได้รับ NL โดยไม่มี CR
สรุปและผู้เขียน
- จุดจบของ CRLF เป็นสิ่งที่ควรเกิดขึ้นมานานแล้ว เราควรร่วมมือกันกำจัดซากตกค้างจากยุคเก่านี้
- ผู้เขียน: D. Richard Hipp ผู้สร้าง SQLite
# สรุปโดย GN⁺
- บทความนี้อธิบายภูมิหลังทางประวัติศาสตร์ของ CRLF และความไม่มีประสิทธิภาพในยุคปัจจุบัน พร้อมเรียกร้องให้เลิกใช้
- CRLF เป็นธรรมเนียมที่เกิดจากข้อจำกัดทางกลไก และในปัจจุบันสร้างความซับซ้อนที่ไม่จำเป็น
- หัวข้อนี้อาจเป็นประโยชน์อย่างยิ่งต่อโปรแกรมเมอร์และนักพัฒนาซอฟต์แวร์ และมีความสำคัญต่อการส่งข้อมูลอย่างมีประสิทธิภาพ
- แม้เมื่อใช้โปรโตคอลหรือระบบอื่นที่มีฟังก์ชันคล้ายกัน ก็ควรทบทวนความจำเป็นของ CRLF ด้วย
8 ความคิดเห็น
บางทีก็ยังใช้ line feed อยู่นะ....
แรงใช้ได้เลยนะเนี่ย โหดจัด
ตามการแก้ไขเมื่อวันที่ 14 ตุลาคม ระบุว่าได้ถอนข้อเสนอการเปลี่ยนแปลงแล้ว
นี่ไม่ใช่แค่การเปลี่ยนระบบเดียว แต่เป็นงานที่ต้องค่อย ๆ ปรับเปลี่ยนทั้งโปรโตคอลและทุกระบบที่ได้รับผลกระทบ ดังนั้นในมุมมองของผม ผู้เขียนน่าจะยังไม่รอบคอบพอ
พวกเขาคิดหรือว่าประโยชน์ที่ได้จากการเลิกใช้นั้นมากกว่าต้นทุนในการเลิกใช้มัน?
CR+LF มีประวัติศาสตร์อันยาวนาน...
อ้อ.. ถึงว่าเป็นเหตุผลแบบนี้..
CRLF ไม่ได้เป็นสเปกที่นิยามผิดเสียหน่อย แต่เป็นสิ่งที่สะท้อนสภาพแวดล้อมของฮาร์ดแวร์ในยุคนั้น...
ดูเหมือนว่าจะลืมเรื่องความเข้ากันได้แบบย้อนหลังไป และคิดถึงแค่ช่วงเวลานี้เท่านั้น
หรือว่าเราควรจะรื้อโปรโตคอลใหม่ทุกครั้งที่สเปกฮาร์ดแวร์เปลี่ยน?
ไม่ได้เห็นด้วยหรือคัดค้านกับการเลิกใช้มันนะ
แต่ทำไมถึงนึกถึงปัญหา Millennium bug ขึ้นมาก็ไม่รู้?
ความคิดเห็นบน Hacker News
.gitattributeและปลูกฝังให้ไม่ชอบ Byte Order Mark