mir.pe (일반/밝은 화면)
최근 수정 시각 : 2024-09-30 21:01:10

Carbon


파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
화학 원소에 대한 내용은 탄소 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
프로그래밍 사이트 선정 프로그래밍 언어 순위 목록
{{{#!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 ]
[ TIOBE 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 MATLAB
2 C++ 12 Delphi / Object Pascal
3 C 13 PHP
4 Java 14 Rust
5 C# 15 Ruby
6 JavaScript 16 Swift
7 SQL 17 Assembly language
8 Visual Basic 18 Kotlin
9 Go 19 R
10 Fortran 20 Scratch
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
21 COBOL 36 Scala
22 Classic Visual Basic 37 Transact-SQL
23 LISP 38 PL/SQL
24 Prolog 39 ABAP
25 Perl 40 Solidity
26 (Visual) FoxPro 41 GAMS
27 SAS 42 PowerShell
28 Haskell 43 TypeScript
29 Dart 44 Logo
30 Ada 45 Wolfram
31 D 46 Awk
32 Julia 47 RPG
33 Objective-C 48 ML
34 VBScript 49 Bash
35 Lua 50 Elixir
}}}}}}}}} ||
[ PYPL 2024 ]

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

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. 개요

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. 기본 자료형

4.2. 복합 자료형

}}} }}}

4.3. 변수 선언

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] 이는 위 오픈소스를 그대로 사용해 컴파일을 시도해도 마찬가지이다. [미구현] 현재 미구현 상태인 표준. [미구현] [미구현]