An experimental successor to C++ - Carbon Language Github
2022년 7월 19일 Google 프로그래밍 언어의 기술 책임자인 Chandler Carruth가 Carbon이라는 새로운 언어를 소개했습니다.
위 그림에서 볼 수 있듯, 기존 언어를 그대로 지원하면서 더 나은 사용성을 제공하기 위한 것이 가장 큰 목적임을 알 수 있습니다.
Improving C++ to deliver the kind of experience developers expect from a programming language today is difficult in part because C++ has decades of technical debt accumulated in the design of the language. - Carbon Language Github
C++은 현재 특이한 기술적 위치를 가지고 있습니다. 언어 자체의 난이도, 유지 보수의 어려움 등으로 인하여 성능이 매우 중요하지 않다면 주 언어로 채택되는 일은 거의 없을 것입니다. Carbon github에서 설명하듯, C++의 설계에서부터 오는 기술적 부채때문에 개발자가 원하는 요즘 언어에 기대하는 경험을 C++을 개선해서는 달성하기 힘들다는 것입니다. 이유로는 C언어에서부터 유구한 역사와 전통을 자랑하는 #include의 문제점이 이유중 하나라고 합니다.
이러니 저러니 해서, 명확한 하위 호환을 포기하고 C++ 개선의 길이 아닌 새로운 후속 언어로 C++의 문제 해결에 접근하겠다는 것입니다.
자세한 내용은 Difficulties improving C++을 읽어보시면 됩니다.
참고) 발표에서 후속 언어의 조건에 대한 내용이 있어 첨부합니다.
We are designing Carbon to support:
- Performance-critical software - 성능
- Software and language evolution - 언어의 진화
- Code that is easy to read, understand, and write - 읽고, 쓰고, 이해하기 쉬운 언어 ( 한글 창제의 실용정신 )
- Practical safety and testing mechanisms - 안전성, 테스트 메커니즘
- Fast and scalable development - 빠른고 확장 가능성있는 개발
- Modern OS platforms, hardware architectures, and environments - 최신 환경에서도
- Interoperability with and migration from existing C++ code - 기존 C++ 코드도 함께
마지막 목표가 후속 언어로서의 포지션을 가지고 있다는 것을 명시한 것입니다.
Carbon 언어의 구체적인 목표도 Carbon github에 있지만 링크합니다.
C++하면 메모리를 직접 관리해야해! 라는 이미지가 있습니다. 물론 스마트 포인터가 있지만, 메모리를 직접 free한다는 이미지는 확고합니다.
그럼 C++ 후속 언어인 Carbon에서는 메모리에 대하여 어떻게 접근할까 궁금해지기 마련입니다.
C/C++은 포인터 값에 연산을 허용하니 memory safe하지 않습니다. Carbon language에서는 Memory Safety에대한 설명이 있는 만큼, 후속 언어로서 C++의 memory safe하지 않은 점을 safe하게 만들고자 하는 것으로 보입니다.
This will be a large and complex undertaking, and won't be in the 0.1 design. Meanwhile, we are closely watching and learning from efforts to add memory safe semantics onto C++ such as Rust-inspired lifetime annotations.
아직 메모리에 대한 구체적인 구현은 없는데, Rust와 같은 접근을 생각중인가 봅니다.
참고) AddressSanitizer 이야기가 있는데, valgrind처럼 메모리 에러 디텍터입니다. valgrind는 다이나믹하게 컴파일된 바이너리에 붙어서 메모리 체크하는 반면 AddressSanitizer는 컴파일타임에 들어가서 메모리 체크합니다.
AddressSanitizer란?
AddressSanitizer과 다른 memory tool과 비교
과거와 달리 요즘 새로 무언가를 C++로 한다면 Python과 같은 언어에서 성능이 필요한 부분에 차용되는 수준입니다 (뇌피셜). 그리고 Rust라는 친구가 있어 아무 기반없이 새로 프로젝트를 한다면 C++ 보다는 Rust가 좋은 선택이라고들 합니다. 이제 Carbon이 stable한 언어가 됐을 때, Rust에서는 기존 C++ 생태계를 전혀 이용하지 못해서 기존 C++ 프로젝트를 갈아엎지 못하던 것을 Carbon은 C++의 후속 언어인만큼 기존 C++ 프로젝트를 Carbon으로 갈아 엎고 사용성 좋게 개선할 수 있지 않을까? 한번 생각해봅니다.