최근 수정 시각 : 2025-02-12 02:10:25

Carbon

carbon에서 넘어옴

파일:다른 뜻 아이콘.svg  
,
,
,
,
,
,
,
,
,
은(는) 여기로 연결됩니다.
다른 뜻에 대한 내용은 아래 문서를
화학 원소에 대한 내용은 탄소 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
다른 뜻에 대한 내용은 아래 문서를
참고하십시오.

*
화학 원소:
탄소
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분

프로그래밍 사이트 선정 프로그래밍 언어 순위 목록
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all"
{{{#!wiki style="display: inline-table; min-width: 25%; min-height: 2em;"
{{{#!folding [ IEEE Spectrum 2024 ]
{{{#!wiki style="margin: -5px 0"
<rowcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 직업 부문 상위 10개 프로그래밍 언어
1 Python 1 SQL
2 Java 2 Python
3 JavaScript 3 Java
4 C++ 4 TypeScript
5 TypeScript 5 SAS
6 SQL 6 JavaScript
7 C# 7 C#
8 Go 8 HTML
9 C 9 Shell
10 HTML 10 C++
}}}
}}}
}}}
[ Stack Overflow 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=#FFA500><tablebgcolor=#fff,#1c1d1f> 2024년 Stackoverflow 설문조사 기준 인기 상위 25개 프로그래밍 언어 ||
1 JavaScript 14 Rust
2 HTML, CSS 15 Kotlin
3 Python 16 Lua
4 SQL 17 Dart
5 TypeScript 18 어셈블리어
6 Bash 19 Ruby
7 Java 20 Swift
8 C# 21 R
9 C++ 22 Visual Basic
10 C 23 MATLAB
11 PHP 24 VBA
12 PowerShell 25 Groovy
13 Go
[ TIOBE 2025 ]
||<tablewidth=100%><width=9999><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#1c1d1f> 2025년 2월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 Fortran
2 C++ 12 Scratch
3 Java 13 Rust
4 C 14 PHP
5 C# 15 R
6 JavaScript 16 MATLAB
7 SQL 17 Assembly language
8 Go 18 COBOL
9 Delphi / Object Pascal 19 Ruby
10 Visual Basic 20 Prolog
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
21 Swift 36 VBScript
22 Classic Visual Basic 37 PL/SQL
23 Kotlin 38 TypeScript
24 Ada 39 GAMS
25 SAS 40 Solidity
26 LISP 41 ABAP
27 Haskell 42 Logo
28 Dart 43 D
29 (Visual) FoxPro 44 Bash
30 Perl 45 PowerShell
31 Scala 46 Elixir
32 Lua 47 RPG
33 Objective-C 48 ML
34 Julia 49 Ladder Logic
35 Transact-SQL 50 Awk
}}}}}}}}} ||
[ PYPL 2025 ]
||<tablewidth=100%><width=9999><-4><bgcolor=green><tablebgcolor=#fff,#1c1d1f> 2025년 3월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 Swift
2 Java 12 Go
3 JavaScript 13 Kotlin
4 C/C++ 14 MATLAB
5 C# 15 Ada
6 R 16 Dart
7 PHP 17 Ruby
8 Rust 18 Lua
9 TypeScript 19 PowerShell
10 Objective-C 20 VBA

}}} ||
프로그래밍 언어 목록 · 분류 · 문법

package Sample api;    

fn Main() -> i32 {
    Print("Hello, World!");
    return 0;
}
개발 Google
종류 C 패밀리
상태 개발 중
라이선스 아파치 라이선스 v2
1. 개요2. 역사3. 특징4. 문법
4.1. 기본 자료형4.2. 복합 자료형4.3. 변수 선언4.4. 함수 선언4.5. 제어문4.6. 제네릭
5. 관련 문서6. 외부 링크

1. 개요

  • 카본(Carbon)은 구글에서 개발 중인 다목적 범용 프로그래밍 언어이며, C++를 대체하거나 기존의 레거시 C++코드와의 상호 운용성 달성을 목표로 하고 있다.
  • 공식 저장소에서는 "C++ successor"(C++ 후계자)라는 문구로 이를 표현하고 있다.[1]

2. 역사

2022년 7월 19일 토론토에서 열리는 CppNorth 컨퍼런스에서 구글의 개발자인 Chandler Carruth가 발표하며 처음으로 공개되었다. 당시 키노트

같은 날 모든 프로젝트를 오픈 소스로 전환하고 0.1 프리뷰 버전을 출시하였다. GitHub Repository

현재 카본 코드를 컴파일할 수 있는 멀쩡한 컴파일러가 없기 때문에, Carbon Explorer라는 인터프리터를 통해 코드를 실행시킬 수 있다. 다만 이 인터프리터도 한창 개발 중이기 때문에 문서에 있는 코드를 그대로 실행해도 < 연산자나 i64 자료형이 구현이 안 되어있어 에러가 나는 등 정상적인 실행은 거의 불가능하다.[2]

3. 특징

주로 영향받은 언어는 C++Rust이며, 문법을 보면 Rust와 매우 흡사하다는 것을 알 수 있다.

다만 Rust와는 달리 C++와 양방향 호환이 가능할 수 있도록 디자인 된다고 한다.

또 다른 특징 중 하나로, Rust처럼 유연하고 컴파일 타임에 체크 가능한 제네릭을 도입했다는 점이다. C++식 템플릿을 여전히 지원하기 때문에 기존 코드와도 상호 운용이 가능하다.

4. 문법

