C 대안 언어의 실패 조건, '킬러 기능' 없으면 채택 어려워
The case against a C alternative (2022)

C 언어를 대체하려는 시도는 계속되고 있지만, C3 개발자에 따르면 단순한 개선만으로는 C를 대체할 수 없다. C는 방대한 도구 생태계, 성숙한 컴파일러, 숙련된 개발자 풀, C ABI 표준 등이 강점이다. 새로운 언어는 불확실성, 버그, 기능 부족, 개발자 부족 등의 위험을 안고 있다. '더 나은 문법', '안전성', '생산성 향상'은 실제 채택에 큰 영향을 주지 못한다. 성공하려면 C가 따라올 수 없는 독특한 기능이나 제품이 필요하다. Java가 8가지 킬러 기능으로 성공한 것과 대조적이다. 결국 C 대안은 명확한 가치를 증명하지 못하면 실패할 가능성이 높다.
결국 중요한 것은 C가 사용되는 용도의 상당 부분에서 개발자에게 C보다 더 실질적인 가치를 제공할 수 있는지 여부다.
HN 토론
78- friendzis
이 글의 핵심 주장은 일종의 닭과 달걀 문제인 것 같다.
> 4. 경험 많은 개발자가 없다
음, C를 사용하려면 C에 능숙한 경험 많은 개발자가 필요하다. 컴파일은 되지만 여러 가지로 잘못된, 보통은 미묘하게 잘못된 C 코드를 작성할 수 있다. 개발자가 올바른 코드를 작성하도록 돕거나, 잘못된 코드를 컴파일을 거부하는 새 언어(여기서 Rust를 암시)는 이 달걀 문제를 조금 깨뜨린다.
> 특정 난해한 플랫폼을 대상으로 하려면 아마도 C를 사용한다고 가정할 것이다.
일부(대부분?) 난해한 플랫폼은 GCC의 포크를 제공한다. LLVM 프론트엔드가 등장하면서 그 중요성은 점점 줄어들고 있다. 이 특정한 닭과 달걀 문제는 C의 후계자가 있든 없든 깨지고 있다.
> 모든 C 대안은 성능에서 C와 동등할 것으로 기대될 것이다. 문제는 C에는 사실상 검사가 없어서, 경쟁 언어에 넣는 안전 검사는 런타임 비용을 수반하며, 이는 종종 받아들일 수 없다. 이로 인해 '안전' 모드에서만 검사를 수행하는 전략이 나온다. '빠른' 모드는 C만큼 '불안전'하다.
이 주장은 순환적이다. 실제로 '어셈블리용 매크로 시스템'이 필요한 이상한 일을 해야 하는 시나리오가 분명히 있지만, 일반적으로 그것은 전체 프로젝트에서 상대적으로 작은 부분이다. 안전하지 않은 모드는 이 작은 필요를 해결하는 데 도움이 된다. 이 주장은 프로젝트의 일부 작은 부분에 C 계열 언어가 필요하다는 이유로 전체 프로젝트에 C 계열 언어를 사용해야 한다는 식으로 읽힌다.
> 3. 프로그래머 생산성
이 전체 주장은 이상하게도 ...에 초점을 맞추고 있다.
- palata
나에게 C의 가치는 상호 운용성(interop)에 있다.
C API를 감싸서 다른 어떤 언어에서도 쉽게 호출할 수 있음을 보장할 수 있는, ABI 안정성을 가진 현대 언어가 있는가?
- leni536
전체적으로 설득력 없는 주장이다. 대부분 '새 언어는 처음에는 새롭고 성숙하지 않을 것'이라는 말로 귀결된다. C의 설계 공간에서 '킬러 기능'을 무시한다. 이미 잘 확립된 C 대안인 C++이 있다는 것을 무시한다.
하지만 분명히 C가 사라질 것이라는 의미에서 어떤 것도 C를 대체하지는 않을 것이다.
- netdur
나는 어느 정도 죄책감이 있다. 나는 C+라는 새로운 프로그래밍 언어를 시작했고, 내가 세운 핵심 원칙 중 하나는 C(또는 다른 언어)의 대안이 되어서는 안 된다는 것이었다. 사실 그것은 컴파일러로 Clang을 사용한다. 기사의 대부분의 요점은 여전히 유효하지만, 사람들이 이 분야에서 새로운 아이디어를 내고 실제로 구현하는 것을 막지 않기를 바란다. 반드시 차세대 대세가 되지 않아도 멋질 수 있다.
- anthk
Rust는 C를 대체하기 위해 만들어진 것이 아니라, C는 저수준과 모든 것의 접착제 코드로 남아 있다.
Rust는 C++을 대체하기 위해 만들어졌다. 왜냐하면 C++은 거대한 괴물이고, 모든 것을 하려고 하며, 문법은 러브크래프트식 악몽이고, 레거시 비호환성으로 가득 차 있기 때문이다. Cataclysm:DDA 같은 작은 게임에는 Go를 사용하겠다(시스템 도구와 인터넷 서비스에도 당연히). 게임 엔진에는 Rust나 GC 기반 언어(Java는 아니지만)도 잘 할 수 있다(C# with AOT).
Common Lisp도 괜찮다(그냥 Trial/Kandria를 찾아봐라) SDL2/3 및/또는 OpenGL 바인딩(Vulkan 바인딩도 어딘가에 있을 것이다)과 함께. 속도를 위해 SBCL을 선택하고, CL을 배우고, SIMD와 최적화에 대해 배워라. 성능에서 C를 이길 수 있다.
https://www.stylewarning.com/posts/nbody/
편집: 바인딩은 물론 cl-vulkan이다.