GN⁺: C는 저수준 언어가 아니다 (2018)
(queue.acm.org)- 인기있는 믿음과는 달리, C가 저수준 언어가 아니라는 주장의 기사
- 저자 David Chisnall은 Meltdown과 Spectre의 취약점이 접근 검사를 넘어서 명령을 실행하는 프로세서의 기능 때문이라고 제안하며, 이 기능은 C 프로그래머들이 저수준 언어로 프로그래밍하고 있다고 믿게 하기 위해 추가되었다.
- Chisnall은 언어가 "메탈에 가깝다"는 것은 그것이 대상 플랫폼에 의해 노출된 추상화에 쉽게 매핑되는 추상 기계를 제공해야 한다고 주장하며, 이것이 C에서는 이루어지지 않는다고 주장한다.
- 저자는 Spectre와 Meltdown 취약점의 근본 원인이 프로세서 아키텍트들이 PDP-11과 같은 추상 기계를 노출하는 빠른 프로세서를 만들려고 했기 때문이라고 제안하며, 이로 인해 C 프로그래머들은 계속해서 그들의 언어가 기본 하드웨어에 가깝다고 믿을 수 있었다.
- Chisnall은 C 코드를 빠르게 실행시키려면 복잡한 컴파일러 변환과 충분히 똑똑한 컴파일러를 만드는 데 수천 명년이 필요하다고 주장한다.
- 저자는 저수준 언어의 핵심 속성이 프로그래머들이 언어의 추상 기계가 기본 물리 기계에 어떻게 매핑되는지 쉽게 이해할 수 있어야 한다고 제안하며, 이것이 C에서는 그렇지 않다고 주장한다.
- Chisnall은 C 코드를 빠르게 만들려는 시도를 중단하고 대신 빠른 프로세서에서 프로그래밍 모델이 어떻게 보일지 생각해볼 시간일지도 모른다고 결론을 내린다. 그는 순수하게 속도를 위해 설계된 프로세서는 아마도 많은 수의 스레드를 지원하고, 넓은 벡터 유닛을 가지며, 훨씬 더 단순한 메모리 모델을 가질 것이라고 제안한다.
Hacker News 의견
- 수동 메모리 관리와 할당자에 대한 명시적인 호출로 인해 C가 저수준 언어가 아니라는 기사의 주장.
- 일부 댓글 작성자들은 이해하고 전문적으로 사용하는 사람들에게 C가 실제로 저수준 언어라고 주장합니다.
- CPU 명령 세트가 CPU의 구현을 더 많이 노출해야 한다는 저자의 주장에 대해 과거의 실패한 시도를 인용하여 이견이 있습니다.
- 저수준에서 고수준까지의 개념은 스펙트럼으로 보이며, C는 메모리와 스레드 관리와 같은 기계 원시어를 노출하는 언어 중 가장 낮은 쪽에 위치해 있습니다.
- 병렬 프로그래밍이 어렵지 않다는 기사의 주장은 일부 댓글 작성자들에게는 오해의 소지가 있다고 봅니다.
- 컴퓨터가 PDP-11의 구조와 닮지 않았다는 기사의 전제는 어느 때보다 정확하게 보이지만, 비-C 프로세서를 상상하는 결론은 그다지 강하지 않아 보입니다.
- 일부 댓글 작성자들은 컴퓨터가 빠른 PDP-11이 아니라는 기사의 주장이 맞지만, 이것이 C와 관련이 있다는 것은 잘못되었다고 주장합니다.
- struct 패딩과 signed overflow가 정의되지 않은 동작이라는 특징으로 인해 C가 저수준 언어가 아니라는 기사의 주장은 건설적으로 보입니다.
- C의 지배력으로 인해 CPU 설계자들이 자연스럽게 C를 실행할 수 있는 것을 만들어야 했다는 주장은 이치에 맞아 보이지만, 이것이 첫 번째 주장과 기사의 제목과 어떻게 관련되는지는 불분명합니다.
- 현대 CPU의 세련된 기술이 C를 더 이상 "저수준" 언어로 만들지 않는다면, 이것은 어셈블리 언어에도 동일하게 적용됩니다.
- 기사는 일부 댓글 작성자들에게 VLIW를 떠올리게 하는데, 여기서 하나의 VLIW 명령어는 병렬로 실행될 수 있는 여러 독립적인 명령어를 포함할 수 있습니다.