캐리지 리턴 숯은 쓸모없는 것으로 간주됩니다


26

구조화 된 데이터를 구문 분석하지만 요점을 보지 못했기 때문에 의도적으로 캐리지 리턴 감지를 생략하는 오픈 소스 라이브러리를 작성했습니다. 이점이 거의없는 추가적인 복잡성과 오버 헤드를 추가합니다.

놀랍게도 사용자는 파서가 작동하지 않는 버그를 제출했으며 문제의 원인은 데이터가 LF 또는 CRLF가 아닌 CR 줄 끝을 사용했다는 것을 발견했습니다.

OSX는 유닉스 기반 플랫폼으로 전환 한 이후 LF 스타일 라인 엔딩을 사용하지 않았습니까?

CR을 명시 적으로 사용하도록 줄 끝을 변경할 수있는 메모장 ++과 같은 응용 프로그램이 있지만 아무도 왜 원하는지 알 수 없습니다.

구 맥 OS 스타일의 라인 엔딩을 결정한 이유는 무엇이든 통계적으로 유의하지 않은 사용자에 대한 지원을 배제하는 것이 안전합니까?

최신 정보:

명확히하기 위해 Windows 줄 결말 (예 : CRLF)을 지원하는 데 CR 토큰 인식이 필요하지 않습니다. 효율성을 위해 어휘 분석기는 문자별로 일치합니다. CR 문자를 자동으로 무시하면 CRLF 토큰이 LF로 단순화됩니다. 따라서 CRLF 토큰 자체는 모두 고유 한 시간으로 간주 될 수 있지만 이것이 바로이 질문에 관한 것이 아닙니다.

CR 스타일 라인 엔딩에 대한 시스템 전체 지원을 제공 한 마지막 OS는 Mac OS 9 입니다. 아이러니하게도 OSX에서 여전히 기본으로 사용하는 유일한 응용 프로그램은 Microsoft Excel입니다.


21
"추가 복잡성과 오버 헤드가 추가됩니다": 추가 복잡성과 오버 헤드가 실제로 작은 것 같습니다.
조르지오

11
@EvanPlaice는 의도적으로 빠진 CR 지원을 연결하는 데 두통이 적고 시간이 더 걸리지 않습니까?
Pieter B

11
"비즈니스 측면에서 기회 비용이 너무 높습니다. 간단히 말해서, 죽은 플랫폼에 대한 최신 지원을 추가하는 데 낭비되는 시간보다 게으름을 정당화 할 이유를 찾고 싶습니다." 이 기능의 관련성을 조사하기 위해 여기에 질문을 게시하는 것보다 CR에 대한 지원을 구현하십시오.
Giorgio

4
@EvanPlaice 문화 관성이 완벽하게 좋은 이유입니다.
Pieter B

