,
,
,
,
,
,
,
,
,
은(는) 여기로 연결됩니다. 프로그래밍 사이트 선정 프로그래밍 언어 순위 목록 | ||||
{{{#!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; }
개발 | |
종류 | C 패밀리 |
상태 | 개발 중 |
라이선스 | 아파치 라이선스 v2 |
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
등으로 표현한다. - 문자열
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
}}} 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] 이는 위 오픈 소스를 그대로 사용해 컴파일을 시도해도 마찬가지이다.[미구현] 현재 미구현 상태인 표준.[미구현] [미구현]