This is a good article. Click here for more information.

러스트(프로그래밍 언어)

Rust (programming language)
Rust logo; a capital letter R set into a sprocket
패러다임
설계자그레이던 호어
개발자러스트 파운데이션
처음 등장했습니다.2015년 5월 15일, 8년 전(2015-05-15)
안정적 방출
1.76.0[1] / 2024년 2월 8일, 1일(2024년 2월 8일)
타이핑 종목
구현언어
플랫폼크로스 플랫폼[주1]
OS크로스 플랫폼[주2]
면허증.MITApache 2.0[note 3]
파일 이름 확장자.rs, .rlib
웹사이트www.rust-lang.org
에 의해 영향을 받았습니다.
영향받은

Rust는 다중 패러다임, 범용 프로그래밍 언어성능, 유형 안전성, 동시성을 강조합니다. 가비지 콜렉터 없이 메모리 안전(모든 참조가 유효한 메모리를 가리킨다는 의미)을 적용합니다. 메모리 안전을 강화하고 데이터 레이스를 방지하기 위해 "빌려쓰기 검사기"는 컴파일 중 프로그램의 모든 참조의 개체 수명을 추적합니다. Rust는 불변성, 고차 함수, 대수적 데이터 유형을 포함한 함수 프로그래밍의 아이디어에서 영향을 받았습니다. 시스템 프로그래밍에 인기가 있습니다.[13][14][15]

소프트웨어 개발자인 Graydon Hoare는 2006년 Mozilla Research에서 일하는 동안 개인 프로젝트로 Rust를 만들었습니다. 모질라는 2009년에 이 프로젝트를 공식적으로 후원했습니다. 2015년 5월 첫 안정적인 출시 이후 몇 년 동안 Rust는 Amazon, Discord, Dropbox, Google(알파벳), MetaMicrosoft를 포함한 회사에 채택되었습니다. 2022년 12월, C어셈블리 외에 리눅스 커널 개발에 지원되는 최초의 언어가 되었습니다.

Rust는 빠른 채택으로 유명하며 프로그래밍 언어 이론 연구에서 연구되어 왔습니다.[16][17][18][19]

역사

캘리포니아 마운틴뷰에 있는 모질라 재단 본사

오리진스(2006~2012)

Rust는 Mozilla Research 직원 Graydon Hoare가 2006년에 시작한 개인 프로젝트에서 성장했습니다.[20] 모질라는 2010년 모질라가 공식 발표한 서보(Servo)[21]라는 실험용 브라우저 엔진 개발의 일환으로 2009년부터 프로젝트를 후원하기 시작했습니다.[22][23] 이 시기에 러스트 로고는 자전거 기어를 기반으로 개발되었습니다.[24] 같은 해 OCaml로 작성된 초기 컴파일러에서 Rust로 작성된 LLVM을 기반으로 한 셀프 호스팅 컴파일러로 작업이 전환되었습니다. 새로운 Rust 컴파일러는 2011년에 성공적으로 자체 컴파일을 했습니다.[21]

에볼루션(2012~2019)

Rust의 유형 시스템은 버전 0.2, 0.3 및 0.4 사이에서 상당한 변화를 겪었습니다. 2012년 3월에 출시된 버전 0.2에서는 처음으로 수업이 도입되었습니다.[25] 4개월 후, 0.3 버전은 인터페이스를 사용하여 파괴자다형성을 추가했습니다.[26] 2012년 10월에는 상속 수단으로서의 성격을 추가한 버전 0.4가 출시되었습니다. 인터페이스는 특성과 결합되어 별도의 기능으로 제거되었고, 클래스는 구현과 구조화된 유형의 조합으로 대체되었습니다.[27]

2010년대 초반을 거치면서 메모리 버그를 방지하기 위해 소유권 제도를 통한 메모리 관리를 점진적으로 통합하였습니다. 2013년까지 Rust의 쓰레기 수집기는 소유권 규칙이 적용되어 제거되었습니다.[20]

2014년 1월, Dr. Dobb's Journal의 편집장 Andrew Binstock은 Rust가 D, Go, Nim(당시 Nimrod)과 함께 C++의 경쟁자가 될 가능성에 대해 언급했습니다. Binstock에 따르면 Rust는 "매우 우아한 언어"로 널리 인식되었지만 버전에서 버전으로 근본적으로 바뀌었기 때문에 채택이 느려졌습니다.[28] 2015년 5월 15일 첫 번째 안정적인 릴리스인 Rust 1.0이 발표되었습니다.[29][30]

서보 브라우저 엔진의 개발은 러스트의 자체 성장과 함께 계속되었습니다. 2017년 9월 파이어폭스 57은 서보의 구성 요소를 통합한 첫 번째 버전으로 출시되었으며, "파이어폭스 퀀텀"이라는 프로젝트에서 출시되었습니다.[31]

Mozilla 해고 및 Rust Foundation (2020–현재)

2020년 8월, 모질라는 COVID-19 팬데믹으로 인한 기업 구조조정의 일환으로 전 세계 1,000명의 직원 중 250명을 해고했습니다.[32][33] 서보 뒤에 있던 팀이 해체되었습니다. 이 행사는 일부 팀원들이 러스트의 적극적인 기여자였기 때문에 러스트의 미래에 대한 우려를 높였습니다.[34] 그 다음 주에 러스트 코어 팀은 해고의 심각한 영향을 인정하고 러스트 재단에 대한 계획이 진행 중이라고 발표했습니다. 재단의 첫 번째 목표는 모든 상표도메인 이름의 소유권을 얻고 비용에 대한 재정적 책임을 지는 것입니다.[35]

2021년 2월 8일, Rust Foundation의 설립은 5개의 창립 회사(AWS, Huawei, Google, Microsoft, Mozilla)에 의해 발표되었습니다.[36][37] 2021년 4월 6일에 발표된 블로그 게시물에서 구글은 C/C++[38]의 대안으로 안드로이드 오픈 소스 프로젝트 내의 Rust를 지원한다고 발표했습니다.

2021년 11월 22일, 지역 사회 표준과 행동 강령을 집행하는 역할을 맡은 모더레이션 팀은 "핵심 팀이 자신 이외의 누구에게도 책임을 지지 않는 것에 항의하여" 사임을 발표했습니다.[39] 2022년 5월 러스트 코어 팀, 기타 리드 프로그래머 및 러스트 재단 이사회의 특정 구성원들은 이 사건에 대한 대응으로 거버넌스 개혁을 시행했습니다.[40]

러스트 재단은 2023년 4월 6일 새로운 상표 정책 초안을 게시하여 러스트 로고와 이름을 사용할 수 있는 방법에 대한 규칙을 수정하여 러스트 사용자와 기여자의 부정적인 반응을 얻었습니다.[41]

구문 및 특징

러스트의 구문C와 C++[42][43]의 구문과 유사하지만, 많은 기능이 기능 프로그래밍 언어의 영향을 받았습니다.[44] Hoare는 Rust를 "신뢰할 수 없는 C++ 개발자"를 대상으로 한다고 설명하고 안전성, 메모리 레이아웃 제어 및 동시성과 같은 기능을 강조했습니다.[21] 러스트의 안전에는 메모리 안전, 유형 안전 및 데이터 레이스 부족 보장이 포함됩니다.

헬로월드 프로그램

아래는 러스트의 "Hello, World!" 프로그램입니다.fn 키워드는 함수를 나타내며, println! 매크로는 메시지를 표준 출력으로 출력합니다.[45]Rust의 은 세미콜론으로 구분됩니다.

fn 주된() {     println!("안녕, 월드!"); } 

키워드 및 제어 흐름

Rust에서 코드 블록은 곱슬곱슬한 괄호로 구분되며 제어 흐름은 다음과 같은 키워드로 구현됩니다. if, else, while,그리고. for .[46]패턴매칭은 다음을 사용하여 수행할 수 있습니다. match 키워드.[47] 아래 예에서는 설명이 댓글로 제공되며, 이 설명은 다음으로 시작됩니다. //.[48]