5
@EvanPlaice :이 질문을 작성하면 CR코드베이스 에 개행을 지원하는 것보다 시간이 많이 걸립니다 . (... 그리고 이것이 사실이 아니라고 굳게 믿는다면 파서의 디자인은 매우
열악

답변:


37

"당신이 받아들이는 것에 자유 주의적이며, 당신이 보내는 것에 보수적 인" 모범 사례가 있습니다 .

즉, 누군가가 당신에게 cr 줄 결말을 줄 가능성이 있고 (정확하게 작동 할 것으로 기대할 경우), 그것을 지원해야합니다.

TBH, CR 지원을 추가하는 데 시간이 얼마나 걸리는지 알 수 없습니다.

당신은 볼 때 cr다음 문자 들여다 렉서와 그것이 경우 nl, 줄 바꿈 및 발광 개행 토큰, 다음 문자가 아닌 경우 삼키지 nl만 개의 발광 개행 문자 토큰을 계속합니다.


23
@ ZJR : postels 법은 위험합니다. 견고성 원칙을 채택 할 때는 매우 역효과를 낳기 때문에 매우 조심하십시오. 우리가 여전히 html 파싱 엉망이 그 사고 방식에 기인 할 수 있습니다. 프로그램이 잘못된 입력을 수락하면 결과적으로 해당 동작이 곧 예상 되고 동작에 따라 달라 지며 나중에 기술적으로 정확하지만 잘못된 입력을 다르게 처리하거나 변경하지 않는 변경은 종종 결함으로 간주됩니다.
whatsisname

4
@ whatsisname : 동의하지 않습니다. 프로덕션 품질 소프트웨어는 강력해야한다고 생각합니다. 그러나 개발 툴체인은 그러한 견고성에 의존하지 말고 유효한 결과물 만 생산해야합니다. HTML이 엉망인 것은 브라우저의 관대함이 아니라 거의 20 년 동안 툴링이 열악했기 때문입니다.
back2dos

2
@ back2dos : _ _ 그래서? 열악한 툴링은 브라우저의 관대함으로 인해 발생합니다.
amara December

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을 사용하지 않는다는 똥을주지 않습니다! 고객이 불평하고 있습니다. IT를 수정하십시오!" : P 이것은 OSS의 큰 점 입니다. 사용자가 불만을 제기 한 실제 사례 에 대한 관심 부족입니다 . 쓸모 없다고 생각하든 누군가 가 여전히 사용하고 있습니다.
cHao

1
공개 소스이기 때문에 모든 사용자에게 공개 서한을 작성하여 수정하기 위해 모든 패치를 수락 할 수 있습니다.
rwong

1
@EvanPlaice : "주의는 ... 통화"는 두 가지 방식으로 작동합니다. 사람들이 앱을 사용하도록하려면 앱이 작동해야하며 문제를 해결해야합니다. 깨진 앱은 무료이기 때문에 비판에 면역되지 않습니다. 나는 사용자가 요구 하는 모든 것을 해야한다고 말하는 것이 아니다 . 당신이 해야 포악한 요청을 기각. 그러나 실제 사용자의 문제를 해결하지 않으면 결국 사용자를 잃게됩니다.
cHao

1
@EvanPlaice : 그건 그렇고, 내가 "불만"을 의미 할 때, "소프트웨어가 얼마나 나쁜지에 대해 무작위로 판단하지 않고" "손상된 내용과 방법을 설명하는 버그 보고서를 제출하십시오"를 의미합니다.
cHao

8

구 맥 OS 스타일의 라인 엔딩을 결정한 이유는 무엇이든 통계적으로 유의하지 않은 사용자에 대한 지원을 배제하는 것이 안전합니까?

너무 많은 사용자가이를 감지하지 못할 수도 있지만 방 안에 코끼리가 있습니다 : Windows 줄 끝 ( CRLF). 당신이 그 것들을 지원한다면 (나는 일반적으로 게임을 위해 Windows 만 사용하지만)이 역사적인 버뮤다 삼각형의 세 번째 부분을 지원하는 것은 쉽지 않습니다.

이와 같은 것을 지원하지 않는 경우 최소한 문서 ( "버그가 아님"스타일) 가능한 가장 간단한 방법으로 도구를 사용할 수 있도록 파일을 변경하는 방법 에서이를 언급해야합니다 dos2unix.


2
Windows를 사용하여 언급하는 경우 +1- CRLF해당 OS에서 끝나는 기본 줄입니다. 그리고 .csv 파일의 소스를 보장 할 방법이 없으므로 Windows 시스템에서 쉽게 만들 수 있습니다.

1
Windows에서 CRLF를 언급하는 것은 관련이 없습니다. LF를 중단 점으로 잡으면 자동으로 CRLF를 보너스로 받게됩니다. OP는 게시물의 텍스트에서 볼 수 있듯이 이것을 알고 있습니다.
davidethell

@ davidethell Yep, 그것이 끝났습니다. 현재 CR 문자는 자동으로 무시됩니다. 그럼에도 불구하고 코끼리.
Evan Plaice

6

전송 CR되기 전에 데이터 스트림의 끝으로 의존하는 많은 직렬 장치가 ETX있습니다. 결코 사라지지 않을 협약입니다.


3

요청을 혜택과 비교하여 비용을 측정해야하는 기능 요청으로 처리합니다.

정확히 한 사람이 CR 지원을 요청한 경우 필요하지 않을 수 있습니다. 매우 인기있는 기능 요청에 대해서만 걱정해야한다는 37 가지 신호의 아래 책 장을 참조하십시오.

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


1
마지막으로, 좋은 반론. 두 가지 답변을 선택할 수 있다면이 답변도 선택합니다.
Evan Plaice

1

MSDOS의 MS OS는 CR + LF 조합을 줄 구분 기호로 사용합니다 (주로 매트릭스 프린터가 필요하다고 생각합니다).

그렇습니다, 그것은 겁쟁이이지만 여전히 저주받은 것에 대한 지원이 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.