1P by neo 2달전 | favorite | 댓글 1개

MetaWare의 High C 컴파일러의 잃어버린 언어 확장

1980년대의 C 컴파일러

  • 1980년대에는 많은 소규모 회사들이 경쟁하며 다양한 언어 확장을 제공했음
  • Phar Lap은 32비트 80386 프로세서를 활용할 수 있는 DOS 확장자를 개발했고, MetaWare는 이를 위해 High C 컴파일러를 포팅했음
  • Fujitsu는 Phar Lap의 DOS 확장자를 FM TOWNS 플랫폼에 통합했고, High C는 이 플랫폼의 기본 C 컴파일러가 되었음

High C의 독특한 언어 확장

  • High C는 DOS-specific 확장뿐만 아니라 사용자 중심의 다양한 언어 확장을 포함하고 있음
  • 일부 기능은 수십 년 후에야 공식 표준에 포함되었으며, 일부는 여전히 C나 C++에 존재하지 않음

숫자 리터럴에 밑줄 사용

  • 긴 숫자 리터럴을 읽기 쉽게 구분할 수 있도록 밑줄을 사용할 수 있음
  • C++은 C++14에서 이 기능을 도입했고, C는 C23에서 도입했음

라벨된 인자

  • 많은 인자를 가지는 함수 호출 시 인자를 라벨링할 수 있음
  • Python의 인기 있는 기능과 유사하며, 인자 라벨이 있을 경우 순서에 상관없이 인자를 지정할 수 있음
  • 표준 C나 C++에는 아직 이 기능이 없음

범위 케이스

  • Pascal처럼 값의 범위를 매칭할 수 있는 기능을 제공함
  • 표준 C나 C++에는 이 기능이 없음

중첩 함수

  • 함수 내에 다른 함수를 중첩하여 선언할 수 있음
  • 중첩 함수는 "전체 함수 값" 타입으로 선언할 수 있으며, 이는 비탈출 클로저로 작동함
  • GCC의 중첩 함수 확장보다 더 완전한 구현을 제공함
  • 표준 C에는 아직 공식적인 중첩 함수 기능이 없음

제너레이터

  • Python 스타일의 제너레이터 코루틴을 지원함
  • 제너레이터 함수는 여러 번 값을 생성할 수 있으며, 새로운 for 루프 문법을 사용하여 각 값을 순차적으로 처리할 수 있음
  • 중첩 함수 기능과 복잡한 상호작용을 허용함
  • 표준 C는 이 기능을 통합할 가능성이 낮음

GN⁺의 정리

  • MetaWare의 High C 컴파일러는 1980년대의 다양한 언어 확장을 제공하여 C 언어의 표현력을 크게 향상시켰음
  • 일부 기능은 수십 년 후에야 공식 표준에 포함되었으며, 일부는 여전히 C나 C++에 존재하지 않음
  • 제너레이터와 중첩 함수와 같은 고급 기능은 오늘날의 많은 프로그래밍 언어에서도 찾아보기 어려움
  • 이 기사는 C 언어의 역사와 발전 과정을 이해하는 데 도움이 되며, 프로그래밍 언어 설계에 대한 흥미로운 통찰을 제공함
Hacker News 의견
  • 2011년에 iterator-driven for을 작성했음. 당시 C++ 표준에 포함될 경우를 상상했음

  • High C/C++ Language Reference를 소유하고 있음

  • D 언어(또는 Das BetterC)에서 제공하는 기능들:

    • 리터럴에 밑줄 사용 가능
    • 케이스 범위 지정 가능
    • 명명된 인자 사용 가능
    • 중첩 함수 사용 가능
    • 정적 중첩 함수 사용 가능
    • 제너레이터와 유사한 기능 제공
  • 'lcc-win' C 컴파일러가 연산자 오버로딩, 기본 함수 인자, 함수 오버로딩을 추가했음

  • Plan 9 C 컴파일러가 여러 언어 확장을 도입했으며, 일부는 C 표준에 포함되었음

  • 현재 GCC는 -fplan9-extensions 플래그를 지원하여 구조체 포인터를 익명 필드로 자동 변환하는 기능 등을 제공함

  • 이러한 기능을 도입한 사람은 매우 앞서간 인물이었음. 그러나 표준에 영향을 미치지 못한 점이 아쉬움

  • 관련 내용이 Hacker News에 이전에 다루어졌음

  • PDF 복사본이 있는지 궁금해하는 사람 있음

  • 예제 코드의 문자열 리터럴이 \n 대신 ¥n으로 끝나는 이유는 Shift-JIS 코드 페이지 때문임

  • 제너레이터가 Rust의 내부/외부 반복 질문과 try_fold()를 떠올리게 함

  • 책의 타이포그래피가 동시에 아름답고 끔찍하다고 느껴짐

  • 일본어 표기법이나 케밍 규칙에 대해 잘 모르지만, 가변 폭 글꼴을 고정 폭 셀에 강제로 맞춘 것 같음

  • 코드 예제가 8pt 폰트가 아닌 점이 좋음

  • 책이 일본어로 작성된 것인지, 영어로 작성된 후 일본어로 번역된 것인지 궁금해하는 사람 있음

  • Fujitsu에서 나온 것이라면 일본어로 작성되었을 가능성이 높음. 비원어민의 printf 문과 코드 주석의 영어 품질이 인상적임

  • 특히 제너레이터와 관련된 기능이 당시로서는 매우 앞서간 것이었음

  • Fujitsu가 표준화 과정을 거치지 않았기 때문에 가능했을 수도 있음. 그러나 이러한 확장 기능들이 현대 C/C++에서 재발견되고 재발명된 이유이기도 함