Rust 프로그래밍 언어의 새로운 기능

CChatGPT8
12 Min Read


Rust 프로그래밍 언어의 독특한 접근 방식을 통해 C, C++, Go 및 기타 사용하는 언어보다 타협이 적고 더 나은 코드가 생성됩니다. 또한 정기적으로, 종종 매달 업데이트됩니다.

최신 Rust 버전을 다운로드할 수 있는 곳

Rustup을 통해 이전 버전의 Rust가 이미 설치되어 있는 경우 다음 명령을 통해 최신 버전에 액세스할 수 있습니다.

$ rustup update stable

Rust 1.72.0의 새로운 기능

8월 24일에 발표된 Rust 1.72.0에서는 개발자가 다음을 사용하여 조건부로 코드를 활성화할 수 있습니다. cfg 구성 조건 확인을 위해 연산자는 특정 크레이트 기능에만 특정 기능을 제공하거나 특정 플랫폼에서만 특정 기능을 제공합니다. 이전에는 이와 같이 비활성화된 항목이 사실상 컴파일러에 표시되지 않았습니다. Rust 1.72.0에서는 컴파일러가 이름을 기억하고 cfg 해당 항목의 조건. 예를 들어 크레이트 기능을 활성화해야 하기 때문에 개발자가 호출하려고 한 기능을 사용할 수 없는 경우 보고할 수 있습니다.

또한 Rust 1.72.0에서는 const 이제 평가 시간은 무제한입니다. Rust는 이전에 사용자가 제공한 오류를 방지하기 위해 주어진 상수 평가의 일부로 실행되는 명령문의 최대 수를 제한했습니다. const 컴파일 타임 무한 루프에 빠지거나 컴파일 시 무한한 시간이 걸리는 평가. 이제 개발자는 무제한으로 작업을 수행할 수 있습니다. const 컴파일 타임에 평가합니다.

Rust 1.72.0의 다른 곳에서는 Clippy의 여러 린트가 Rustc로 추가되었습니다. 그리고 다음을 포함한 다수의 API가 안정화되었습니다. CStr::from_bytes_with_nul 그리고 CStr::to_Bytes.

향후 릴리스에서 Rust 개발 팀은 최소 지원 Windows 버전을 Windows 10으로 늘릴 계획입니다. Rust 1.75는 Windows 7, Windows 8 및 Windows 8.1을 공식적으로 지원하는 마지막 Rust 버전이 될 예정입니다.

Rust 1.72.0은 8월 3일의 Rust 1.71.1을 따릅니다. 이 버전은 종속성을 추출할 때 Cargo 패키지 관리자가 마스크 해제를 준수하지 않는 상황을 수정했습니다. 이로 인해 로컬 공격자가 다른 사용자의 추출된 소스 코드 캐시를 편집할 수 있었습니다. . Rust 1.71.1은 또한 Rustup 툴체인 설치 프로그램 사용자의 Bash 완성이 중단되는 것을 포함하여 Rust 1.71.0에 도입된 여러 회귀 문제를 해결했습니다.

Rust 1.71.0의 새로운 기능

Rust 1.71.0은 7월 13일에 소개되었습니다. 이 버전을 사용하면 Windows 플랫폼의 Rust는 빌드 시 해당 라이브러리를 사용할 필요 없이 새로운 라이브러리를 사용하여 동적 라이브러리의 함수를 사용할 수 있습니다. kind="raw-dylib”" 옵션 #https://www.infoworld.com/article/3267624/whats-new-in-the-rust-language.html#tk.rss_all. 이렇게 하면 사용자가 특히 크로스 컴파일에서 문제가 되는 라이브러리를 설치하지 않아도 되며 링크할 라이브러리의 스텁 버전을 상자에 담아 배송할 필요가 없습니다. Rust 1.71.0은 또한 새로운 기호를 통해 명명된 기호가 아닌 서수로 DLL에서 제공하는 바인딩 기호를 지원합니다. #link_ordinal 기인하다.

