(블로그 이사하면서 옮겨진 글입니다)
구글에서 새로운 언어를 발표했습니다. 새 언어는 Carbon이라는 이름으로, C++을 대체하기 위해서 만들었다고 합니다.
자바스크립트는 타입 스크립트로, 자바는 코틀린으로 서서히 대체되고있습니다. 그리고 이 둘은 서로 호환이 가능하다는 특징도 같이 지니고있죠. 반면에 C++은 그 대체재로 러스트가 주로 언급되는데, 러스트는 C++과 완전 호환되는 언어가 아닙니다. 그래서 러스트와 C++의 관계는 코틀린과 자바의 관계와는 조금 다르죠. 그래서 만든 것이 Carbon으로, C++을 완전히 대체할 수 있는 언어를 목표로 하고 있습니다.
Carbon 언어의 지향점을 여기서 살펴보면, C++의 계승자로써 아래와 같은 것들을 목표로 하고 있다고 합니다.
실제 코드를 살펴보면 위가 C++코드, 아래가 Carbon코드인데 생긴게 꽤 다른 것을 알 수 있습니다.
// C++:
#include <math.h>
#include <iostream>
#include <span>
#include <vector>
struct Circle {
float r;
};
void PrintTotalArea(std::span<Circle> circles) {
float area = 0;
for (const Circle& c : circles) {
area += M_PI * c.r * c.r;
}
std::cout << "Total area: " << area << "\n";
}
auto main(int argc, char** argv) -> int {
std::vector<Circle> circles = {{1.0}, {2.0}};
// Implicitly constructors `span` from `vector`.
PrintTotalArea(circles);
return 0;
}
// Carbon:
package Geometry api;
import Math;
class Circle {
var r: f32;
}
fn PrintTotalArea(circles: Slice(Circle)) {
var area: f32 = 0;
for (c: Circle in circles) {
area += Math.Pi * c.r * c.r;
}
Print("Total area: {0}", area);
}
fn Main() -> i32 {
// A dynamically sized array, like `std::vector`.
var circles: Array(Circle) = ({.r = 1.0}, {.r = 2.0});
// Implicitly constructs `Slice` from `Array`.
PrintTotalArea(circles);
return 0;
}
개인적으로는 함수를 fn으로 지칭하는 점이나, 타입이 뒤로 가는 점이나, var를 쓰면서 굳이 f32로 타입을 지정해야하는 점 등이 취향에 맞지 않아서 쓰고싶지 않다는 생각이 먼저 들었네요. 그리고 C++과 호환되는 걸 장점으로 내세우는 언어가 이렇게까지 코딩스타일을 C++과 다르게 만드는 이유도 궁금하고요... 자바와 코틀린은 코드를 짧게 만들고 깔끔하게 만드려면 어쩔수 없는 선택들이 섞여있었다고 생각하고(둘 다 거의 안써봐서 잘 몰라요), 타입스크립트는 자바스크립트와 굉장히 유사하죠. 그에 비해 이건 스타일만 엄청 다르고 거기서 오는 장점은 별로 없는 느낌이네요...
그 외에도 아래와 같이 상속에 관한 부분의 샘플코드나 다양한 이야기가 있었지만 그렇게 흥미를 끄는 부분은 없었네요.
그리고 깃허브에서는 최신 제네릭 시스템을 도입할 것을 이야기하고있지만 아직 구현체는 없는 상황인 듯 하고, C++ 언어 개선의 핵심인 포인터도 마찬가지로 방향성은 있지만 구현체는 없는 상태입니다.
포인터의 구현체에 대한 방향성 중 하나로 attribute를 이용한 라이프타임 제어를 이야기하고있는데, 이것도 저는 없는 것보단 낫지만 좋은 방향같아보이지는 않네요.
그래서 제 결론은 '러스트 쓰세요'. 만약 C++을 계속 유지보수를 해야하는 상황이라면, C++을 쓰는 동시에 Carbon을 쓰면서 서서히 넘어가는 게 방법이 될 수 있겠지만 C++ 코드를 유지보수해야하는 상황이 아니라면 Carbon을 선택할 이유는 당분간은 크지 않을 것 같습니다. 그리고 C++과 같이 쓰기에도 지금의 Carbon은 기능이 너무 부족하고요. Carbon언어 자체가 아직 0.1버전도 아닌 듯 하니, 1.0버전이 되었을 때는 어떤 모습일지 궁금하긴하네요.
결론: Carbon이 1.0버전이 될때까지 지켜볼 필요가 있고, 그때가 되더라도 아마 C++ 유지보수를 하는 사람이 아니라면 굳이 Carbon을 선택할 이유는 없을 듯 합니다.