이름 | Rust |
---|---|
로고 | |
로고 설명 | Rust 로고; 기어 속의 대문자 R |
패러다임 | 동시성, 함수형, 제네릭, 명령형, 구조적 |
출시일 | 2015년 5월 15일 |
개발자 | Rust 프로젝트 |
최신 릴리스 버전 | 1.79.0 |
최신 릴리스 날짜 | 2024년 6월 13일 |
타입 시스템 | 어파인, 추론, 노미널, 정적, 강한 |
프로그래밍 언어 | OCaml (2006–2011), Rust (2012–현재) |
플랫폼 | 크로스 플랫폼 [1] |
운영 체제 | 크로스 플랫폼 [2] |
라이선스 | MIT, Apache 2.0 [3] |
파일 확장자 | .rs, .rlib |
영향 받은 언어 | Alef, C#, C++, Cyclone, Elm, Erlang, Haskell, Limbo, Newsqueak, OCaml, Ruby, Scheme, Standard ML, Swift [4] |
영향을 준 언어 | Idris, Project Verona, Spark, Swift, V, Zig [5] [6] [7] |
개요
Rust는 성능, 타입 안전성, 및 동시성을 강조하는 범용 프로그래밍 언어입니다. 메모리 안전성을 보장하여 모든 참조가 유효한 메모리를 가리키도록 하며, 가비지 수집기 없이 이를 달성합니다. 메모리 안전성과 데이터 경쟁을 방지하기 위해, 컴파일 시에 "차용 검사기"가 프로그램 내 모든 참조의 객체 수명을 추적합니다.
Rust는 불변성, 고차 함수, 및 대수적 데이터 타입을 포함한 함수형 프로그래밍의 아이디어에서 영향을 받았습니다. 시스템 프로그래밍에 인기가 있습니다.[8][9][10] Rust는 특정 [[
프로그래밍 패러다임]]을 강제하지 않지만, 구조체, 열거형, 트레잇 및 메서드를 통한 객체 지향 프로그래밍과 불변성, 순수 함수, 고차 함수 및 패턴 매칭을 통한 함수형 프로그래밍을 지원합니다.
소프트웨어 개발자 그레이던 호어(Graydon Hoare)가 2006년 Mozilla 연구소에서 개인 프로젝트로 Rust를 만들었습니다. Mozilla는 2009년부터 공식적으로 이 프로젝트를 후원했습니다. 2015년 5월 첫 안정 릴리스 이후, Amazon, Discord, Dropbox, Google (Alphabet), Meta, Microsoft 등 여러 회사에서 Rust를 채택했습니다. 2022년 12월, Rust는 C 및 어셈블리어 외의 언어로는 처음으로 리눅스 커널 개발에 지원되었습니다.
Rust는 빠른 채택으로 주목받았으며, 프로그래밍 언어 이론 연구에서도 연구되었습니다.
역사
기원 (2006–2012)
Rust는 Mozilla 연구소 직원 그레이던 호어가 2006년에 시작한 개인 프로젝트로, 생존을 위해 "과잉 설계된" 녹병균의 이름을 따왔습니다. Mozilla는 2009년에 프로젝트를 후원하기 시작했으며, 이후 10년 동안 이를 전담할 12명의 엔지니어를 고용했습니다.[11]
2010년 경, 초기 컴파일러를 OCaml에서 Rust로 작성된 자체 호스팅 컴파일러로 전환했습니다. 새로운 Rust 컴파일러는 2011년에 성공적으로 자체 컴파일에 성공했습니다.[12]틀:Better source needed 2011년 가을, Rust 로고는 자전거 체인링을 기반으로 개발되었습니다.[13]
발전 (2012–2020)
Rust의 타입 시스템은 0.2, 0.3 및 0.4 버전 간에 큰 변화를 겪었습니다. 2012년 3월에 출시된 0.2 버전에서 처음으로 클래스가 도입되었습니다.[14] 네 달 후, 0.3 버전에서는 소멸자와 다형성이 인터페이스를 통해 추가되었습니다.[15] 2012년 10월, 0.4 버전이 출시되었으며, 이는 상속의 수단으로 트레잇을 추가했습니다. 인터페이스는 트레잇과 결합되어 별도의 기능으로 제거되었고, 클래스는 구현 및 구조화된 타입의 조합으로 대체되었습니다.[16]
2010년대 초반까지 소유권 시스템을 통한 메모리 관리는 점진적으로 통합되어 메모리 버그를 방지했습니다. 2013년까지 Rust의 가비지 수집기가 제거되었고, 소유권 규칙이 적용되었습니다.[11]
2014년 1월, Dr. Dobb's Journal의 편집장 Andrew Binstock는 C++, D, Go, 및 Nim (당시 Nimrod)과 함께 Rust가 경쟁자가 될 가능성에 대해 언급했습니다. Binstock에 따르면 Rust는 "놀랍도록 우아한 언어"로 널리 여겨졌지만, 버전에서 버전으로 급격히 변화하여 채택이 느려졌다고 합니다.[17] 첫 번째 안정 릴리스, Rust 1.0은 2015년 5월 15일에 출시되었습니다.[11]
Servo 브라우저 엔진의 개발은 Rust의 성장과 함께 진행되었습니다. 2017년 9월, Firefox 57이 "Firefox Quantum"이라는 프로젝트 이름으로 Servo의 구성 요소를 통합한 첫 번째 버전으로 출시되었습니다.[18]
Mozilla 해고 및 Rust 재단 (2020–현재)
2020년 8월, Mozilla는 COVID-19 대유행으로 인한 기업 구조 조정의 일환으로 전 세계 직원 1,000명 중 250명을 해고했습니다.[19][20] Servo 팀은 해체되었습니다. 이 사건은 팀의 일부 구성원이 Rust에 적극적으로 기여하고 있었기 때문에 Rust의 미래에 대한 우려를 불러일으켰습니다.[21] 다음 주에 Rust Core Team은 해고의 심각한 영향을 인정하고 Rust 재단 설립 계획이 진행 중임을 발표했습니다. 재단의 첫 번째 목표는 모든 상표 및 도메인 이름 소유권을 인수하고 비용에 대한 재정적 책임을 지는 것이었습니다.[22]
2021년 2월 8일, Rust 재단의 창립이 AWS, Huawei, Google, Microsoft, Mozilla의 다섯 개 창립 기업에 의해 발표되었습니다.[23][24] 2021년 4월 6일에 게시된 블로그 게시물에서 Google은 C/C++의 대안으로 안드로이드 오픈 소스 프로젝트 내 Rust 지원을 발표했습니다.[25]
2021년 11월 22일, 커뮤니티 표준 및 행동 강령을 시행하는 역할을 맡은 Moderation Team이 "Core Team이 스스로를 누구에게도 책임지지 않는 것에 항의"하며 사임을 발표했습니다.[26] 2022년 5월, Rust Core Team, 다른 리드 프로그래머 및 일부 Rust 재단 이사회 구성원은 이 사건에 대응하여 거버넌스 개혁을 실시했습니다.[27]
Rust 재단은 2023년 4월 6일에 Rust 로고와 이름 사용 규칙을 수정하는 새로운 상표 정책 초안을 게시했으며, 이는 Rust 사용자 및 기여자로부터 부정적인 반응을 불러일으켰습니다.[28]
구문 및 기능
Rust의 구문은 C와 C++의 구문과 유사합니다.[29][30]틀:Sfn 호어는 Rust를 "좌절한 C++ 개발자"를 대상으로 한다고 설명했으며, 안전성, 메모리 레이아웃 제어 및 동시성과 같은 기능을 강조했습니다.[31]
Hello World 프로그램
다음은 Rust의 헬로 월드 프로그램입니다. 틀:Rust 키워드는 함수를 나타내며, println!
매크로는 메시지를 표준 출력에 출력합니다.틀:Sfn 문은 세미콜론으로 구분됩니다.
fn main() {
println!("Hello, World!");
}
변수
변수는 틀:Rust 키워드를 통해 정의됩니다.틀:Sfn 아래 예제는 틀:Code라는 변수에 값을 할당합니다.
fn main() {
let foo = 10;
println!("The value of foo is {foo}");
}
변수는 기본적으로 불변성이며, 틀:Rust 키워드를 추가하여 변수를 변경할 수 있습니다.
fn main() {
let mut foo = 10;
println!("The value of foo is {foo}");
foo = 20;
println!("The value of foo is now {foo}");
}
Rust는 타입 추론을 지원하여 명시적으로 변수를 선언할 필요가 없지만, 원하는 경우 틀:Rust과 같이 타입을 지정할 수 있습니다.틀:Sfn
구조체
Rust는 틀:Rust 키워드를 사용하여 구조체를 정의합니다.틀:Sfn 틀:Rust 구조체는 두 개의 필드를 가지고 있습니다: 틀:Rust과 틀:Rust입니다.
struct Person {
name: String,
age: u8,
}
변수에 값을 할당하여 구조체를 초기화할 수 있습니다.
fn main() {
let person = Person {
name: String::from("Alice"),
age: 30,
};
println!("Person's name is {} and age is {}", person.name, person.age);
}
구조체는 틀:Rust 블록 내에 구현된 함수와 메서드를 가질 수 있습니다.틀:Sfn
impl Person {
fn new(name: String, age: u8) -> Person {
Person { name, age }
}
fn greet(&self) {
println!("Hello, my name is {} and I am {} years old", self.name, self.age);
}
}
열거형
Rust는 틀:Rust 키워드를 사용하여 열거형을 정의합니다.틀:Sfn
enum Direction {
North,
South,
East,
West,
}
열거형은 매칭 구문을 통해 사용할 수 있습니다.틀:Sfn
fn main() {
let direction = Direction::North;
match direction {
Direction::North => println!("Heading North!"),
Direction::South => println!("Heading South!"),
Direction::East => println!("Heading East!"),
Direction::West => println!("Heading West!"),
}
}
열거형은 다양한 값과 타입을 포함할 수 있습니다.틀:Sfn
enum Option<T> {
Some(T),
None,
}
메모리 안전성
Rust는 소유권 규칙과 차용 검사기를 통해 메모리 안전성을 보장합니다.틀:Sfn 소유권 규칙은 각 값이 단일 소유자를 가지며, 소유자가 범위를 벗어나면 값이 소멸된다는 원칙입니다.틀:Sfn 차용 검사기는 컴파일 시에 참조의 유효성을 검사합니다.틀:Sfn
다음 예제는 소유권과 차용을 설명합니다.
fn main() {
let s1 = String::from("hello");
let s2 = &s1;
println!("{}", s1);
println!("{}", s2);
}
이 예제에서 틀:Rust은 소유권을 가지고 있으며, 틀:Rust는 불변 참조를 통해 차용됩니다. Rust는 다중 불변 참조를 허용하지만, 불변 참조가 존재하는 동안 가변 참조는 허용하지 않습니다.틀:Sfn
Rust는 생성자 및 소멸자와 함께 RAII (Resource Acquisition Is Initialization) 원칙을 사용합니다.틀:Sfn 예를 들어, 틀:Rust는 소멸자가 호출될 때 자동으로 잠금을 해제합니다.
소프트웨어 개발에 사용
Rust는 다양한 소프트웨어 개발 분야에서 사용됩니다.
시스템 프로그래밍
Rust는 시스템 프로그래밍에 적합합니다. 메모리 안전성과 파생형, 함수형 프로그래밍 기능을 통해 높은 성능과 안정성을 제공합니다.[10]
웹 개발
Rust는 웹 애플리케이션 개발에도 사용됩니다. 틀:Rust 및 틀:Rust와 같은 웹 프레임워크는 고성능 서버를 구축하는 데 유용합니다.[32]
게임 개발
Rust는 게임 개발에서도 사용됩니다. 틀:Rust, 틀:Rust, 및 틀:Rust와 같은 게임 엔진이 지원됩니다.[33]
각주
각주
각주
- ↑ Platform Support.
- ↑ Platform Support.
- ↑ The Rust Programming Language. The Rust Programming Language, (2022년 10월 19일).
- ↑ Uniqueness Types.
- ↑ Uniqueness Types.
- ↑ V documentation (Introduction).
- ↑ New challenger joins Rust to topple C language.
- ↑ 틀:Cite book
- ↑ 틀:Cite book
- ↑ 10.0 10.1 틀:Cite journal
- ↑ 11.0 11.1 11.2 Thompson, Clive (2023년 2월 14일). How Rust went from a side project to the world's most-loved programming language (en).
- ↑ Avram, Abel (2012년 8월 3일). Interview on Rust, a Systems Programming Language Developed by Mozilla. InfoQ.
- ↑ Rust logo.
- ↑ Hoare, Graydon (2012년 3월 29일). [rust-dev Rust 0.2 released].
- ↑ Hoare, Graydon (2012년 7월 12일). [rust-dev Rust 0.3 released].
- ↑ Hoare, Graydon (2012년 10월 15일). [rust-dev Rust 0.4 released].
- ↑ 틀:Cite news
- ↑ Lardinois, Frederic (2017년 9월 29일). It's time to give Firefox another chance (en-US).
- ↑ Cimpanu, Catalin (2020년 8월 11일). Mozilla lays off 250 employees while it refocuses on commercial products. ZDNet.
- ↑ Cooper, Daniel (2020년 8월 11일). Mozilla lays off 250 employees due to the pandemic.
- ↑ Tung, Liam. Programming language Rust: Mozilla job cuts have hit us badly but here's how we'll survive (en). ZDNet.
- ↑ Laying the foundation for Rust's future, (2020년 8월 18일).
- ↑ Hello World! (en), (2020년 2월 8일).
- ↑ Mozilla Welcomes the Rust Foundation, (2021년 2월 9일).
- ↑ Amadeo, Ron (2021년 4월 7일). Google is now writing low-level Android code in Rust (en-us).
- ↑ Anderson, Tim (2021년 11월 23일). Entire Rust moderation team resigns (en).
- ↑ Governance Update (en).
- ↑ Claburn, Thomas (2023년 4월 17일). Rust Foundation apologizes for trademark policy confusion (en).
- ↑ Proven, Liam (2019년 11월 27일). Rebecca Rumbul named new CEO of The Rust Foundation (en). “"Both are curly bracket languages, with C-like syntax that makes them unintimidating for C programmers."”
- ↑ Rust는 함수형 프로그래밍 언어인 OCaml의 영향을 많이 받았습니다.
- ↑ Rust의 안전성에는 메모리 안전성, 타입 안전성 및 데이터 레이스 방지 보장이 포함됩니다.
- ↑ Ho, Andy (2023년 1월 15일). Best web frameworks to build a web API (en).
- ↑ Fowler, Adam (2022년 8월 1일). Top 5 Rust game engines (en).
참고 문헌
- Klabnik, Steve, Carol Nichols (2019). 《The Rust Programming Language》. No Starch Press. ISBN 978-1-59327-828-1
- Klabnik, Steve, Carol Nichols (2023). 《Programming Rust: Fast, Safe Systems Development》. O'Reilly Media. ISBN 978-1-4919-2725-0