Rust 1.71.0의 새로운 기능과 개선된 기능:

  • 디버깅 시각화를 위해 새로운 속성에 대한 지원이 안정화되었습니다. #[debug_visualizer(natvis_file = "...")] 그리고 #[debug_visualizer(gdb_script_file = "...")], 이를 통해 Natvis XML 프레임워크 설명과 GDB 스크립트를 Rust 라이브러리에 삽입하여 해당 라이브러리에서 생성된 데이터 구조를 검사할 때 디버거 출력을 향상할 수 있습니다. Rust는 한동안 표준 라이브러리에 대해 유사한 스크립트를 패키지했습니다. 이 기능을 통해 도서관 작성자는 사용자에게 유사한 경험을 제공할 수 있습니다.
  • Rust 1.71.0이 안정화되었습니다. c-unwind 및 기타 -unwind 접미사 ABI 변형. 각 ABI는 다음이 없는 동일한 ABI와 동일합니다. -unwind그 외에는 -unwind 해제 작업(패닉 또는 C++ 스타일 예외)이 ABI 경계를 넘을 때 동작은 안전하다고 정의됩니다. 을 위한 panic-unwind, 이는 예외가 발생한 것과 동일한 언어에서 발견되는 한 프로세스를 종료하지 않고 한 언어의 예외가 다른 언어의 스택을 해제할 수 있는 유효한 방법입니다. 을 위한 panic=abort, 일반적으로 프로세스가 즉시 중단됩니다. 이 초기 안정화를 위해 기존 ABI는 변경되지 않습니다. 이를 풀어내는 것은 정의되지 않은 동작으로 남아 있습니다. 향후 Rust 릴리스에서는 이 기능을 안정화하는 마지막 부분으로 관련 RFC에 지정된 동작과 일치하도록 이러한 ABI를 수정할 예정이며 일반적으로 경계에서 중단됩니다. 개발자는 ABI 경계를 넘어 해제해야 하는 경우 미래에도 사용할 수 있도록 코드에서 새로운 해제 ABI 변형을 사용하는 것이 좋습니다.
  • 다양한 *-linux-musl 타겟은 Linux 시스템 호출 API 위에 구축된 C 표준 라이브러리의 구현인 musl 1.2.3과 함께 제공됩니다. 대부분의 사용자는 이로 인해 영향을 받지 않을 것으로 예상됩니다.
  • 다음과 같은 여러 API가 안정화되었습니다. CStr::is_empty 그리고 BuildHasher::hash_one.

Rust 1.70의 새로운 기능

2023년 6월 1일에 출시된 Rust 1.70은 기본적으로 crates.io에서 인덱스를 읽기 위해 Cargo에 대한 “스파스(sparse)” 프로토콜을 활성화합니다. 이 기능은 Rust 1.68에서 안정화되었지만 crates.io와 함께 사용하려면 여전히 구성이 필요합니다. crates.io 인덱스에서 정보를 가져올 때 사용자는 성능이 크게 향상되는 것을 볼 수 있습니다.

또한 Rust 1.70에서는 공유 데이터의 일회성 초기화를 위해 두 가지 유형이 안정화되었습니다. OnceCell 그리고 스레드로부터 안전한 대응물, OnceLock. 이는 즉각적인 건설이 원하지 않거나 심지어 가능하지 않은 곳(예: 비-건축) 어디에서나 사용될 수 있습니다.const 전역 변수의 데이터.

새로 안정화된 IsTerminal 특성에는 주어진 파일 설명자 또는 핸들이 터미널 또는 TTY를 나타내는지 확인하는 단일 방법이 있습니다. 이는 외부 특성에 존재했던 기능을 표준화하는 또 다른 사례입니다. atty 그리고 is-terminalC 라이브러리 사용 isatty Unix 대상에서는 작동하고 다른 곳에서는 유사한 기능을 수행합니다. 버전 1.70은 명명된 수준의 디버그 정보도 지원합니다. Rust의 안정 및 베타 빌드는 더 이상 불안정한 빌드를 허용하지 않습니다. test 옵션을 사용하면 문서에 나온 대로 야간에만 사용할 수 있습니다. Rust 1.70은 또한 다음과 같은 여러 API를 안정화합니다. NonZero*::MIN/MAX 그리고 BinaryHeap::retain.

Rust 1.69의 새로운 기능

2023년 4월 20일에 발표된 Rust 1.69는 새로운 주요 기능을 제공하지 않지만 500명이 넘는 기여자의 3,000개 이상의 커밋을 포함하여 많은 작은 개선 사항이 포함되어 있다고 Rust 릴리스 팀이 밝혔습니다.

Rust 1.29에서는 다음을 도입했습니다. cargo fix 일부 간단한 컴파일러 경고를 자동으로 수정하는 하위 명령입니다. 그 이후로 자동으로 수정할 수 있는 경고 수가 계속해서 늘어났습니다. 또한 일부 간단한 Clippy 경고를 자동으로 수정하는 지원이 추가되었습니다. 이러한 기능에 주의를 끌기 위해 Cargo는 이제 다음 실행을 제안합니다. cargo fix 또는 cargo clippy --fix 자동으로 수정할 수 있는 경고를 감지한 경우:

warning: unused import: `std::hash::Hash`
--> src/main.rs:1:5
|
1| use std::hash::Hash;
|     ^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default

warning: `foo` (bin "foo") generated 1 warning (run `cargo fix --bin "foo"` to apply 1 suggestion)

여기에 표시된 전체 Cargo 호출은 단일 상자에 수정 사항을 정확하게 적용하는 데만 필요합니다. 작업공간의 모든 기본 멤버에 수정사항을 적용하려면 다음을 실행하세요. cargo fix 추가 인수 없이 필요한 전부입니다.

또한 Rust 1.69에서는 기본적으로 디버그 정보가 더 이상 빌드 스크립트에 포함되지 않습니다. 컴파일 속도를 높이기 위해 Cargo는 이제 기본적으로 빌드 스크립트에서 디버그 정보를 내보내는 것을 방지합니다. 빌드 스크립트가 성공적으로 실행되면 눈에 보이는 효과는 없습니다. 마지막으로 다음과 같은 여러 API가 안정화되었습니다. cstr::from_bytes_until_nul 그리고 core::ffi::FromBytesUntilNulError.

Rust 1.68의 새로운 기능

3월 9일에 발표된 Rust 1.68.0은 기본 crates.io에 게시된 항목에 대한 http//index.crates.io/의 인프라와 함께 상자 색인을 읽기 위한 Cargo 패키지 관리자의 “스파스” 레지스트리 프로토콜을 안정화합니다. 기재. 여전히 기본값인 이전 Git 프로토콜은 레지스트리에서 사용 가능한 모든 크레이트를 색인화하는 저장소를 복제합니다. 그러나 Git 프로토콜은 리포지토리 업데이트가 지연되면서 확장 제한에 도달하기 시작했습니다. 새로운 프로토콜은 crates.io에 액세스할 때 성능을 향상시킬 것으로 예상됩니다.

crates.io와 함께 스파스 프로토콜을 사용하려면 환경 변수를 설정하십시오. CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse또는 .cargo/config/toml 추가할 파일:

[registries.crates-io]protocol = "sparse"

스파스 프로토콜은 Rust 1.70.0에서 crates.io의 기본값이 되도록 설정되어 있으며 몇 달 안에 출시될 예정입니다.

Rust 1.68.0의 다른 곳에서는 새로운 기능이 추가되었습니다. pin! 매크로는 Pin<&mut T> 에서 T 로컬 상태에서 익명으로 캡처된 표현입니다. 이를 종종 스택 고정이라고 부르지만 해당 “스택”은 캡처된 상태일 수도 있습니다. async fn 또는 차단. 이 매크로는 일부 크레이트와 유사하지만 표준 라이브러리는 다음을 활용할 수 있습니다. Pin 좀 더 표현식과 유사한 매크로를 위한 내부 및 임시 수명 연장입니다.

마지막으로 Rust 1.68.0은 다음을 포함한 일부 API를 안정화합니다. {core, std}::pin::pin! 그리고 impl DerefMut for PathBuf. 그리고 Rust의 Android 플랫폼 지원은 이제 NDK r25 도구 세트를 대상으로 합니다.

Rust 1.67의 새로운 기능

1월 26일 공개된 Rust 1.67에는 다음과 관련된 컴파일러 경고가 추가되었습니다. #[must_use] 그리고 async fn. 러스트에서는 async 주석이 달린 함수 #[must_use] 이제 반환된 결과의 출력에 해당 속성을 적용합니다. impl Future. 그만큼 Future 특성은 이미 다음과 같이 주석 처리되어 있습니다. #[must_use]그래서 구현하는 유형 [Future] 자동으로 #[must_use]. 이전에는 다음의 출력을 표시할 방법이 없었습니다. Future 그 자체로 중요하며 어떤 방식으로든 사용해야 합니다. Rust 1.67에서는 이제 출력이 사용되지 않으면 컴파일러가 경고합니다.

또한 Rust 1.67에서는 표준 라이브러리의 다중 생산자, 단일 소비자 채널 구현이 업데이트되었습니다. Rust의 표준 라이브러리에는 버전 1.0 이전부터 다중 생산자, 단일 소비자 채널이 있었습니다. Rust 1.67에서는 구현이 다음을 기반으로 전환되었습니다. crossbeam-channel. 릴리스에는 API 변경 사항이 포함되어 있지 않지만 새로운 구현에서는 버그가 수정되고 구현의 성능과 유지 관리성이 향상됩니다.

