neo 2달전 | parent | favorite | on: GN⁺: Whence '\n'?(rodarmor.com)
Hacker News 의견
  • 한 사용자는 자신이 처음 이 아이디어를 읽은 곳이 "How I wrote a self-hosting C compiler in 40 days"라는 글의 42일차였음을 언급함

    • 이 글에서는 컴파일러가 문자열 리터럴에서 "\n"을 해석하는 방법을 설명함
    • "\n"은 실제 ASCII 문자 코드 정보를 포함하지 않으며, 컴파일러가 컴파일러를 컴파일할 때 전달된다고 설명함
    • 이 컴파일러의 줄 바꿈 문자는 GCC에서 유래되었음을 언급함
  • EBCDIC 시스템에서는 초기 C 컴파일러가 ASCII가 아닌 시스템에서 등장했음을 고려해야 한다고 언급함

    • EBCDIC는 명시적인 NextLine과 LineFeed 문자를 가지고 있었음
    • ASCII에서는 작동하는 간단한 코드가 EBCDIC에서는 실패할 수 있음을 설명함
    • EBCDIC에서는 소문자가 대문자보다 앞에 오고, 문자가 숫자보다 앞에 오는 등 ASCII와 정반대의 정렬을 가짐
  • C 표준에서 문자 인코딩에 대한 유일한 보장은 '0'-'9' 숫자가 연속적인 오름차순으로 매핑된다는 것임

    • 이론적으로 간단한 C 프로그램은 ASCII나 EBCDIC 시스템에서 동일한 소스를 컴파일하여 동일한 출력을 생성해야 함
  • 한 사용자는 Ken Thompson의 Turing Award 강연 "Reflections on Trusting Trust"를 언급하며 이 글이 그 강연에서 영감을 받았을 것이라고 추측함

  • clang 컴파일러가 동일한 속성을 가지고 있는지 궁금해하며, 이는 lib/Lex/LiteralSupport.cpp에서 명시적으로 10으로 코딩되어 있음을 설명함

  • 한 사용자는 "\n"이 10으로 인코딩된 이유를 이해하기 위해 왜 탐구가 필요했는지 궁금해하며, 이는 예상된 것이라고 생각함

  • 이 글이 문학적 프로그래밍과 시의 교차점처럼 읽힌다고 언급하며, 코드 생성의 수백 사이클을 통해 0x0A 바이트가 생성되는 과정을 설명하려고 한다고 함

  • C 언어 때문에 "\0???"가 8진수 이스케이프라고 생각했으며, "\012"는 "\x0a" 또는 "0x0a"로, "\010"은 "0x08"로 인식했다고 설명함

    • OCaml이 8진수 이스케이프가 아닌 10진수 이스케이프를 가지고 있을 수 있다고 추측함
  • ASCII나 문자열에 이스케이프 코드가 없었다면 우리의 코드가 어떻게 보였을지에 대한 흥미로운 질문을 제기함

  • 프로그래밍의 한 가지 규칙은 두 가지 방법이 있을 때, 하나가 맞고 다른 하나가 틀릴 확률이 50/50이라면 처음에는 틀릴 가능성이 높다는 것임을 언급함