Định nghĩa về carriage return và line feed
- Carriage return (CR): Di chuyển con trỏ về lề trái của cùng một dòng
- Line feed (LF): Di chuyển con trỏ xuống một dòng và cuộn các dòng trước đó lên trên
- Newline (NL): Di chuyển con trỏ xuống một dòng và về lề trái
Quan sát
- CR và NL là các ký tự điều khiển hữu ích. NL là thao tác phổ biến nhất, bắt đầu một dòng văn bản mới từ lề trái
- LF về cơ bản là vô dụng. Không ai muốn xuống dòng tiếp theo từ giữa dòng rồi tiếp tục viết ở cùng một cột
- LF có nguồn gốc từ thời máy điện báo cơ học khoảng 70 năm trước
Bối cảnh lịch sử
- Máy điện báo in khoảng 5 ký tự mỗi giây
- Truyền thống CRLF bắt nguồn từ các giới hạn cơ học của máy điện báo trong thập niên 1950
- Đến thời Multix và Unix, ngày càng có nhiều nhận thức rằng dùng CRLF làm NL là không hiệu quả
Tình hình hiện đại
- Ngày nay CR được biểu diễn là U+000d, còn LF và NL là U+000a
- Hầu hết các máy hiện đại chỉ dùng U+000a như NL
- Một số giao thức vẫn yêu cầu CRLF, nhưng phần lớn phần mềm chấp nhận một NL đơn lẻ
Lời kêu gọi hành động
- Đổi tên code point U+000a từ "line feed" thành "newline"
- Ngừng truyền CR không cần thiết
- Với các giao thức yêu cầu CRLF, hãy chỉ truyền NL
- Sửa phần mềm tạo lỗi khi nhận NL mà không có CR
Tóm tắt và tác giả
- Sự chấm dứt của CRLF lẽ ra đã cần từ rất lâu. Chúng ta nên cùng nhau loại bỏ di vật lỗi thời này
- Tác giả: D. Richard Hipp, người sáng lập SQLite
# GN⁺ tóm tắt
- Bài viết này giải thích bối cảnh lịch sử của CRLF và sự kém hiệu quả trong thời hiện đại, đồng thời kêu gọi loại bỏ nó
- CRLF là một truyền thống bắt nguồn từ các giới hạn cơ học, nhưng ngày nay gây ra độ phức tạp không cần thiết
- Chủ đề này có thể đặc biệt hữu ích với lập trình viên và nhà phát triển phần mềm, đồng thời quan trọng cho việc truyền dữ liệu hiệu quả
- Ngay cả khi dùng các giao thức hoặc hệ thống khác có chức năng tương tự, cũng cần xem xét lại sự cần thiết của CRLF
8 bình luận
Thỉnh thoảng vẫn dùng line feed....
Đúng là khá dữ dội nhỉ, rùng mình thật
Theo cập nhật ngày 14 tháng 10, đề xuất thay đổi này đã được rút lại.
Đây không phải là chuyện chỉ thay đổi một hệ thống đơn lẻ, mà là phải dần dần thay đổi cả giao thức và mọi hệ thống bị ảnh hưởng, nên theo tôi có vẻ như tác giả đã không đủ thận trọng.
Có phải họ nghĩ rằng lợi ích thu được từ việc loại bỏ nó sẽ lớn hơn chi phí để loại bỏ không?
CR+LF có một lịch sử rất lâu đời...
Ồ.. ra là vì lý do này..
CRLF không phải là một đặc tả được định nghĩa sai, mà là thứ phản ánh môi trường phần cứng của thời đó...
Có vẻ như người ta quên mất tính tương thích ngược và chỉ nghĩ đến thời điểm hiện tại.
Mỗi khi đặc tả phần cứng thay đổi thì chúng ta lại phải lật đổ toàn bộ giao thức sao?
Tôi không hẳn ủng hộ cũng không hẳn phản đối việc loại bỏ nó.
Nhưng tại sao tôi lại nhớ đến lỗi thiên niên kỷ nhỉ?
Ý kiến trên Hacker News
.gitattribute, và giáo dục mọi người ghét Byte Order Mark