Rust 1.67은 다음과 같은 여러 API를 안정화합니다. {integer}::checked_ilog, {integer}::ilog그리고 NonZero*::BITS. 다른 여러 API는 이제 안정적입니다. const 다음을 포함한 컨텍스트 char::from_u32, char::from_digit그리고 char::to_digit. 그리고 잘못된 리터럴은 더 이상 오류가 아닙니다. cfg(FALSE).

참고: 1월 10일에 릴리스된 Rust 1.66.1 stable에서는 SSH를 사용하여 종속성 또는 레지스트리 인덱스를 복제할 때 Cargo 패키지 관리자가 SSH 호스트 키를 확인하지 않는 상황을 수정했습니다. 이 취약점은 cve.org에서 추적되었으며 자세한 내용은 권고에 나와 있습니다.

Rust 1.66의 새로운 기능

2022년 12월 15일에 도입된 Rust 1.66을 사용하면 이제 정수 표현이 있는 열거형에 필드가 있는 경우에도 명시적 판별자를 사용할 수 있습니다. 이전에는 개발자가 표현이 포함된 열거형에 대해 명시적 판별자를 사용할 수 있었지만 변형에 필드가 없는 경우에만 가능했습니다. 명시적 판별자는 열거형 표현이 두 언어 모두에서 일치해야 하는 언어 경계를 넘어 값을 전달할 때 유용합니다.

Rust 1.66에서도:

  • 새롭게 안정화된 black_box 함수는 전달된 값을 가져와서 바로 다시 전달합니다. 컴파일러는 다음을 처리합니다. black_box 입력으로 무엇이든 할 수 있고 어떤 값이든 반환할 수 있는 함수입니다. 이는 벤치마킹 중이나 컴파일러가 생성하는 기계어 코드를 검사할 때와 같이 최적화가 발생하는 것을 원하지 않을 때 최적화를 비활성화하는 데 유용합니다.
  • 개발자는 다음을 사용할 수 있습니다. cargo remove 종속성을 제거합니다. 러스트 1.62 도입 cargo add프로젝트에 종속성을 추가하는 명령줄 유틸리티입니다.
  • 이제 개발자는 다음을 사용할 수 있습니다. ..=x 패턴의 범위.
  • Linux 빌드는 이제 각각 LTO 및 BOLT를 사용하여 Rustc 프런트 엔드와 LLVM 백엔드를 최적화하여 런타임 성능과 메모리 사용량을 향상시킵니다.
  • 다음과 같은 API가 안정화되었습니다. proc_macro::Span::source_text 그리고 Option::unzip.

Rust 1.65의 새로운 기능

Rust 1.65는 2022년 11월 3일에 출시되었습니다. 이번 릴리스에서는 수년 동안 작업해 왔던 매우 기대되는 기능인 일반 연관 유형(GAT)이 마침내 도입되었습니다. GAT를 사용하면 개발자는 관련 유형에 대한 수명, 유형 및 const 제네릭을 정의할 수 있습니다. GAT는 이전에 Rust에서는 불가능했던 패턴을 가능하게 합니다.

또한 Rust 1.65에서는:

  • 새로운 유형의 let 성명이 소개되고, let-else반박할 수 있는 패턴과 다양한 else 해당 패턴이 일치하지 않을 때 실행되는 블록입니다.
  • 이제 일반 블록 표현식에 다음과 같은 라벨을 붙일 수 있습니다. break 해당 블록을 조기에 종료합니다.
  • 컴파일을 개선하기 위해 디버그 정보 분할 지원은 Rust 1.51부터 macOS에서 지원된 후 이제 Linux에서 안정적으로 사용할 수 있습니다. 이 기능으로, -Csplit-debuginfo=unpacked debuginfo를 여러 .dwo DWARF 개체 파일로 분할하는 반면 -Csplit-debuginfo=packed 모든 debuginfo가 함께 패키지된 출력 바이너리와 함께 단일 .dwp DWARF 패키지를 생성합니다.
  • 다음과 같은 API가 안정화되었습니다. std::backtrace::Backtrace, Bound::as ref그리고 std::io::read_to_string.
  • 이제 최적화된 컴파일을 위해 MIR(중간 수준 중간 표현) 인라인이 활성화되어 실제 크레이트의 컴파일 시간이 향상됩니다.
  • 빌드를 예약할 때 Cargo는 이제 보류 중인 작업 대기열을 정렬하여 성능을 향상시킵니다.

Rust 1.64의 새로운 기능

Share this Article
Leave a comment

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다