fn 주된() {     // 'let mut'으로 가변 변수 정의     // 매크로 벡터를 사용하여 벡터 생성     허락하다 수군거리다 가치 = 벡![1, 2, 3, 4];      위해서 가치 안에 &가치 {         println!("값 = {}", 가치);     }      한다면 가치.() > 5 {         println!("목록이 5개보다 깁니다");     }      // 패턴 매칭     경기 가치.() {         0 => println!("공허"),         1 => println!("하나의 값"),         // 패턴 일치는 정수 범위를 사용할 수 있습니다.         2..=10 => println!("두 개에서 열 개 사이의 값"),         11 => println!("일레븐 값"),         // '_' 패턴은 "와일드카드"라고 불리며, 모든 값과 일치합니다.         _ => println!("많은 값"),     };      // let을 사용하여 술어와 패턴 매칭으로 루프하는 동안     하는 동안에 허락하다 몇개(가치) = 가치.탁탁탁탁탁탁탁탁탁탁탁탁탁탁탁탁탁탁탁.() {         println!("value = {value}"); // 꼬불꼬불한 괄호를 사용하여 로컬 변수 형식 지정     } } 

식 블록

러스트는 컨트롤 플로우 연산자를 포함하여 함수 본체의 거의 모든 부분이 표현식입니다.[49] 보통의 if 표현은 C의 3원 조건 대신에 사용됩니다. 반환이 암시적이므로 함수가 a로 끝날 필요가 없습니다. return 식; 세미콜론을 생략하면 다음과 같은 요인 함수의 재귀적 구현에서 [50]볼 수 있듯이 함수의 마지막 식 값이 반환 값으로 사용됩니다.

fn factor(i: u64) -> u64 { i == 0 { 1 }  {i * factor(i - 1) } 

다음 반복 구현은 다음을 사용합니다. ..= 포함 범위를 만드는 연산자:

fn factor(i: u64) -> u64 {(2..=i)제품 () } 

폐쇄

러스트에서는 익명 함수를 클로저라고 부릅니다.[51] 이들은 다음 구문을 사용하여 정의됩니다.

 <parameter-name>: <type> -> <return-type> {<body>}; 

예:

let f =  x: i32  -> i32 { x * 2 }; 

그러나 유형 추론을 사용하면 컴파일러는 각 매개 변수의 유형과 반환 유형을 추론할 수 있으므로 위의 양식은 다음과 같이 쓸 수 있습니다.

허락하다 f =  x  { x * 2 }; 

단일 표현식(예: 한 줄이 있는 몸체)과 암시적 리턴 유형이 있는 클로저의 경우 컬리 교정기가 생략될 수 있습니다.

허락하다 f =  x  x * 2; 

입력 매개 변수가 없는 클로저는 다음과 같이 기록됩니다.

허락하다 f =    println!("안녕, 세상!"); 

클로저는 함수 포인터를 기대하는 함수의 입력 매개 변수로 전달될 수 있습니다.

//함수 포인터를 인수로 사용하고 // 값 '5'호출하는 함수입니다. fn apply(f: fn(i32) -> i32) -> i32 { // 세미콜론 없음, 암묵적인 반환 f(5) } fn 기본 () { // 닫힘 = x x * 2; println!("{}), apply(f); // 10 println!("{}), f(5); // 10 println!("{}) 

그러나 폐쇄 본문에서 값이 캡처되는 방법을 설명하려면 복잡한 규칙이 필요할 수 있습니다. 다음을 사용하여 구현됩니다. Fn, FnMut,그리고. FnOnce 특성:[52]

  • Fn: 참조로 캡처한 폐쇄(&T참조 액세스 권한만 있는 경우에도 호출할 수 있는 함수에 사용됩니다(with). &) 그들의 환경에.
  • FnMut: 변경 가능한 참조에 의해 캡처된 폐쇄(&mut T). 변경 가능한 참조 액세스가 있는 경우 호출할 수 있는 함수에 사용됩니다(with). &mut) 그들의 환경에.
  • FnOnce: 마감은 값별로 캡처됩니다(T). 한 번만 호출되는 함수에 사용됩니다.

이러한 특성을 통해 컴파일러는 가능한 한 가장 제한적이지 않은 방식으로 변수를 캡처합니다.[52] Rust는 값이 예측 가능하고 명시적인 방식으로 이동할 수 있도록 평생 구조를 따르므로 값이 범위 간에 이동하는 방법을 제어하는 데 도움이 됩니다.[53]

다음은 다음을 사용하여 클로저를 입력 매개변수로 전달하는 방법을 보여줍니다. Fn 특성:

//유형 F의 값( // 'Fn' 특성을 구현하는 일반적인 유형(예: 클로저) // 정의)취하고  '5'로 호출하는 함수입니다. fn apply_by_ref<F>(f: F) -> i32 여기F: Fn(i32) -> i32 {f(5) } fn () {let f = x {println!("I got the value: {}"),x ; x * 2 }; // 반환println!("5 * 2 = {}", apply_by_ref(f)); } // ~~ 프로그램 출력 ~~ // 값을 받았습니다: 5 // 5 * 2 = 10 

이전 기능 정의도 편의상 다음과 같이 단축할 수 있습니다.

fn apply_by_ref(f: imp Fn(i32) -> i32) -> i32 {f(5)} 

종류들

녹은 강하게 타이핑되고 정적 타이핑됩니다. 모든 변수의 유형은 컴파일 시 알아야 합니다. 다른 유형의 변수에 특정 유형의 값을 할당하면 컴파일 오류가 발생합니다. 변수는 키워드로 선언됩니다. let, 유형 추론은 유형을 결정하는 데 사용됩니다.[54] 여러 번 할당된 변수는 키워드로 표시해야 합니다. mut (mutable의 줄임말)[55]

기본 정수 유형은 다음과 같습니다. i32, 그리고 기본 부동 소수점 유형은 f64. 리터럴 번호의 유형이 명시적으로 제공되지 않으면 컨텍스트에서 추론되거나 기본 유형이 사용됩니다.[56]

원시형

녹의 원시 유형 요약
유형 묘사
bool 부울값
  • true
  • false
u8 부호가 없는 8비트 정수(바이트)
  • i8
  • i16
  • i32
  • i64
  • i128
부호가 있는 정수, 최대 128비트
  • u16
  • u32
  • u64
  • u128
부호가 없는 정수, 최대 128비트
  • usize
  • isize
포인터 크기 정수(플랫폼에 따라 크기가 다릅니다)
  • f32
  • f64
부동 소수점 숫자
char
str UTF-8 부호화된 문자열 슬라이스, 원시 문자열 유형. 그것은 일반적으로 차용된 형태로 볼 수 있습니다. &str. 그것은 또한 문자열 리터럴의 유형입니다. &'static str[58]
  • "Hello"
  • "3"
  • "🦀🦀🦀"
[T; N] 배열 – 동일한 유형 T의 N개 객체 모음, 연속 메모리에 저장
  • [2, 4, 6]
  • [0; 100]
  • b"Hello"
[T] 슬라이스 – 동적 크기의 뷰를 연속적인[59] 시퀀스로 표시
  • [1, 2, 3, 4, 5][..i]
  • "Hello, world!".as_bytes()
  • let v = vec![1, 2, 3]; v.as_slice()
(T, U, ..)
튜플 – 유한 이기종 시퀀스
  • () (빈 튜플, Rust의 단위 유형)
  • (5,) ((5) 는 정수로 파싱됩니다.)[60]
  • ("Age", 10)
  • (1, true, "Name")
! 입력하지 않음(도달할 수 없음 값) let x = { return 123 };

표준 라이브러리

표준 라이브러리의 러스트 유형 요약
유형 묘사
Box<T> 힙-할당된 값에[61] 대한 포인터
상자에 표시됨: Box<u8> = Box::new(5); let val: u8 = *boxed; 
String UTF-8 인코딩 스트링(다이나믹)
  • String::new()
  • String::from("Hello")
  • "🦀🦀🦀".to_string()
  • OsStr
  • OsString
플랫폼 네이티브 문자열[note 7](빌려진[62] 문자열 및 동적[63] 문자열)
  • OsStr::new("Hello")
  • OsString::from("world")
  • Path
  • PathBuf
경로(빌려온[64] 경로 및 동적[65] 경로)
  • Path::new("./path/to")
  • PathBuf::from(r"C:.\path\to")
  • CStr
  • CString
C-호환, null-termined 문자열(빌려온[66] 문자열 및 동적[66] 문자열)
  • CStr::from_bytes_with_nul(b"Hello\0").unwrap()
  • CString::new("world").unwrap()
Vec<T> 동적 배열
  • Vec::new()
  • vec![1, 2, 3, 4, 5]
Option<T> 옵션유형
  • None
  • Some(3)
  • Some("hello")
Result<T, E> 결과 유형을 사용한 오류 처리
  • Ok(3)
  • Err("something went wrong")
Rc<T> 기준 계수 포인터[67]
5개 = Rc::new(5); 또한 5개 = 5.clone (); 
Arc<T> 원자, 나사산 안전 기준 계수 포인터[68]
foo = Arc::new(vec![1.0, 2.0]), = foo.clone (); // a를 다른 스레드로 보낼있습니다. 
Cell<T> 가변 메모리 위치[69]
let c = Cell::new(5); c.set(10); 
Mutex<T> 공유 데이터에[70] 대한 뮤텍스 잠금
mutex = Mutex::new(0_u32)설정하고, _guard = mutex.lock ()로 설정합니다. 
RwLock<T> 독자-작가 잠금 장치[71]
잠금 = RwLock::new(5); r1 = 잠금.(). 포장 해제 () 읽기 
Condvar 공유 데이터에[72] 대한 조건부 모니터
 lock, cvar) = (Mutex::new(), Condvar::new(참); // 'Mutex<bool>' 내부의 값이 '참'인 한 기다립니다. _guard = cvar지정합니다.wait_while(lock.lock (). {*pending }이(가) 보류 중인 (),의 포장을 해제합니다. 
Duration 시간[73] 범위를 나타내는 유형
지속시간::from_millis(1) // 1ms 
HashMap<K, V> 해시 테이블[74]
let mut player_stats = HashMap::new(); player_stats.insert ("damage", 1); player_stats.entry (" health") 또는_insert(100); 
BTreeMap<K, V> B-트리[75]
let mut solar_distance = BTreeMap::["수은", 0.4", "비너스", 0.7), solar_distance.entry("지구"). or_insert(1.0); 

Option 값은 다음과 같은 구문 설탕을 사용하여 처리됩니다. if let 내부 값(이 경우 문자열)에 액세스하기 위한 구성:[76]

fn 메인 () {let name1: 옵션<&str> = 없음; // 경우 Some(이름) = name1 {println}로 설정하면 아무것도 출력되지 않습니다!("{name}"); }을(를) name2로 지정합니다. 옵션<&str> = Some("Mathew"); //  경우 Some(이름) = name2 {println!("{name}"; } 

포인터

러스트의 포인터참조 원시 유형 요약
유형 묘사
  • &T
  • &mut T
참고문헌(불변, 불변)
  • let x_ref = &x;
  • let x_ref = &mut x;
  • Option<&T>
  • Option<&mut T>
  • 옵션 포장 참조
  • null 참조일 가능성이 있습니다.
  • None
  • let x_ref = Some(&x);
  • let x_ref = Some(&mut x);
  • Box<T>
  • Option<Box<T>>
힙-할당된 값에 대한 포인터

(또는 옵션으로 포장된 경우 null 포인터일 수 있음)[66]

  • let boxed = Box::new(0);
  • let boxed = Some(Box::new("Hello World"));
  • *const T
  • *mut T
  • 원시 포인터(불변 및 변경 가능)
  • null일 수도 있습니다. unsafe 언급을 생략하다
  • let x_ptr = &x as *const T;
  • let x_ptr = &mut x as *mut T;

Rust는 null 포인터를 사용하여 데이터가 부족하다는 것을 표시하지 않습니다. 그러면 null dereferencing이 발생할 수 있습니다. 이에 따라 기본적인 & 그리고. &mut 참조가 null이 아님을 보장합니다. 대신 녹은 사용합니다. Option 이를 위해: Some(T) 값이 존재함을 나타냅니다. None null 포인터와 유사합니다.[77] Option "null 포인터 최적화"를 구현하여 null 값을 가질 수 없는 유형의 공간 오버헤드를 방지합니다(refe 참조 또는 NonZero 예를 들면.[78]

참조와 달리 원시 포인터 유형 *const 그리고. *mut 널(null)일 수도 있지만, 코드가 다음과 같은 사용을 통해 안전하지 않다고 명시적으로 선언되지 않는 한 참조를 해제하는 것은 불가능합니다. unsafe 막다 디퍼런싱과 달리 안전한 Rust 코드 내부에서 원시 포인터를 만들 수 있습니다.[79]

사용자 정의 유형

사용자 정의 유형은 다음을 사용하여 생성됩니다. struct 또는 enum 키워드.struct 키워드는 여러 관련 값을 그룹화하는 레코드 유형을 나타내는 데 사용됩니다.[80] enums는 기능 프로그래밍 언어에서 볼 수 있는 대수적 데이터 유형과 유사한 기능으로 런타임에 다양한 변형을 취할 수 있습니다.[81] 구조물과 공백 모두 다른 유형의 필드를 포함할 수 있습니다.[82] 다음을 사용하여 동일한 유형의 대체 이름을 정의할 수 있습니다. type 키워드.[83]

impl 키워드는 사용자 정의 유형에 대한 메서드를 정의할 수 있습니다(데이터와 함수는 별도로 정의됨). 구현은 다른 언어 내의 수업과 유사한 역할을 수행합니다.[84]

유형전환

러스트는 원시 유형 간의 암시적 유형 변환(강제)을 제공하지 않습니다. 그러나 명시적 유형 변환(캐스팅)은 다음을 사용하여 수행할 수 있습니다. as 키워드.[85]

허락하다 x = 1000; println!("u16으로 1000개: {}", x ~하듯이 u16); 

소유 및 수명

러스트의 소유권 시스템은 쓰레기 수거기를 사용하지 않고도 메모리 안전을 보장하는 규칙으로 구성되어 있습니다. 컴파일 시 각 값은 해당 값의 소유자라는 변수에 연결되어야 하며 모든 값에는 소유자가 정확히 하나씩 있어야 합니다.[86] 값은 기능 매개변수로 값을 할당하거나 전달하는 방식으로 서로 다른 소유자 간에 이동됩니다. 값을 빌릴 수도 있는데, 이는 소유자에게 반환되기 전에 일시적으로 다른 함수에 전달된다는 것을 의미합니다.[87] 이러한 규칙을 사용하면 Rust는 dangling pointer의 생성 및 사용을 방지할 수 있습니다.[87][88]

fn print_string(s: String) { println!("{}", s); }fn 기본 () {letes = String::from("Hello, World"); print_string(s); // print_string //s에서 소모된 //s가 이동되었으므로 더 이상 사용할 수 없습니다. // 다른 print_string(s); 컴파일 오류가 발생함} 

이러한 소유권 규칙 때문에 러스트 유형은 선형 또는 아핀 유형으로 알려져 있으며, 이는 각 값을 한 번만 사용할 수 있음을 의미합니다. 이는 값의 소유자가 정확성과 할당 해제에 전적으로 책임이 있기 때문에 소프트웨어 오류 격리의 한 형태를 강제합니다.[89]

수명은 일반적으로 러스트의 모든 참조 유형의 암시적 부분입니다. 각 수명은 변수가 유효한 코드의 위치 집합을 포함합니다. 예를 들어, 로컬 변수에 대한 참조는 다음에서 정의된 블록에 해당하는 수명을 갖습니다.[90]

fn 주된() {     허락하다 r = 9;                              // ----------------+- 평생의 일                                             //                         {                                       //                             허락하다 x = 5;                          // -+-- 평생 'b'            println!("r: {}, x: {}", r, x);     //                         }                                       //                                                                 //                         println!("r: {}", r);                   //                     }                                           // ------------------+ 

Rust 컴파일러의 차용 검사기는 수명을 사용하여 기준이 되는 값이 유효한 상태를 유지하도록 합니다. 또한 변경 가능한 참조가 동시에 존재하지 않는 경우에만 변경 가능한 참조가 존재하도록 합니다.[91][92] 위의 예제에서 참조의 주제(변수) x)는 기준 자체의 수명보다 수명이 짧습니다(variable). r), 따라서 빌체커 오류를 방지합니다. x 범위 밖에서 사용되는 것으로부터.[93] Rust의 메모리 및 소유 시스템은 Cyclone 및 ML Kit와 같은 언어의 지역 기반 메모리 관리에서 영향을 받았습니다.[5]

Rust는 수명 매개변수를 사용하여 기능에 의해 생성되고 사용되는 개체의 수명 사이의 관계를 서명 특징으로 정의합니다.[94]

스택 또는 임시 변수가 범위를 벗어날 경우 해당 디스트럭터를 실행하여 삭제됩니다. 디스트럭터는 다음을 통해 프로그램적으로 정의될 수 있습니다. drop 기능. 이 기술은 RAI(Resource Acquisition is Initialization) 설계 패턴을 적용하여 파일 설명자나 네트워크 소켓과 같은 리소스가 개체의 수명에 연결됩니다. 즉 개체가 삭제되면 리소스가 닫힙니다.[95][96]

아래 예제는 문자열에서 일부 구성 옵션을 구문 분석하고 옵션을 포함하는 구조를 만듭니다. 구조는 데이터에 대한 참조만 포함하므로 구조가 유효하게 유지되려면 구조가 참조하는 데이터도 유효해야 합니다. 함수 서명은 다음과 같습니다. parse_config 이 관계를 명시적으로 지정합니다. 이 예에서 명시적인 수명은 더 새로운 Rust 버전에서는 불필요합니다. 수명이 짧을 경우 함수에 수명을 자동으로 할당하는 알고리즘이기 때문입니다.[97]

std::collections 사용::HashMap; //  구조체에는 수명 매개변수 'src'가 하나 있습니다. 이름은 구조물의 정의 내에서만 사용됩니다. #[derive(디버그)] struct Config<'src> {hostname: &'src str, username: &'src str, } ///  함수에는 수명 매개 변수 'cfg' 있습니다. 'cfg'// "config"의 데이터가 적어도 'cfg 수명만큼 오래 지속되도록 설정하는 "config" 매개 변수에 연결됩니다. // 반환된 구조체도 'cfg'평생 사용하므로 최대 'cfg. fnarse_config<'cfg>(config: &'cfg str) -> Config<'cfg> {let key_values: HashMap<_, _> = config .line() .filter(line!line.starts_with('#') .filter_map(lineline.split_once('=') .map((, ) .collect(); Config {hostname: key_values["hostname"], username: key_values["username"], }fn 메인 () {let config(r#"hostname =foobar username=barfoo"#,  ); println!("Parse config: {:#?}",config); } 
Mozilla의 Rust 팀의 Rust에 대한 프레젠테이션(linux.conf.au 컨퍼런스, Hobart, 2017)

메모리 안전성

녹은 메모리 안전하도록 설계되었습니다. null 포인터, dangling 포인터 또는 데이터 레이스를 허용하지 않습니다.[98][99][100] 데이터 값은 고정된 양식 집합을 통해서만 초기화할 수 있으며, 모든 양식은 입력을 이미 초기화해야 합니다.[101]

안전하지 않은 코드는 다음을 사용하여 이러한 제한 사항 중 일부를 뒤집을 수 있습니다. unsafe 키워드.[79] 안전하지 않은 코드는 휘발성 메모리 액세스, 아키텍처별 고유 기능, 유형 펀닝 및 인라인 어셈블리와 같은 낮은 수준의 기능에도 사용될 수 있습니다.[102]

메모리 관리

녹은 쓰레기 수거를 사용하지 않습니다. 메모리 및 기타 리소스는 대신 "리소스 획득이 초기화" 규칙을 통해 관리되며,[103] 선택적인 참조 계수가 있습니다. Rust는 매우 낮은 오버헤드로 리소스의 결정론적 관리를 제공합니다.[104] 값은 기본적으로 스택에 할당되며 모든 동적 할당은 명시적이어야 합니다.[105]

다음을 사용하는 기본 제공 참조 유형 & 기호는 런타임 참조 카운트를 포함하지 않습니다. 컴파일 시 기본 포인터의 안전성과 유효성을 확인하여 댕글링 포인터 및 기타 형태의 정의되지 않은 동작을 방지합니다.[106] Rust의 유형 시스템은 양식의 공유된 불변 참조를 분리합니다. &T 양식의 고유하고 변경 가능한 참조로부터. &mut T. 변경 가능한 참조는 변경 불가능한 참조로 강제될 수 있지만 그 반대의 경우는 그렇지 않습니다.[107]

다형성

제네릭

러스트의 더 발전된 기능에는 일반 기능 사용이 포함됩니다. 일반 함수에는 동일한 함수를 다양한 변수 유형에 적용할 수 있는 일반 매개 변수가 제공됩니다. 이 기능은 중복 코드[108] 줄이고 매개 변수 다형성이라고 합니다.

다음 프로그램은 일반 함수를 사용하여 덧셈을 구현하는 두 가지의 합을 계산합니다.

std:ops::Add; // sum은 하나의 유형 매개변수Tfn sum<T>(num1: T, num2: T) -> T: Add<Output = T>, // T는 Add trait을 구현해야 합니다. Add trait } fn 메인 () {let result1 = sum(10, 20); println!("합: {}", 결과1); // 합: 30let 결과2 =(10.23, 20.45); println!("합: {}", 결과2); // 합: 30.68 } 

컴파일 시, 다음과 같은 다형성 함수 sum 코드가 필요로 하는 특정 유형으로 인스턴스화됩니다. 이 경우 정수의 합과 플로트의 합입니다.

제네릭은 동일한 코드를 반복하지 않고 다른 유형에 대해 동작을 구현할 수 있도록 기능에 사용할 수 있습니다. 일반 함수는 실제 유형을 알지 못한 채 다른 일반 함수와 관련하여 작성할 수 있습니다.[109]

특성들

Rust의 유형 시스템은 Haskell 언어의 유형 클래스에서 영감을 [5]받아 다양한 유형 간의 공유 행동을 정의하기 위해 특성이라는 메커니즘을 지원합니다. 예를 들면. Add 특성은 부유물과 정수에 대해 구현될 수 있으며, 이는 추가될 수 있습니다; 그리고 Display 또는 Debug 문자열로 변환할 수 있는 모든 유형에 대해 특성을 구현할 수 있습니다. 특성은 실제 유형을 알지 못한 채 다양한 유형에 대한 일련의 일반적인 행동을 제공하는 데 사용될 수 있습니다. 이 시설은 임시 다형성으로 알려져 있습니다.

일반 함수는 특정 특성 또는 특성을 구현하도록 일반 유형을 제한할 수 있습니다. 예를 들어, add_one 함수는 구현할 유형이 필요할 수 있습니다. Add. 즉, 일반 함수를 정의하는 즉시 유형을 확인할 수 있습니다. 제네릭의 구현은 C++ 템플릿의 일반적인 구현과 유사합니다. 각 인스턴스화에 대해 별도의 코드 사본이 생성됩니다. 이를 단형화라고 하며 일반적으로 Java 및 Haskell에서 사용되는 유형 삭제 체계와 대조됩니다. 키워드를 통해 유형 지우기도 사용할 수 있습니다. dyn (dynamic의 줄임말)[110] 단형화는 사용된 각 유형에 대해 코드를 복제하기 때문에 특정 사용 사례에 대해 더 최적화된 코드를 생성할 수 있지만, 출력 바이너리의 컴파일 시간과 크기도 증가합니다.[111]

사용자 정의 유형에 대한 방법을 정의하는 것 외에도 impl 키워드를 사용하여 유형에 대한 특성을 구현할 수 있습니다.[84] 특성은 구현 시 추가로 파생된 방법을 제공할 수 있습니다.[112] 예를 들어, 특성은 Iterator 를 필요로 합니다. next 형식에 대해 정의된 메서드입니다. 일단은. next 방법이 정의되고 특성은 반복기를 통해 다음과 같은 일반적인 기능적 도우미 방법을 제공할 수 있습니다. map 또는 filter.[113]

특성은 상속 설계 원리보다 구성을 따릅니다.[114] 즉, 특성은 필드 자체를 정의할 수 없으며, 메소드를 정의하고 구현에 혼합할 수 있는 제한된 형태의 상속을 제공합니다.

형질대상

Rust 특성은 정적 디스패치를 사용하여 구현되며, 이는 컴파일 시 모든 값의 유형을 알 수 있음을 의미하지만, Rust는 동적 디스패치(오리 타이핑이라고도 함)를 수행하기 위해 특성 개체라고 하는 기능도 사용합니다.[115] 동적으로 디스패치된 형질 객체는 구문을 사용하여 선언됩니다. dyn Tr 어디에 Tr 특성입니다. 특성 개체는 동적 크기이므로 다음과 같은 포인터 뒤에 배치해야 합니다. Box.[116]다음[116] 예제에서는 다음을 사용하여 각 개체를 인쇄할 수 있는 개체 목록을 작성합니다. Display 특성:

std::fmt:Display사용합니다. v: Vec<Box<dyn Display> = vec![ Box::new(3), Box:new(5.0), Box:new("hi"), ]; v {println!("{x}")x에 대해 사용합니다. } 

목록의 요소가 구현되지 않는 경우 Display 특성, 컴파일 시간 오류를 유발합니다.[117]

반복기

Rust의 루프의 경우 반복기 유형에 대한 작업으로 기능적 스타일로 작동합니다. 예를 들어, 루프에서

위해서 x 안에 0..100 {    f(x); } 

0..100 유형의 값입니다. Range 그것을 구현하는 것은 Iterator 특성; 코드는 기능을 적용합니다. f 반복기에 의해 반환되는 각 요소. 반복기는 반복기 위의 기능과 결합할 수 있습니다. map, filter,그리고. sum. 예를 들어, 다음은 3의 배수인 1과 100 사이의 모든 숫자를 합산한 것입니다.

(1..=100).거름망( &x  x % 3 == 0).() 

매크로

매크로를 사용하여 Rust 언어를 확장할 수 있습니다.

선언적 매크로

선언 매크로("macro by sample"이라고도 함)는 패턴 매칭을 사용하여 확장을 결정하는 매크로입니다.[118][119]

절차적 매크로

프로시저 매크로는 다른 구성 요소가 컴파일되기 전에 컴파일러의 입력 토큰 스트림을 실행하고 수정하는 러스트 함수입니다. 일반적으로 선언적 매크로보다 유연하지만 복잡성 때문에 유지 관리가 더 어렵습니다.[120][121]

절차적 매크로는 세 가지 맛이 있습니다.

  • 함수형 매크로 custom!(...)
  • 매크로를 유도합니다. #[derive(CustomDerive)]
  • 속성 매크로 #[custom_attribute]

println! 매크로는 함수와 같은 매크로의 한 예입니다.serde_derive macro는[122] JSON과 같은 다양한 형식으로 데이터를 읽고 쓰기 위한 코드를 생성하는 데 일반적으로 사용되는 라이브러리를 제공합니다. 속성 매크로는 일반적으로 다음과 같은 언어 바인딩에 사용됩니다. extendr R에 대한 Rust 바인딩 라이브러리.[123]

다음 코드는 다음의 사용을 보여줍니다. Serialize, Deserialize,그리고. DebugJSON 읽기 및 쓰기를 구현하기 위한 -derived procedure macro 및 디버깅을 위한 구조를 포맷하는 기능.

Point라는 이름의 Rust 구조물을 나타내는 UML 다이어그램입니다.
serde_json 사용:{Serialize, Deserialize}; #[derive(Serialize, deserialize, deserialize, debug)] 구조  {x:i32, y:i32, }fn 기본 () {let point = Point {x:1, y:2}; 직렬화= serde_json::to_string(&point)로 설정합니다.포장 해제 (); println!("serial= {}", 직렬화됨); 역직렬화됨:  = serde_json:: from_str(&serial화됨)포장을 벗기는 (); println!("deserialized = {:?}",병렬화); } 

변증법적 매크로

러스트는 함수에서 다양한 인수를 지원하지 않습니다. 대신 매크로를 사용합니다.[124]

macro_rules! { // 단일 'eval'(eval $e:express) => {{letval: = $e를 사용합니다; // 형식정수로 인쇄합니다!("{} = {}"), 문자열화!{$e}, val); }}}; // 복수의 'eval'을 재귀적으로 분해합니다(eval $e:expr, $(eval $es:expr, +) => {{계산!{ eval $e} 계산! { (eval $es), + } } }; } fn main() { 계산! { // Look ma! 변증법적 계산!`! eval 1 + 2, eval 3 + 4, eval (2 * 3) + 1 } 
Rust는 A를 통해 C의 Variadic 시스템과 상호 작용할 수 있습니다. c_variadic 기능 스위치 다른 C 인터페이스와 마찬가지로 시스템이 고려됩니다. unsafe 녹이 [125]슬도록

C 및 C++와의 인터페이스

Rust에는 Rust의 C와 같은 언어로 작성된 코드를 호출하고 해당 언어의 Rust 코드를 호출하는 데 모두 사용할 수 있는 FFI(Foreign Function Interface)가 있습니다. 2023년 현재 C++[126]로의 호출 또는 호출을 위한 CXX라는 외부 라이브러리가 존재합니다. Rust와 C는 메모리에서 구조물을 배치하는 방식이 다르므로 Rust 구조물은 다음과 같습니다. #[repr(C)] 속성, 동등한 C 구조와 동일한 레이아웃을 강제합니다.[127]

생태계

카고(Cargo)로 러스트(Rust) 프로그램 작성

Rust 생태계에는 컴파일러, 표준 라이브러리 및 소프트웨어 개발을 위한 추가 구성 요소가 포함됩니다. 구성 요소 설치는 일반적으로 에 의해 관리됩니다. rustup, 러스트 프로젝트에서 개발한 [128]러스트 공구 체인 설치기

컴파일러

Rust 컴파일러의 이름은 rustc, Rust 코드를 LLVM 중간 표현(LLVM IR)이라는 낮은 수준의 언어로 변환합니다. 그런 다음 LLVM을 하위 구성 요소로 호출하여 IR 코드를 기계 코드로 변환합니다. 그런 다음 링커를 사용하여 여러 상자를 하나의 실행 파일 또는 이진 파일로 결합합니다.[129][130]

표준 라이브러리

Rust 표준 라이브러리는 다음과 같은 핵심 데이터 구조를 포함하여 널리 사용되는 많은 사용자 정의 데이터 유형을 정의하고 구현합니다. Vec, Option,그리고. HashMap, 스마트 포인터 유형도 제공합니다. Rust는 또한 속성을 사용하여 대부분의 표준 라이브러리를 제외하는 방법을 제공합니다. #![no_std]; 이를 통해 종속성 코드를 제거하거나 자체 핵심 데이터 구조를 제공하려는 임베디드 장치와 같은 애플리케이션을 사용할 수 있습니다. 내부적으로 표준도서관은 세 부분으로 나뉘는데, core, alloc,그리고. std,어디에 std 그리고. alloc 에 의해 제외됩니다. #![no_std].[131]

2022년 6월 crates.io 스크린샷

화물

카고는 러스트의 빌드 시스템패키지 관리자입니다. 공식 레지스트리에 유지 관리되는 crates라고 하는 패키지를 다운로드, 컴파일, 배포 및 업로드합니다. 또한 클리피 및 기타 러스트 구성 요소의 프론트 엔드 역할을 합니다.[16]

기본적으로 카고는 사용자 contrib의 레지스트리 crates.io 에서 종속성을 소스하지만 로컬 파일 시스템의 Git 리포지토리 및 상자 및 기타 외부 소스도 종속성으로 지정할 수 있습니다.

러스트프트

Rustfmt는 Rust의 코드 포맷터입니다. 별도의 지정이 없는 한 공통 스타일에 따라 코드를 생성하기 위해 공백과 들여쓰기 형식을 지정합니다. 독립 실행형 프로그램으로 호출하거나 카고를 통한 러스트 프로젝트에서 호출할 수 있습니다.[133]

hello world Rust 프로그램에서의 Clippy 출력 예시

클리피

클리피는 러스트 코드의 정확성, 성능 및 가독성을 향상시키기 위한 러스트의 내장 보풀 도구입니다. 2024년 현재 700개 이상의 규칙을 가지고 있습니다.[134][135]

버전 관리 시스템

Rust 1.0에 이어 매일 출시되는 야간 버전으로 새로운 기능이 개발되었습니다. 각 6주 출시 주기 동안 야간 버전의 변경 사항은 베타 버전으로 출시되는 반면, 이전 베타 버전의 변경 사항은 안정적인 새로운 버전으로 출시됩니다.[136]

2~3년마다 새로운 '판'이 제작됩니다. 프로모션과 같이 제한적으로 변경할 수 있도록 에디션이 출시됩니다. await 비동기/await 기능을 지원하는 키워드입니다. 다른 버전을 대상으로 하는 상자는 서로 상호 운용할 수 있으므로 발신자 또는 해당 종속성이 이전 버전을 대상으로 하는 경우에도 새 버전으로 업그레이드할 수 있습니다. 새 에디션으로의 마이그레이션은 자동화된 툴링으로 지원할 수 있습니다.[137]

IDE 지원

Rust의 가장 인기 있는 언어 서버Rust Analyzer로, 2022년 7월에 기존 언어 서버인 RLS를 공식적으로 대체했습니다.[138] Rust Analyzer는 IDE텍스트 편집기에 Rust 프로젝트에 대한 정보, 자동 완성을 포함한 기본 기능 및 편집 중 컴파일 오류 표시를 제공합니다.[139]

성능

일반적으로 Rust의 메모리 안전 보장은 런타임 오버헤드를 부과하지 않습니다.[140] 주목할 만한 예외는 런타임에 확인되는 어레이 인덱싱이지만 성능에 영향을 미치지 않는 경우가 많습니다.[141] 가비지 컬렉션을 수행하지 않기 때문에 러스트는 다른 메모리 안전 언어보다 빠른 경우가 많습니다.[142][143][144]

러스트는 안전한 모드와 안전하지 않은 모드 두 가지를 제공합니다. 안전 모드는 대부분의 Rust가 기록되는 "일반" 모드입니다. 안전하지 않은 모드에서는 개발자가 코드의 메모리 안전에 책임이 있으므로 컴파일러가 너무 제한적인 경우에 유용합니다.[145]

Rust의 많은 기능들은 소위 비용이 전혀 들지 않는 추상화이며, 이는 컴파일 시 최적화되고 런타임 패널티가 발생하지 않는다는 것을 의미합니다.[146] 소유 및 차입 시스템은 구문 분석과 같은 성능에 민감한 일부 작업에 대해 제로 카피 구현을 허용합니다.[147] 동적 특성 개체에서 호출되는 메서드를 제외하고 정적 디스패치는 기본적으로 메서드 호출을 제거하는 데 사용됩니다.[148] 컴파일러는 또한 인라인 확장을 사용하여 함수 호출과 정적으로 디스패치된 메서드 호출을 제거합니다.[149]

Rust는 LLVM을 활용하기 때문에 LLVM의 성능 향상은 Rust로도 이어집니다.[150] Rust는 C 및 C++와 달리 구조 및 열거 요소의[151] 순서를 변경하여 메모리의 구조 크기를 줄이고 메모리 정렬을 개선하며 캐시 액세스 효율성을 향상시킬 수 있습니다.[152]

입양

모질라의 서보 브라우저 엔진의 초기 홈페이지

러스트는 다양한 도메인에 걸친 소프트웨어에 사용되었습니다. 러스트는 처음에 삼성과 협력하여 실험적인 병렬 브라우저 엔진인 서보를 개발하는 과정에서 모질라의 자금 지원을 받았습니다.[153] 서보 엔진의 구성 요소는 나중에 파이어폭스의 기반이 되는 게코 브라우저 엔진에 통합되었습니다.[154] 2023년 1월, 구글(알파벳)은 크롬크롬에 서드파티 러스트 라이브러리를 지원한다고 발표했습니다.OS 코드 베이스.[155]

러스트는 대형 웹 서비스의 여러 백엔드 소프트웨어 프로젝트에서 사용됩니다. Cisco가 소유한 DNS 해결 서비스인 OpenDNS는 내부적으로 Rust를 사용합니다.[156][157] Amazon Web Services는 이르면 2017년부터 Rust에서 가상화 솔루션인 Firecracker,[159] 리눅스 배포컨테이너화 솔루션인 Bottlerocket,[160] 비동기 네트워킹 스택인 Tokio [158]등의 프로젝트 개발을 시작했습니다.[161] IoT 기기에서 Azure 서비스를 실행하는 데 사용되는 플랫폼인 Microsoft Azure IoT Edge는 Rust에 구성 요소를 구현했습니다.[162] 마이크로소프트는 또한 러스트를 사용하여 WebAssemblyKubernetes와 함께 컨테이너화된 모듈을 실행합니다.[163] 콘텐츠 전달 네트워크 서비스를 제공하는 회사인 Cloudflare방화벽 패턴 매칭 엔진에 Rust를 사용합니다.[164][165]

운영 체제에서 Rust for Linux 프로젝트는 리눅스 커널에 Rust 지원을 추가하기 위해 2021년에 시작되었습니다.[166] Rust 지원(C어셈블리어 지원)이 6.1 버전에서 공식적으로 추가되었습니다.[167] 마이크로소프트는 2020년에 마이크로소프트 윈도우의 일부가 러스트(Rust)로 다시 작성되고 있다고 발표했습니다. 2023년 현재 텍스트 레이아웃 및 글리프 렌더를 위한 시스템 라이브러리인 DWriteCore는 약 152,000줄의 Rust 코드와 약 96,000줄의 C++ 코드를 보유하고 있으며, 경우에 따라 5~15%의 성능 증가를 보였습니다.[168] 구글은 2021년 안드로이드 운영체제의 러스트 지원도 발표했습니다.[169][170] 러스트(Rust)로 작성된 다른 운영 체제로는 "유닉스 계열" 운영 체제이자 마이크로커널인 레독스([171]Redox)와 모듈식 상태 관리 기능을 갖춘 실험적 운영 체제인 테세우스(Thesus)가 있습니다.[172][173] Rust는 파일 시스템 관리자인[174][175] stratisSystem76데스크톱 환경인 COSMIC을 포함한 명령줄 도구 및 운영 체제 구성 요소에도 사용됩니다.[176][177]

Ruffle, Adobe Flash SWF 파일용 웹 에뮬레이터

웹 개발에서 npm 패키지 매니저는 2019년부터 Rustin 프로덕션을 사용하기 시작했습니다.[178][179][180] 자바스크립트TypeScript용 보안 런타임인 DenoV8, Rust, Tokio로 구축되어 있습니다.[181] 이 분야에서 주목할 만한 다른 채택으로는 오픈 소스 SWF 에뮬레이터인 러플([182]Ruffle)과 오픈 소스 블록체인암호화폐 플랫폼인 폴카닷(Polkadot)이 있습니다.[183]

인스턴트 메시징 소셜 플랫폼인 디스코드는 클라이언트 측 비디오 인코딩뿐만 아니라 백엔드의 일부에 러스트를 사용합니다.[184] 2021년 드롭박스는 스크린, 비디오 및 이미지 캡처 서비스에 러스트를 사용한다고 발표했습니다.[185] 페이스북(Meta)은 머큐리얼 버전 제어 시스템의 서버인 러스트 포 모노노크를 사용했습니다.[186]

2023년 스택 오버플로 개발자 설문조사에서 응답자의 13%가 최근 러스트에서 광범위한 개발을 수행한 적이 있습니다.[187] 이 조사는 또한 동일한 언어로 계속 작업하는 데 관심이 있는 개발자의 수를 기반으로 2016년부터 2023년까지 매년 러스트를 "가장 사랑받는 프로그래밍 언어"로 선정했습니다(포함).[188][note 8] 2023년 러스트는 6번째 "가장 원하는 기술"로 선정되었으며, 현재 러스트에서 일하고 있지 않은 개발자의 31%가 이에 대한 관심을 표명했습니다.[187]

지역 사회

A bright orange crab icon
일부 러스트 사용자들은 자신들을 러스트아인(갑각류의 말장난)이라고 부르며 비공식 마스코트로 오렌지 크랩인 페리스(Ferris)를 채택했습니다.[189]

러스트 파운데이션

러스트 파운데이션
형성2021년 2월 8일, 3년 전(2021-02-08)
설립자
유형비영리단체
위치
셰인 밀러
레베카 룸불
웹사이트foundation.rust-lang.org

Rust Foundation미국에서 설립된 비영리 회원 단체로, 법인으로서 기술 프로젝트를 지원하고 상표 및 인프라 자산을 관리하는 데 도움을 주는 것을 주요 목적으로 합니다.[190][43]

2021년 2월 8일 설립된 아마존 웹 서비스, 화웨이, 구글, 마이크로소프트, 모질라 등 5개 기업이 참여했습니다.[191] 재단 이사회는 셰인 밀러가 의장을 맡고 있습니다.[192] 2021년 말부터 레베카 룸불(Rebecca Rumbul) 전무 겸 CEO입니다.[193] 이에 앞서 애슐리 윌리엄스는 임시 전무이사였습니다.[194]

거버넌스 팀

Rust 프로젝트는 개발의 다양한 하위 영역을 담당하는 으로 구성됩니다. 컴파일러 팀은 컴파일러 내부를 개발, 관리 및 최적화하고 언어 팀은 새로운 언어 기능을 설계하고 구현을 돕습니다. 러스트 프로젝트 웹사이트에는 2024년 1월 현재 9개의 최상위 팀이 나열되어 있습니다.[195] 팀 간 대표자들은 Rust 프로젝트를 전체적으로 감독하는 리더십 위원회를 구성합니다.[196]

참고 항목

메모들

  1. ^ x86-64, ARM, MIPS, RISC-V, WebAssembly, i686, AArch64, PowerPCs390x에 대한 빌드 도구, 호스트 도구 및 표준 라이브러리 지원을 포함합니다.[2]
  2. ^ Windows, Linux, macOS, FreeBSD, NetBSDIllumos를 포함합니다. Android, iOS, Haiku, RedoxFoxia의 호스트 빌드 도구는 공식적으로 출하되지 않으며, 이러한 운영 체제는 대상으로 지원됩니다.[2]
  3. ^ 제3자 종속성, 예를 들어 LLVM 또는 MSVC는 자체 라이센스의 적용을 받습니다.[3][4]
  4. ^ a b c d e f 이 리터럴은 명시적 접미사를 사용합니다. 이 접미사는 컨텍스트에서 유형을 추론할 수 있는 경우 필요하지 않습니다.
  5. ^ 로 해석됩니다. i32 기본적으로 또는 문맥에서 추론된
  6. ^ 컨텍스트에서 추론된 유형
  7. ^ 유닉스 시스템에서는 내부 0바이트가 없는 UTF-8 문자열인 경우가 많습니다. Windows에서는 내부 0바이트가 없는 UTF-16 문자열입니다. 이거랑 다르게. str 그리고. String 항상 유효한 UTF-8이며 내부 0을 포함할 수 있습니다.
  8. ^ 즉, '지난 1년간 [Rust와 함께하는] 광범위한 개발 작업'(13.05%)을 한 응답자 중 '향후 1년간 [Rust] 작업'(84.66%)[187]에도 관심을 나타낸 비율이 러스트가 가장 높았습니다.

참고문헌

도서출처

  • Gjengset, Jon (2021). Rust for Rustaceans (1st ed.). No Starch Press. ISBN 9781718501850. OCLC 1277511986.
  • Klabnik, Steve; Nichols, Carol (2019-08-12). The Rust Programming Language (Covers Rust 2018). No Starch Press. ISBN 978-1-7185-0044-0.
  • Blandy, Jim; Orendorff, Jason; Tindall, Leonora F. S. (2021). Programming Rust: Fast, Safe Systems Development (2nd ed.). O'Reilly Media. ISBN 978-1-4920-5254-8. OCLC 1289839504.
  • McNamara, Tim (2021). Rust in Action. Manning Publications. ISBN 978-1-6172-9455-6. OCLC 1153044639.
  • Klabnik, Steve; Nichols, Carol (2023). The Rust programming language (2nd ed.). No Starch Press. ISBN 978-1-7185-0310-6. OCLC 1363816350.

다른이들

  1. ^ "Announcing Rust 1.76.0". 2024-02-08. Retrieved 2024-02-08.
  2. ^ a b "Platform Support". The rustc book. Retrieved 2022-06-27.
  3. ^ "The Rust Programming Language". The Rust Programming Language. 2022-10-19.
  4. ^ a b c d e f g h i j k l "Influences - The Rust Reference". The Rust Reference. Archived from the original on 2023-11-26. Retrieved 2023-12-31.
  5. ^ "Uniqueness Types". Rust Blog. Retrieved 2016-10-08. Those of you familiar with the Elm style may recognize that the updated --explain messages draw heavy inspiration from the Elm approach.
  6. ^ "Uniqueness Types". Idris 1.3.3 documentation. Retrieved 2022-07-14. They are inspired by ... ownership types and borrowed pointers in the Rust programming language.
  7. ^ "Microsoft opens up Rust-inspired Project Verona programming language on GitHub". ZDNet. Archived from the original on 2020-01-17. Retrieved 2020-01-17.
  8. ^ Jaloyan, Georges-Axel (2017-10-19). "Safe Pointers in SPARK 2014". arXiv:1710.07047 [cs.PL].
  9. ^ Lattner, Chris. "Chris Lattner's Homepage". Nondot.org. Archived from the original on 2018-12-25. Retrieved 2019-05-14.
  10. ^ "V documentation (Introduction)". GitHub. Retrieved 2023-11-04.
  11. ^ Yegulalp, Serdar (2016-08-29). "New challenger joins Rust to topple C language". InfoWorld. Retrieved 2022-10-19.
  12. ^ Eshwarla, Prabhu (2020-12-24). Practical System Programming for Rust Developers: Build fast and secure software for Linux/Unix systems with the help of practical examples. Packt Publishing Ltd. ISBN 978-1-80056-201-1.
  13. ^ Blandy, Jim; Orendorff, Jason (2017-11-21). Programming Rust: Fast, Safe Systems Development. O'Reilly Media, Inc. ISBN 978-1-4919-2725-0.
  14. ^ Blanco-Cuaresma, Sergi; Bolmont, Emeline (2017-05-30). "What can the programming language Rust do for astrophysics?". Proceedings of the International Astronomical Union. 12 (S325): 341–344. arXiv:1702.02951. Bibcode:2017IAUS..325..341B. doi:10.1017/S1743921316013168. ISSN 1743-9213. S2CID 7857871.
  15. ^ a b Perkel, Jeffrey M. (2020-12-01). "Why scientists are turning to Rust". Nature. 588 (7836): 185–186. Bibcode:2020Natur.588..185P. doi:10.1038/d41586-020-03382-2. PMID 33262490. S2CID 227251258. Archived from the original on 2022-05-06. Retrieved 2022-05-15.
  16. ^ "Computer Scientist proves safety claims of the programming language Rust". EurekAlert!. Archived from the original on 2022-02-24. Retrieved 2022-05-15.
  17. ^ Jung, Ralf; Jourdan, Jacques-Henri; Krebbers, Robbert; Dreyer, Derek (2017-12-27). "RustBelt: securing the foundations of the Rust programming language". Proceedings of the ACM on Programming Languages. 2 (POPL): 66:1–66:34. doi:10.1145/3158154. hdl:21.11116/0000-0003-34C6-3. S2CID 215791659. Archived from the original on 2022-06-11. Retrieved 2022-05-15.
  18. ^ Jung, Ralf (2020). Understanding and evolving the Rust programming language (PhD thesis). Saarland University. doi:10.22028/D291-31946. Archived from the original on 2022-03-08. Retrieved 2022-05-15.
  19. ^ a b Thompson, Clive (2023-02-14). "How Rust went from a side project to the world's most-loved programming language". MIT Technology Review. Retrieved 2023-02-23.
  20. ^ a b c Avram, Abel (2012-08-03). "Interview on Rust, a Systems Programming Language Developed by Mozilla". InfoQ. Archived from the original on 2013-07-24. Retrieved 2013-08-17.
  21. ^ Asay, Matt (2021-04-12). "Rust, not Firefox, is Mozilla's greatest industry contribution". TechRepublic. Retrieved 2022-07-07.
  22. ^ Hoare, Graydon (2010-07-07). Project Servo (PDF). Mozilla Annual Summit 2010. Whistler, Canada. Archived (PDF) from the original on 2017-07-11. Retrieved 2017-02-22.
  23. ^ "Rust logo". bugzilla.mozilla.org. Retrieved 2024-02-02.
  24. ^ Hoare, Graydon (2012-03-29). "[rust-dev] Rust 0.2 released". mail.mozilla.org. Retrieved 2022-06-12.
  25. ^ Hoare, Graydon (2012-07-12). "[rust-dev] Rust 0.3 released". mail.mozilla.org. Archived from the original on 2022-08-24. Retrieved 2022-06-12.
  26. ^ Hoare, Graydon (2012-10-15). "[rust-dev] Rust 0.4 released". mail.mozilla.org. Archived from the original on 2021-10-31. Retrieved 2021-10-31.
  27. ^ Binstock, Andrew (2014-01-07). "The Rise And Fall of Languages in 2013". Dr. Dobb's Journal. Archived from the original on 2016-08-07. Retrieved 2022-11-20.
  28. ^ "Version History". GitHub. Archived from the original on 2015-05-15. Retrieved 2017-01-01.
  29. ^ The Rust Core Team (2015-05-15). "Announcing Rust 1.0". Rust Blog. Archived from the original on 2015-05-15. Retrieved 2015-12-11.
  30. ^ Lardinois, Frederic (2017-09-29). "It's time to give Firefox another chance". TechCrunch. Retrieved 2023-08-15.
  31. ^ Cimpanu, Catalin (2020-08-11). "Mozilla lays off 250 employees while it refocuses on commercial products". ZDNet. Archived from the original on 2022-03-18. Retrieved 2020-12-02.
  32. ^ Cooper, Daniel (2020-08-11). "Mozilla lays off 250 employees due to the pandemic". Engadget. Archived from the original on 2020-12-13. Retrieved 2020-12-02.
  33. ^ Tung, Liam. "Programming language Rust: Mozilla job cuts have hit us badly but here's how we'll survive". ZDNet. Archived from the original on 2022-04-21. Retrieved 2022-04-21.
  34. ^ "Laying the foundation for Rust's future". Rust Blog. 2020-08-18. Archived from the original on 2020-12-02. Retrieved 2020-12-02.
  35. ^ "Hello World!". Rust Foundation. 2020-02-08. Archived from the original on 2022-04-19. Retrieved 2022-06-04.
  36. ^ "Mozilla Welcomes the Rust Foundation". Mozilla Blog. 2021-02-09. Archived from the original on 2021-02-08. Retrieved 2021-02-09.
  37. ^ Amadeo, Ron (2021-04-07). "Google is now writing low-level Android code in Rust". Ars Technica. Archived from the original on 2021-04-08. Retrieved 2021-04-08.
  38. ^ Anderson, Tim (2021-11-23). "Entire Rust moderation team resigns". The Register. Retrieved 2022-08-04.
  39. ^ "Governance Update". Inside Rust Blog. Retrieved 2022-10-27.
  40. ^ Claburn, Thomas (2023-04-17). "Rust Foundation apologizes for trademark policy confusion". The Register. Retrieved 2023-05-07.
  41. ^ Proven, Liam (2019-11-27). "Rebecca Rumbul named new CEO of The Rust Foundation". The Register. Retrieved 2022-07-14. Both are curly bracket languages, with C-like syntax that makes them unintimidating for C programmers.
  42. ^ a b Brandon Vigliarolo (2021-02-10). "The Rust programming language now has its own independent foundation". TechRepublic. Retrieved 2022-07-14.
  43. ^ Klabnik & Nichols 2019, p. 263.
  44. ^ Klabnik & Nichols 2019, pp. 5-6.
  45. ^ Klabnik & Nichols 2019, pp. 49-57.
  46. ^ Klabnik & Nichols 2019, pp. 104-109.
  47. ^ Klabnik & Nichols 2019, p. 49.
  48. ^ Klabnik & Nichols 2019, pp. 50-53.
  49. ^ Tyson, Matthew (2022-03-03). "Rust programming for Java developers". InfoWorld. Retrieved 2022-07-14.
  50. ^ "Closures - Rust By Example". doc.rust-lang.org.
  51. ^ a b "As input parameters - Rust By Example". doc.rust-lang.org.
  52. ^ "Lifetimes - Rust By Example". doc.rust-lang.org.
  53. ^ Klabnik & Nichols 2019, 24페이지
  54. ^ Klabnik & Nichols 2019, 32-33 페이지.
  55. ^ Klabnik & Nichols 2019, 36-38 페이지.
  56. ^ Klabnik & Nichols 2019, 39-40 페이지.
  57. ^ "str – Rust". doc.rust-lang.org. Retrieved 2023-06-23.
  58. ^ "slice – Rust". doc.rust-lang.org. Retrieved 2023-06-23.
  59. ^ "Tuples". Rust By Example. Retrieved 2023-10-01.
  60. ^ "std::boxed – Rust". doc.rust-lang.org. Retrieved 2023-06-24.
  61. ^ "OsStr in std::ffi – Rust". doc.rust-lang.org. Retrieved 2023-10-02.
  62. ^ "OsString in std::ffi – Rust". doc.rust-lang.org. Retrieved 2023-10-02.
  63. ^ "Path in std::path – Rust". doc.rust-lang.org. Retrieved 2023-10-02.
  64. ^ "PathBuf in std::path – Rust". doc.rust-lang.org. Retrieved 2023-10-02.
  65. ^ a b c "std::boxed – Rust". doc.rust-lang.org. Retrieved 2023-06-23.
  66. ^ "Rc in std::rc – Rust". doc.rust-lang.org. Retrieved 2023-06-24.
  67. ^ "Arc in std::sync – Rust". doc.rust-lang.org. Retrieved 2023-06-24.
  68. ^ "Cell in std::cell – Rust". doc.rust-lang.org. Retrieved 2023-06-24.
  69. ^ "Mutex in std::sync – Rust". doc.rust-lang.org. Retrieved 2023-06-24.
  70. ^ "RwLock in std::sync – Rust". doc.rust-lang.org. Retrieved 2023-06-24.
  71. ^ "Condvar in std::sync – Rust". doc.rust-lang.org. Retrieved 2023-06-24.
  72. ^ "Duration in std::time – Rust". doc.rust-lang.org. Retrieved 2023-06-24.
  73. ^ "HashMap in std::collections – Rust". doc.rust-lang.org. Retrieved 2023-06-24.
  74. ^ "BTreeMap in std::collections – Rust". doc.rust-lang.org. Retrieved 2023-06-24.
  75. ^ 맥나마라 2021.
  76. ^ Klabnik & Nichols 2019, pp. 101-104.
  77. ^ "std::option - Rust". doc.rust-lang.org. Retrieved 2023-11-12.
  78. ^ a b Klabnik & Nichols 2019, 페이지 418-427
  79. ^ Klabnik & Nichols 2019, p. 83.
  80. ^ Klabnik & Nichols 2019, p. 97.
  81. ^ Klabnik & Nichols 2019, pp. 98–101.
  82. ^ Klabnik & Nichols 2019, 페이지 438-440.
  83. ^ a b Klabnik & Nichols 2019, pp. 93.
  84. ^ "Casting - Rust By Example". doc.rust-lang.org.
  85. ^ Klabnik & Nichols 2019, pp. 59-61.
  86. ^ a b Klabnik & Nichols 2019, pp. 63-68.
  87. ^ Klabnik & Nichols 2019, 페이지 74-75.
  88. ^ Balasubramanian, Abhiram; Baranowski, Marek S.; Burtsev, Anton; Panda, Aurojit; Rakamarić, Zvonimir; Ryzhyk, Leonid (2017-05-07). "System Programming in Rust". Proceedings of the 16th Workshop on Hot Topics in Operating Systems. HotOS '17. New York, NY, US: Association for Computing Machinery. pp. 156–161. doi:10.1145/3102980.3103006. ISBN 978-1-4503-5068-6. S2CID 24100599. Archived from the original on 2022-06-11. Retrieved 2022-06-01.
  89. ^ Klabnik & Nichols 2019, p. 194.
  90. ^ Klabnik & Nichols 2019, pp. 75, 134.
  91. ^ Shamrell-Harrington, Nell. "The Rust Borrow Checker – a Deep Dive". InfoQ. Retrieved 2022-06-25.
  92. ^ Klabnik & Nichols 2019, pp. 194-195.
  93. ^ Klabnik & Nichols 2019, pp. 192-204.
  94. ^ "Drop in std::ops – Rust". doc.rust-lang.org. Retrieved 2022-07-16.
  95. ^ Gomez, Guillaume; Boucher, Antoni (2018). "RAII". Rust programming by example (First ed.). Birmingham, UK: Packt Publishing. p. 358. ISBN 9781788390637.
  96. ^ Klabnik & Nichols 2019, pp. 201-203.
  97. ^ Rosenblatt, Seth (2013-04-03). "Samsung joins Mozilla's quest for Rust". CNET. Archived from the original on 2013-04-04. Retrieved 2013-04-05.
  98. ^ Brown, Neil (2013-04-17). "A taste of Rust". Archived from the original on 2013-04-26. Retrieved 2013-04-25.
  99. ^ "Races – The Rustonomicon". doc.rust-lang.org. Archived from the original on 2017-07-10. Retrieved 2017-07-03.
  100. ^ "The Rust Language FAQ". static.rust-lang.org. 2015. Archived from the original on 2015-04-20. Retrieved 2017-04-24.
  101. ^ McNamara 2021, p. 139, 376–379, 395.
  102. ^ "RAII – Rust By Example". doc.rust-lang.org. Archived from the original on 2019-04-21. Retrieved 2020-11-22.
  103. ^ "Abstraction without overhead: traits in Rust". Rust Blog. Archived from the original on 2021-09-23. Retrieved 2021-10-19.
  104. ^ "Box, stack and heap". Rust By Example. Retrieved 2022-06-13.
  105. ^ Klabnik & Nichols 2019, pp. 70-75.
  106. ^ Klabnik & Nichols 2019, p. 323.
  107. ^ Klabnik & Nichols 2019, pp. 171-172.
  108. ^ Klabnik & Nichols 2019, pp. 171–172, 205.
  109. ^ Klabnik & Nichols 2019, pp. 181, 182.
  110. ^ 쩡셋 2021, 25페이지.
  111. ^ Klabnik & Nichols 2019, 182-184 페이지.
  112. ^ Klabnik & Nichols 2019, pp. 281-283
  113. ^ Milanesi, Carlo (2018). Beginning Rust: from novice to professional. Berkeley, CA: Apress. p. 283. ISBN 978-1-4842-3468-6. OCLC 1029604209.
  114. ^ "Using Trait Objects That Allow for Values of Different Types – The Rust Programming Language". doc.rust-lang.org. Retrieved 2022-07-11.
  115. ^ Klabnik & Nichols 2019, pp. 441-442.
  116. ^ Klabnik & Nichols 2019, 페이지 379-380.
  117. ^ "Macros By Example". The Rust Reference. Retrieved 2023-04-21.
  118. ^ Klabnik & Nichols 2019, pp. 446–448.
  119. ^ "Procedural Macros". The Rust Programming Language Reference. Archived from the original on 2020-11-07. Retrieved 2021-03-23.
  120. ^ Klabnik & Nichols 2019, 페이지 449-455
  121. ^ "Serde Derive". Serde Derive documentation. Archived from the original on 2021-04-17. Retrieved 2021-03-23.
  122. ^ "extendr_api – Rust". Extendr Api Documentation. Archived from the original on 2021-05-25. Retrieved 2021-03-23.
  123. ^ "Variadics". Rust By Example.
  124. ^ "2137-variadic". The Rust RFC Book.
  125. ^ "Safe Interoperability between Rust and C++ with CXX". InfoQ. 2020-12-06. Archived from the original on 2021-01-22. Retrieved 2021-01-03.
  126. ^ "Type layout – The Rust Reference". doc.rust-lang.org. Retrieved 2022-07-15.
  127. ^ Blandy, Orendorff & Tindall 2021, 6-8페이지
  128. ^ McNamara 2021, 페이지 411-412.
  129. ^ "Overview of the compiler". Rust Compiler Development Guide. Retrieved 2023-06-02.
  130. ^ Gjengset 2021, p. 213-215.
  131. ^ Simone, Sergio De (2019-04-18). "Rust 1.34 Introduces Alternative Registries for Non-Public Crates". InfoQ. Retrieved 2022-07-14.
  132. ^ Klabnik & Nichols 2019, 페이지 511-512
  133. ^ Clippy, The Rust Programming Language, 2023-11-30, retrieved 2023-11-30
  134. ^ "Clippy Lints". The Rust Programming Language. Retrieved 2023-11-30.
  135. ^ Klabnik & Nichols 2019, 부록 G – 러스트의 제조 방법과 "밤샘 러스트"
  136. ^ Blandy, Orendorff & Tindall 2021, pp. 176-177
  137. ^ Anderson, Tim (2022-07-05). "Rust team releases 1.62, sets end date for deprecated language server". DEVCLASS. Retrieved 2022-07-14.
  138. ^ Klabnik & Nichols 2023, p. 623.
  139. ^ 맥나마라 2021, 페이지 11.
  140. ^ Popescu, Natalie; Xu, Ziyang; Apostolakis, Sotiris; August, David I.; Levy, Amit (2021-10-15). "Safer at any speed: automatic context-aware safety enhancement for Rust". Proceedings of the ACM on Programming Languages. 5 (OOPSLA). Section 2. doi:10.1145/3485480. S2CID 238212612. p. 5: We observe a large variance in the overheads of checked indexing: 23.6% of benchmarks do report significant performance hits from checked indexing, but 64.5% report little-to-no impact and, surprisingly, 11.8% report improved performance ... Ultimately, while unchecked indexing can improve performance, most of the time it does not.
  141. ^ Anderson, Tim. "Can Rust save the planet? Why, and why not". The Register. Retrieved 2022-07-11.
  142. ^ Balasubramanian, Abhiram; Baranowski, Marek S.; Burtsev, Anton; Panda, Aurojit; Rakamarić, Zvonimir; Ryzhyk, Leonid (2017-05-07). "System Programming in Rust". Proceedings of the 16th Workshop on Hot Topics in Operating Systems. Whistler BC Canada: ACM. pp. 156–161. doi:10.1145/3102980.3103006. ISBN 978-1-4503-5068-6. S2CID 24100599.
  143. ^ Yegulalp, Serdar (2021-10-06). "What is the Rust language? Safe, fast, and easy software development". InfoWorld. Retrieved 2022-06-25.
  144. ^ Wróbel, Krzysztof (2022-04-11). "Rust projects – why large IT companies use Rust?". Archived from the original on 2022-12-27.
  145. ^ 맥나마라 2021, p. 19, 27.
  146. ^ Couprie, Geoffroy (2015). "Nom, A Byte oriented, streaming, Zero copy, Parser Combinators Library in Rust". 2015 IEEE Security and Privacy Workshops. pp. 142–148. doi:10.1109/SPW.2015.31. ISBN 978-1-4799-9933-0. S2CID 16608844.
  147. ^ 맥나마라 2021, 20페이지
  148. ^ "Code generation – The Rust Reference". doc.rust-lang.org. Retrieved 2022-10-09.
  149. ^ "How Fast Is Rust?". The Rust Programming Language FAQ. Archived from the original on 2020-10-28. Retrieved 2019-04-11.
  150. ^ Farshin, Alireza; Barbette, Tom; Roozbeh, Amir; Maguire Jr, Gerald Q.; Kostić, Dejan (2021). "PacketMill: Toward per-Core 100-GBPS networking". Proceedings of the 26th ACM International Conference on Architectural Support for Programming Languages and Operating Systems. pp. 1–17. doi:10.1145/3445814.3446724. ISBN 9781450383172. S2CID 231949599. Retrieved 2022-07-12. ... While some compilers (e.g., Rust) support structure reordering [82], C & C++ compilers are forbidden to reorder data structures (e.g., struct or class) [74] ...
  151. ^ "Type layout". The Rust Reference. Retrieved 2022-07-14.
  152. ^ Lardinois, Frederic (2015-04-03). "Mozilla And Samsung Team Up To Develop Servo, Mozilla's Next-Gen Browser Engine For Multicore Processors". TechCrunch. Archived from the original on 2016-09-10. Retrieved 2017-06-25.
  153. ^ Keizer, Gregg (2016-10-31). "Mozilla plans to rejuvenate Firefox in 2017". Computerworld. Retrieved 2023-05-13.
  154. ^ "Supporting the Use of Rust in the Chromium Project". Google Online Security Blog. Retrieved 2023-11-12.
  155. ^ Shankland, Stephen (2016-07-12). "Firefox will get overhaul in bid to get you interested again". CNET. Retrieved 2022-07-14.
  156. ^ Security Research Team (2013-10-04). "ZeroMQ: Helping us Block Malicious Domains in Real Time". Cisco Umbrella. Retrieved 2023-05-13.
  157. ^ "How our AWS Rust team will contribute to Rust's future successes". Amazon Web Services. 2021-03-03. Archived from the original on 2022-01-02. Retrieved 2022-01-02.
  158. ^ "Firecracker – Lightweight Virtualization for Serverless Computing". Amazon Web Services. 2018-11-26. Archived from the original on 2021-12-08. Retrieved 2022-01-02.
  159. ^ "Announcing the General Availability of Bottlerocket, an open source Linux distribution built to run containers". Amazon Web Services. 2020-08-31. Archived from the original on 2022-01-02. Retrieved 2022-01-02.
  160. ^ "Why AWS loves Rust, and how we'd like to help". Amazon Web Services. 2020-11-24. Archived from the original on 2020-12-03. Retrieved 2022-04-21.
  161. ^ Nichols, Shaun (2018-06-27). "Microsoft's next trick? Kicking things out of the cloud to Azure IoT Edge". The Register. Archived from the original on 2019-09-27. Retrieved 2019-09-27.
  162. ^ Tung, Liam. "Microsoft: Why we used programming language Rust over Go for WebAssembly on Kubernetes app". ZDNet. Archived from the original on 2022-04-21. Retrieved 2022-04-21.
  163. ^ "How we made Firewall Rules". The Cloudflare Blog. 2019-03-04. Retrieved 2022-06-11.
  164. ^ "Enjoy a slice of QUIC, and Rust!". The Cloudflare Blog. 2019-01-22. Retrieved 2022-06-11.
  165. ^ Anderson, Tim (2021-12-07). "Rusty Linux kernel draws closer with new patch". The Register. Retrieved 2022-07-14.
  166. ^ "A first look at Rust in the 6.1 kernel [LWN.net]". lwn.net. Retrieved 2023-11-11.
  167. ^ Claburn, Thomas (2023-04-27). "Microsoft is rewriting core Windows libraries in Rust". The Register. Retrieved 2023-05-13.
  168. ^ "Rust in the Android platform". Google Online Security Blog. Archived from the original on 2022-04-03. Retrieved 2022-04-21.
  169. ^ Amadeo, Ron (2021-04-07). "Google is now writing low-level Android code in Rust". Ars Technica. Archived from the original on 2021-04-08. Retrieved 2022-04-21.
  170. ^ Yegulalp, Serdar. "Rust's Redox OS could show Linux a few new tricks". InfoWorld. Archived from the original on 2016-03-21. Retrieved 2016-03-21.
  171. ^ Anderson, Tim (2021-01-14). "Another Rust-y OS: Theseus joins Redox in pursuit of safer, more resilient systems". The Register. Retrieved 2022-07-14.
  172. ^ Boos, Kevin; Liyanage, Namitha; Ijaz, Ramla; Zhong, Lin (2020). Theseus: an Experiment in Operating System Structure and State Management. pp. 1–19. ISBN 978-1-939133-19-9.
  173. ^ Sei, Mark (2018-10-10). "Fedora 29 new features: Startis now officially in Fedora". Marksei, Weekly sysadmin pills. Archived from the original on 2019-04-13. Retrieved 2019-05-13.
  174. ^ Proven, Liam (2022-07-12). "Oracle Linux 9 released, with some interesting additions". The Register. Retrieved 2022-07-14.
  175. ^ Patel, Pratham (2022-01-14). "I Tried System76's New Rust-based COSMIC Desktop!". It's FOSS News – Development Updates. It's FOSS News. Retrieved 2023-01-10.
  176. ^ "Pop!_OS by System76". pop.system76.com. System76, Inc. Retrieved 2023-01-10.
  177. ^ Simone, Sergio De. "NPM Adopted Rust to Remove Performance Bottlenecks". InfoQ. Retrieved 2023-11-20.
  178. ^ Lyu, Shing (2020), Lyu, Shing (ed.), "Welcome to the World of Rust", Practical Rust Projects: Building Game, Physical Computing, and Machine Learning Applications, Berkeley, CA: Apress, pp. 1–8, doi:10.1007/978-1-4842-5599-5_1, ISBN 978-1-4842-5599-5, retrieved 2023-11-29
  179. ^ Lyu, Shing (2021), Lyu, Shing (ed.), "Rust in the Web World", Practical Rust Web Projects: Building Cloud and Web-Based Applications, Berkeley, CA: Apress, pp. 1–7, doi:10.1007/978-1-4842-6589-5_1, ISBN 978-1-4842-6589-5, retrieved 2023-11-29
  180. ^ Hu, Vivian (2020-06-12). "Deno Is Ready for Production". InfoQ. Retrieved 2022-07-14.
  181. ^ Abrams, Lawrence (2021-02-06). "This Flash Player emulator lets you securely play your old games". BleepingComputer. Retrieved 2021-12-25.
  182. ^ Kharif, Olga (2020-10-17). "Ethereum Blockchain Killer Goes By Unassuming Name of Polkadot". Bloomberg L.P. Retrieved 2021-07-14.
  183. ^ Howarth, Jesse (2020-02-04). "Why Discord is switching from Go to Rust". Archived from the original on 2020-06-30. Retrieved 2020-04-14.
  184. ^ The Dropbox Capture Team. "Why we built a custom Rust library for Capture". Dropbox.Tech. Archived from the original on 2022-04-06. Retrieved 2022-04-21.
  185. ^ "A brief history of Rust at Facebook". Engineering at Meta. 2021-04-29. Archived from the original on 2022-01-19. Retrieved 2022-04-21.
  186. ^ a b c "Stack Overflow Developer Survey 2023". Stack Overflow. Retrieved 2023-06-25.
  187. ^ Claburn, Thomas (2022-06-23). "Linus Torvalds says Rust is coming to the Linux kernel". The Register. Retrieved 2022-07-15.
  188. ^ "Getting Started". rust-lang.org. Archived from the original on 2020-11-01. Retrieved 2020-10-11.
  189. ^ Tung, Liam (2021-02-08). "The Rust programming language just took a huge step forwards". ZDNet. Retrieved 2022-07-14.
  190. ^ Krill, Paul. "Rust language moves to independent foundation". InfoWorld. Archived from the original on 2021-04-10. Retrieved 2021-04-10.
  191. ^ Vaughan-Nichols, Steven J. (2021-04-09). "AWS's Shane Miller to head the newly created Rust Foundation". ZDNet. Archived from the original on 2021-04-10. Retrieved 2021-04-10.
  192. ^ Vaughan-Nichols, Steven J. (2021-11-17). "Rust Foundation appoints Rebecca Rumbul as executive director". ZDNet. Archived from the original on 2021-11-18. Retrieved 2021-11-18.
  193. ^ "The Rust programming language now has its own independent foundation". TechRepublic. 2021-02-10. Archived from the original on 2021-11-18. Retrieved 2021-11-18.
  194. ^ "Governance". The Rust Programming Language. Archived from the original on 2022-05-10. Retrieved 2022-05-07.
  195. ^ "Introducing the Rust Leadership Council". Rust Blog. Retrieved 2024-01-12.

추가읽기

  • Blandy, Jim; Orendorff, Jason; Tindall, Leonora F. S. (2021-07-06). Programming Rust: Fast, Safe Systems Development. O'Reilly Media. ISBN 978-1-4920-5259-3.

외부 링크