GN⁺: MetaWare의 High C 컴파일러의 잃어버린 언어 확장 기능 (2023)
(duriansoftware.com)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++에서 재발견되고 재발명된 이유이기도 함