4.1. 기본 자료형

  • bool
  • signed 또는 unsigned 정수 타입. Rust와 비슷하게 i32, u64[미구현] 등으로 표현한다. Carbon.Int(비트 수)[미구현]와 같이 표현하는 것도 가능하다. 부호 없는 정수는 Carbon.UInt(비트 수) 처럼 표기 가능하다.
  • IEEE-754 부동소수점. f32, f64 등으로 표현한다.
  • 문자열
    • String UTF-8 valid한 문자열을 표현하는 바이트 배열. 이 점 역시 Rust와 유사하다.
    • StringView 위의 String과 똑같지만 읽기 전용이라는 점이 다르다.

4.2. 복합 자료형

  • 튜플: Rust와 상당히 유사한 튜플 자료형을 가지고 있다. (T, V) 처럼 사용할 타입을 지정할 수 있다.
  • 구조체: 독특한 구조체 선언 및 리터럴 문법을 가지고 있다.
    • 구조체 선언(타입)은 아래 처럼 필드(키)명이 반드시 .으로 시작한다. 그 외에는 Rust, JavaScript와 유사하다.
      {{{{.key1: i32, .key2: String}
}}}
  • 구조체 리터럴은 아래처럼 =(대입 연산자)를 사용한다.
    {{{{.key1 = 123, .key2 = "hello"}
}}}
  • 배열: Rust의 영향을 받았다. 5개의 요소를 가진 i32타입의 배열은 아래와 같이 선언한다.
    {{{#!syntax rust
    var arr: [i32; 5] = (1, 2, 3, 4, 5);
    }}}
    • 이때 r-value로 들어간 튜플은 암시적으로(implicitly) 배열로 변환된다.
    • 배열 내 요소는 배열[인데스]를 통해 접근할 수 있다. 따라서 arr[3]은 4가 나온다.
  • 슬라이스[미구현]

4.3. 변수 선언

  • Kotlin, JavaScript, Rust와 마찬가지로 상수 선언과 변수 선언 문법이 별도로 존재한다. let은 상수를 선언하며 var은 변수를 선언한다. 또한 Rust와 마찬가지로 선언 또한 irrefutable 패턴 매칭이기에 아래와 같은 선언이 가능하다.
    {{{#!syntax rust
let (x: i32, y: i32) = (12, 34)
}}} C++와 마찬가지로 auto 키워드를 사용하는 것도 가능하다.

4.4. 함수 선언

Rust와 유사한 문법을 가진다. 두 숫자를 더하는 함수는 다음과 같이 선언한다.
#!syntax rust
fn Add(a: i32, b: i32) -> i32 {
    return a + b;
}

4.5. 제어문

C++의 if, else, while과 거의 같은 키워드를 가지고 있다. 배열을 순회하는 for문의 경우 C++와 조금 달라지는데, 기존의 C++가
#!syntax cpp
for (int n : arr) {
    // ...
}
위와 과 같이 짜던 부분을 아래처럼 작성할 수 있다.
#!syntax rust
for (var n: <타입> in arr) {
    // ...
}

match문 또한 존재하는데, Rust의 match구문을 C식 switch 스타일로 다듬은 모양새이다.
#!syntax rust
match (Bar()) {
    case (1, y: i32) => {
        // ...
    }
    case (x: i32, 2) => {
        // ...
    }
    case (x: i32, _: auto) if (x > 3) => { // 매치 가드
        // ...
    }
    default => {
        // ...
    }
}

4.6. 제네릭

카본의 가장 큰 특징은 Rust방식의 모던한 제네릭을 도입했다는 점이다.(C++식 템플릿도 지원한다.)
#!syntax rust
fn Min[T:! Ordered](x: T, y: T) -> T {
    return if x <= y then x else y;
}

Min(1, 2); // 1
Min("abc", "xyz"); // "abc"

[T:! Ordered]는 T가 제네릭 타입이며, 컴파일 타임에 체크되고(:!), Ordered 인터페이스를 구현한다는 뜻이다. 이를 동일한 동작을 하는 rust코드로 바꿀 수 있다.
#!syntax rust
fn min<T: Ord>(x: T, y: T) -> T {
    if x <= y { x } else { y }
}

assert_eq![min(1, 2), 1];
assert_eq![min("abc", "xyz"), "abc"];
반대로 항수가 실행될 때 동적으로 타입을 지정하는 것도 가능하다. 상술했듯이 카본은 C++식 템플릿도 지원하며, template키워드를 사용할 수 있다.
#!syntax rust
// 템플릿 형태의 제네릭 타입 T를 선언한다.
// 동시에 템플릿 형태의 인자 타입 U를 선언한다.
fn Tmpl[template T:! Type](a: T, template U:! Type) -> U {
    var result: U = do_something(a);
    return result;
}

fn Main() -> i32 {
    // 이때 T는 암시적으로 i32로 지정되며
    // U의 경우 명시적으로(타입을 직접 넘김으로써) String으로 지정한다.
    // 결국 Tmpl이 String을 리턴하리란 사실을 알 수 있다.
    Tmpl(123, String);
    return 0;
}

5. 관련 문서

6. 외부 링크


[1] 홈페이지에선 타입스크립트가 자바스크립트를, 코틀린이 자바를, C++이 C언어를 계승한 것과 같다고 한다.[2] 이는 위 오픈 소스를 그대로 사용해 컴파일을 시도해도 마찬가지이다.[미구현] 현재 미구현 상태인 표준.[미구현] [미구현]