BTC
ETH
HTX
SOL
BNB
시장 동향 보기
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

연구 보고서: Rust 언어를 이해하기 위한 30,000 단어

星球君的朋友们
Odaily资深作者
2021-06-23 06:18
이 기사는 약 43880자로, 전체를 읽는 데 약 63분이 소요됩니다
Rust는 5년 연속으로 StackOverflow 언어 목록에서 가장 인기 있는 언어였습니다.
AI 요약
펼치기
Rust는 5년 연속으로 StackOverflow 언어 목록에서 가장 인기 있는 언어였습니다.

이 기사는이 기사는주에 소사이어티

, 저자 Zhang Handong, 승인을 받아 복제됨.

  • 콘텐츠 디렉토리:

  • 웬첸

  1. Rust 언어 알아보기

  2. C/Cpp에 필적하는 고성능

  3. 신뢰할 수 있음

  4. 생산력

  5. 녹과 오픈 소스

  6. Rust 언어의 약점

  • Rust 생태 기반 라이브러리 및 도구 체인

  1. 녹 산업 애플리케이션 인벤토리

  2. 데이터 서비스

  3. 클라우드 네이티브

  4. 운영 체제

  5. 기계 학습

  6. 게임

  7. 게임

  8. 클라이언트 개발

  9. 블록체인/디지털 화폐

  • 프로덕션에서 Rust를 사용하는 회사를 살펴보세요

  1. 국내의

  2. 국내의

  3. npm

  • 저자에 대해

mdnice 편집기

웬첸

Rust 언어는 GC가 없고 메모리 안전성, 동시성 안전성 및 고성능을 보장하는 것으로 알려진 범용 시스템 수준 프로그래밍 언어입니다. 2008년부터 Graydon Hoare에서 비공개로 개발하였고, 2009년에는 Mozilla의 후원을 받아 Servo 엔진 개발을 위해 2010년에 Version 0.1.0을 처음 공개하였고, Version 1.0은 2015년 5월 15일에 공개하였다.

출시 이후 2021년 오늘 현재, Rust는 6년의 개발 끝에 꾸준히 상승하며 점차 성숙해지고 안정화되었습니다.2016년부터 2021년까지 Rust는

StackOverflow 언어 목록[1]에서 가장 인기 있는 언어입니다.

2021년 2월 9일, 러스트 재단이 발표되었습니다. Huawei, AWS, Google, Microsoft, Mozilla, Facebook 및 기타 기술 산업의 주요 거물들이 Rust 재단에 백금 회원으로 합류하여 Rust 언어를 전 세계적으로 홍보하고 개발했습니다.

그렇다면 개발자와 대기업을 이토록 흥미롭게 만들 수 있는 Rust 언어의 매력은 무엇일까요?

참고: 이 기사에 나열된 데이터는 모두 인터넷의 공개 콘텐츠에서 가져온 것입니다.

mdnice 편집기

Rust 언어 알아보기


  • 프로그래밍 언어 디자인은 양립할 수 없어 보이는 두 가지 열망 사이에서 오랫동안 충돌해 왔습니다.

  • 안전 (안전). 우리는 많은 오류를 정적으로 제거하는 강력한 유형 시스템을 원합니다. 우리는 자동 메모리 관리를 원합니다. 개인 변수의 불변 개체 표현을 적용하고 신뢰할 수 없는 코드로 인해 손상되지 않도록 데이터 캡슐화를 원합니다.


제어. 적어도 성능이나 리소스 제약이 중요한 웹 브라우저, 운영 체제 또는 게임 엔진과 같은 시스템 프로그래밍 프로그램의 경우 바이트 수준의 데이터 표현을 이해하고 싶습니다. 저수준 프로그래밍 기술을 사용하여 프로그램의 시간 및 공간 사용을 최적화하려고 합니다. 필요할 때 베어메탈을 사용하고 싶습니다.

그러나 전통적 견해에 따르면 케이크를 먹고 먹을 수는 없습니다. Java와 같은 언어는 뛰어난 보안을 보장하지만 기본 계층에 대한 제어를 희생해야 합니다. 결과적으로 많은 시스템 프로그래밍 응용 프로그램의 경우 유일한 현실적인 옵션은 자원 관리에 대한 세밀한 제어를 제공하는 C 또는 C++와 같은 언어를 사용하는 것입니다. 그러나 이러한 제어권을 얻는 데는 비용이 많이 듭니다. 예를 들어 Microsoft는 최근 패치한 보안 버그의 70%가 메모리 안전 위반33[2]으로 인한 것이며 강력한 유형의 시스템으로 배제할 수 있는 문제라고 보고했습니다. 마찬가지로, Mozilla는 Firefox에서 발견한 치명적인 버그의 대부분이 메모리와 관련된 것이라고 보고했습니다16 [3].

기본 계층을 제어하면서 보안 시스템을 프로그래밍하는 두 세계의 장점을 어떻게든 가질 수 있다면 좋지 않을까요? 따라서 Rust 언어가 탄생했습니다.

공식 웹사이트는 다음과 같이 Rust를 소개합니다: 모든 사람이 안정적이고 효율적인 소프트웨어를 구축할 수 있도록 지원하는 언어입니다.


  • 모든 사람의 관심을 끌만한 Rust 언어의 세 가지 주요 이점이 있습니다.

  • 고성능. Rust는 놀라울 정도로 빠르고 메모리 효율성이 매우 뛰어납니다. 런타임과 가비지 컬렉션이 없기 때문에 특히 까다로운 서비스를 수행할 수 있고 임베디드 장치에서 실행할 수 있으며 다른 언어와 쉽게 통합할 수 있습니다.

  • 신뢰할 수 있음. Rust의 풍부한 유형 시스템과 소유권 모델은 메모리 안전과 스레드 안전을 보장하여 컴파일 시간에 모든 종류의 오류를 제거할 수 있도록 합니다.


생산력. Rust는 훌륭한 문서, 친근한 컴파일러, 명확한 오류 메시지를 가지고 있으며, 패키지 관리자와 빌드 도구, 유형 검사를 위한 지능적인 자동 완성 및 다중 편집기 지원, 자동 서식 지정 코드 등의 일류 도구를 통합합니다.

Rust는 필요한 경우 최대 성능을 위해 C처럼 최적화할 수 있을 만큼 충분히 낮은 수준입니다.

추상화 수준이 높을수록 메모리 관리가 더 편리하고 사용 가능한 라이브러리가 더 풍부하고 Rust 프로그램 코드가 많을수록 할 일이 더 많지만 제어되지 않으면 프로그램 팽창으로 이어질 수 있습니다.

그러나 Rust 프로그램은 또한 잘 최적화되어 있으며 때로는 바이트 단위 포인터 수준에서 최소한의 코드를 작성하는 데 좋은 C보다 나은 반면 Rust는 여러 기능 또는 전체 라이브러리를 효율적으로 결합할 수 있는 기능이 있습니다. 합쳐집니다.

Rust 언어는 또한 높은 동시성과 비용이 들지 않는 비동기 프로그래밍을 지원합니다.Rust 언어는 비동기 프로그래밍을 지원하는 최초의 시스템 수준 언어여야 합니다.

mdnice 편집기

Rust vs C

Rust vs Cpp

Rust vs Go

C/Cpp에 필적하는 고성능

Rust로 작성된 프로그램은 C로 작성된 프로그램과 런타임 속도 및 메모리 사용량이 비슷해야 하지만 두 언어는 전반적인 프로그래밍 스타일이 다르고 성능에 대해 일반화하기 어렵습니다.


  • 일반적으로:

  • 추상화는 양날의 검입니다. Rust 언어는 C 언어보다 추상화 수준이 높으며 추상화는 최적화되지 않은 일부 코드를 숨길 것입니다. 이는 Rust 코드의 기본 구현 성능이 최고가 아님을 의미합니다. 따라서 C와 같은 성능을 달성하려면 Rust 코드를 최적화해야 합니다. Unsafe Rust는 고성능 내보내기입니다.

  • Rust는 기본적으로 스레드로부터 안전하여 데이터 경합을 제거하고 다중 스레드 동시 프로그래밍을 보다 실용적으로 만듭니다.


Rust는 실제로 어떤 면에서 C보다 빠릅니다. 이론적으로 C 언어는 무엇이든 할 수 있습니다. 그러나 실제로 C 추상화 능력은 상대적으로 낮고 현대적이지 않으며 개발 효율성이 상대적으로 낮습니다. 개발자의 시간과 노력이 제한되지 않는 한 이러한 방식으로 C를 Rust보다 빠르게 만들 수 있습니다.

C 언어는 고성능을 표현하기에 충분하므로 C와 Rust의 유사점과 차이점에 대해 이야기해 봅시다. C/Cpp에 익숙하다면 이 비교를 기반으로 Cpp와 Rust를 평가할 수도 있습니다.

Rust와 C는 모두 하드웨어 직접 추상화입니다.

Rust와 C는 둘 다 직접적인 하드웨어 추상화이며 둘 다 "휴대용 어셈블러"로 생각할 수 있습니다."Rust와 C 모두 데이터 구조의 메모리 레이아웃, 정수 크기, 스택 및 힙 메모리 할당, 포인터 간접 주소 지정 등을 제어할 수 있으며 일반적으로 이해할 수 있는 기계 코드로 변환할 수 있으며 컴파일러는 거의 삽입하지 않습니다."。

마법"Rust는 반복자, 특성 및 스마트 포인터와 같은 C보다 높은 수준의 구성을 가지고 있지만 간단한 기계 코드(일명")。

제로 비용 추상화Rust 유형의 메모리 레이아웃은 단순합니다. 예를 들어 확장 가능한 문자열 String 및 Vec

정확히 {바이트*, 용량, 길이}. Rust에는 Cpp의 이동 또는 복사 생성자와 같은 개념이 없으므로 개체 전달이 포인터 또는 memcpy 전달보다 복잡하지 않습니다.

Rust 빌림 검사는 단순히 코드의 참조에 대한 컴파일러의 정적 분석입니다. 수명 정보는 중간 수준 중간 언어(MIR)가 생성되기 오래 전에 완전히 추출되었습니다.

Rust는 전통적인 예외 처리 대신 반환 값 기반 오류 처리를 사용합니다. 그러나 패닉(Panic)을 사용하여 Cpp와 같은 비정상적인 동작을 처리할 수도 있습니다. 컴파일 시간에 비활성화할 수 있지만(패닉 = 중단), 그 때에도 Rust는 Cpp 예외나 longjmp를 엉망으로 만드는 것을 좋아하지 않습니다.

동일한 LLVM 백엔드

Rust는 LLVM과 잘 통합되어 ThinLTO를 포함한 링크 타임 최적화를 지원하고 C/C++/Rust 언어 경계를 가로지르는 인라인도 지원합니다. 프로필 기반 최적화(PGO)에 대한 지원도 있습니다. rustc는 clang보다 더 장황한 LLVM IR을 생성하지만 최적화 프로그램은 여전히 ​​이를 잘 처리합니다.

C 언어는 LLVM보다 GCC에서 더 빠르게 컴파일되며 이제 Rust 커뮤니티의 일부 사람들이 GCC의 Rust 프런트 엔드를 개발하고 있습니다.

이론적으로 Rust는 C보다 엄격한 불변성 및 앨리어싱 규칙을 가지고 있기 때문에 C 언어보다 성능 최적화가 더 좋아야 하지만 실제로는 그런 효과가 없습니다. C 이외의 최적화는 현재 LLVM에서 진행 중인 작업이므로 Rust는 아직 잠재력을 최대한 발휘하지 못했습니다.

둘 다 약간의 예외를 제외하고 수동 최적화를 허용합니다.

Rust의 코드는 저수준이며 예측 가능하므로 최적화할 어셈블리 코드를 직접 조정할 수 있습니다.

Rust는 인라인 및 호출 규칙을 세밀하게 제어하여 SIMD를 지원합니다.

Rust와 C는 C용 일부 분석 도구가 종종 Rust에 사용될 수 있을 정도로 유사합니다.

일반적으로 성능이 절대적으로 중요하고 성능의 마지막 온스를 쥐어짜기 위해 수동 최적화가 필요한 경우 Rust를 최적화하는 것은 C를 최적화하는 것과 다르지 않습니다.


  • 그러나 일부 하위 수준 기능에서 Rust는 특별히 좋은 대안이 없습니다.

  • 이동. Rust에서는 Goto가 제공되지 않지만 루프 브레이크 레이블을 대신 사용할 수 있습니다. C 언어에서 goto는 일반적으로 메모리를 정리하는 데 사용되지만 Rust는 결정론적 소멸자 기능 때문에 goto가 필요하지 않습니다. 그러나 성능 최적화에 유용한 비표준 goto 확장이 있습니다.

  • 스택 메모리 할당 할당 및 C99 가변 길이 배열은 메모리 공간을 절약하고 메모리 할당 수를 줄일 수 있습니다. 그러나 이것들은 C에서도 논쟁의 여지가 있기 때문에 Rust는 그것들을 멀리합니다.


C에 비해 Rust의 약간의 오버헤드


  • 손으로 최적화하지 않으면 Rust는 추상화로 인해 약간의 오버헤드가 있습니다.

  • Rust의 암시적 유형 변환 및 사용 전용 인덱싱의 부족으로 인해 개발자는 더 작은 데이터 유형에도 이 유형을 사용할 수 없습니다. 64비트 플랫폼에서 usize를 인덱스로 사용하면 정의되지 않은 동작에 대한 걱정 없이 최적화하기가 더 쉽지만 추가 비트는 레지스터와 메모리에 더 많은 부담을 줄 수 있습니다. 반면 C에서는 32비트 유형을 선택할 수 있습니다.

  • Rust의 문자열은 항상 포인터와 길이를 가지고 있습니다. 그러나 C 코드의 많은 함수는 크기에 관계없이 포인터만 허용합니다.

  • for i in 0...len {arr[i]}와 같은 반복에서 성능은 길이 일치를 증명할 수 있는 LLVM 옵티마이저에 따라 달라집니다. 때때로, 그것은 할 수 없으며 경계 검사도 자동 벡터화를 금지합니다.

  • C 언어는 상대적으로 자유롭고 메모리에 대한 많은 "스마트" 사용 기술이 있지만 Rust에서는 그렇게 자유롭지 않습니다. 그러나 Rust는 여전히 메모리 할당에 대한 많은 제어 기능을 제공하며 메모리 풀링, 여러 할당을 하나로 병합, 공간 사전 할당 등과 같은 기본적인 작업을 수행할 수 있습니다.

  • Rust의 차용 확인에 익숙하지 않으면 Clone을 사용하여 참조를 사용하여 이스케이프할 수 있습니다.

  • Rust 표준 라이브러리의 I/O는 캐시되지 않으므로 BufWriter로 래핑해야 합니다. 이것이 일부 사람들이 Rust로 작성된 코드가 Python만큼 빠르지 않다고 말하는 이유입니다. 시간의 99%가 I/O에 소비되기 때문입니다.


실행 파일 크기

모든 운영 체제에는 약 30MB의 코드가 있는 기본 제공 표준 C 라이브러리가 있습니다. C 언어의 실행 파일은 이러한 라이브러리를 "무료"로 사용할 수 있습니다."Hello World "작은

레벨 C 실행 파일은 실제로 아무 것도 인쇄할 수 없으며 운영 체제에서 제공하는 printf만 호출합니다.

Rust 실행 파일이 자체 표준 라이브러리(300KB 이상)를 번들로 묶는 Rust에서는 그렇지 않습니다. 다행스럽게도 이것은 줄일 수 있는 일회성 오버헤드에 불과합니다."no-std"임베디드 개발의 경우 다음을 사용하여 표준 라이브러리를 끌 수 있습니다.", 녹이 생성됩니다"없는

암호."함수별로 Rust 코드는 C와 거의 같은 크기이지만"일반 인플레이션

문제. 제네릭 함수는 사용하는 타입별로 최적화된 버전이 있어서 같은 함수가 8가지 버전이 있을 수 있는데 cargo-bloat[4] 라이브러리가 이러한 문제점을 찾는데 도움이 됩니다.

Rust에서 종속성 작업은 매우 쉽습니다. JS/npm과 유사하게 소형 및 단일 용도 패키지가 이제 권장되지만 커질 수 있습니다. cargo-tree 명령은 가지치기에 매우 유용합니다.

  • Rust가 C를 약간 능가하는 경우

  • 구현 세부 사항을 숨기기 위해 C 라이브러리는 종종 불투명한 데이터 구조 포인터를 반환하고 구조의 각 인스턴스에 정확히 하나의 복사본이 있는지 확인합니다. 힙 할당 및 포인터 간접 지정 비용을 소비합니다. Rust의 기본 제공 프라이버시, 단일 소유권 규칙 및 코딩 규칙을 통해 라이브러리는 객체를 간접 참조 없이 노출할 수 있으므로 호출자는 객체를 힙에 둘지 스택에 둘지 결정할 수 있습니다. 스택의 개체는 적극적으로 또는 철저히 최적화할 수 있습니다.

  • 기본적으로 Rust는 표준 라이브러리, 종속성 및 기타 컴파일 단위의 함수를 인라인할 수 있습니다.

  • Rust는 구조 필드를 재정렬하여 메모리 레이아웃을 최적화합니다.

  • 문자열은 크기 정보를 전달하므로 길이를 빠르게 확인할 수 있습니다. 하위 문자열을 제자리에서 생성할 수 있습니다.

  • C++ 템플릿과 유사하게 Rust의 일반 함수는 단형화되어 다양한 유형의 복사본을 생성하므로 sort와 같은 함수 및 HashMap과 같은 컨테이너는 항상 해당 유형에 대해 최적화됩니다. C를 사용하면 매크로를 수정하거나 void* 및 런타임 변수 크기를 처리하는 덜 효율적인 함수 중에서 선택해야 합니다.

  • Rust의 이터레이터는 하나의 단위로 함께 최적화되는 체인으로 결합될 수 있습니다. 따라서 동일한 버퍼에 여러 번 쓰는 일련의 호출 대신 it.buy().use().break().change().mail().upgrade()를 호출할 수 있습니다.

  • 마찬가지로 읽기 및 쓰기 인터페이스를 통해 일부 버퍼링되지 않은 스트림 데이터를 수신하고 스트림에서 CRC 검사를 수행한 다음 코드 변환, 압축 및 네트워크에 쓰기를 모두 한 번의 호출로 수행합니다. 제네릭과 특성 없이는 C에서 가능해야 하지만 매우 어렵습니다.

  • Rust 표준 라이브러리에는 고품질 컨테이너가 내장되어 있고 C보다 사용하기 편리한 최적화된 데이터 구조가 있습니다.

  • Rust의 serde는 세계에서 가장 빠른 JSON 파서 중 하나이며 사용 경험이 매우 좋습니다.


C에 비해 Rust의 명확한 이점


  • 주로 두 가지 사항:

  • Rust는 데이터 경합을 제거하고 본질적으로 스레드로부터 안전하며 다중 스레드 생산성을 해방합니다.여기서 Rust는 분명히 C/Cpp와 같은 언어보다 우월합니다.

  • Rust 언어는 비동기식 높은 동시성 프로그래밍을 지원합니다.


Rust는 안전한 컴파일 타임 평가를 지원합니다.

스레드 안전

타사 라이브러리에서도 Rust는 해당 코드의 작성자가 스레드 안전성에 주의를 기울이지 않았더라도 모든 코드와 데이터에 대해 스레드 안전성을 적용합니다. 모든 것이 특정 스레드 안전 보장을 따르거나 스레드 간 사용을 허용하지 않습니다. 스레드로부터 안전하지 않은 코드를 작성하면 컴파일러는 코드가 안전하지 않은 위치를 정확히 찾아냅니다.

데이터 병렬화, 스레드 풀, 대기열, 작업, 잠금 없는 데이터 구조 등과 같은 Rust 생태계에는 이미 많은 라이브러리가 있습니다. 이러한 구성 요소와 유형 시스템의 강력한 안전망 덕분에 Rust 프로그램의 동시성/병렬화는 매우 쉽습니다. 경우에 따라 iter 대신 par_iter를 사용하는 것이 좋으며 컴파일하는 한 작동해야 합니다! 이것은 항상 선형적인 속도 향상은 아니지만(Amdahl의 법칙은 잔인합니다) 상대적으로 적은 작업으로 2-3배의 속도 향상을 보이는 경우가 많습니다.

확장: Gene Amdahl의 이름을 딴 컴퓨터 과학의 경험 법칙인 Amdahl의 법칙. 병렬 컴퓨팅 후 효율성을 향상시키는 프로세서의 능력을 나타냅니다.

쓰레드 안전을 문서화하는 것과 관련하여 Rust와 C 사이에는 흥미로운 차이점이 있습니다.

Rust에는 Send 및 Sync, 가드 및 셀과 같은 스레드 안전성의 특정 측면을 설명하는 데 사용되는 용어집이 있습니다.

C 라이브러리의 경우 "한 스레드에서 할당하고 다른 스레드에서 해제할 수 있지만 동시에 두 스레드에서 사용할 수는 없습니다"와 같은 것은 없습니다.

Rust는 데이터 유형 측면에서 스레드 안전성을 설명하며, 이를 사용하는 모든 함수에 일반화됩니다.

C 언어의 경우 스레드 안전에는 개별 기능 및 구성 플래그만 포함됩니다.

Rust의 보증은 일반적으로 최소한 무조건적으로 컴파일 타임에 제공됩니다.

C 언어의 경우 "이것은 터보블럽 옵션이 7로 설정된 경우에만 스레드로부터 안전합니다"라고 말하는 것이 일반적입니다.

비동기 동시

Rust 언어는 async/await 비동기 프로그래밍 모델을 지원합니다.

이 프로그래밍 모델은 JavaScript에서 Promise라고도 하는 Future라는 개념을 기반으로 합니다. Future는 해당 값을 얻기 위해 확인되기 전에 다양한 작업을 수행할 수 있는 확인되지 않은 값을 나타냅니다. 많은 언어에서 Future에 대한 많은 작업이 수행되지 않았습니다.이 구현은 특히 보다 인체 공학적인 async/await 구문을 달성하기 위해 결합기(Combinator)와 같은 많은 기능을 지원합니다.

Futures는 모든 종류의 것을 나타낼 수 있으며 비동기 I/O를 나타내는 데 특히 유용합니다. 네트워크 요청을 하면 즉시 Future 객체를 가져오고 네트워크 요청이 완료되면 응답에 대한 모든 값을 반환합니다. 를 포함할 수 있습니다. "시간 초과"와 같은 것을 의미할 수도 있습니다. "시간 초과"는 실제로 특정 시간 후에 해결되는 Future입니다. I/O가 아니거나 CPU 집약적인 실행을 위해 스레드 풀에 배치해야 하는 작업도 있습니다. 작업은 스레드 풀이 작업을 완료한 후에 해결되는 Future로 나타낼 수도 있습니다.

Future의 문제는 대부분의 언어에서 표현되는 방식이 Future가 해결된 후 실행할 콜백 함수를 지정하는 콜백 기반 접근 방식이라는 것입니다. 즉, Future는 언제 해결되는지 파악하는 역할을 담당하고 콜백이 무엇이든 상관없이 실행되며 모든 불편 사항도 이 모델에 내장되어 있으며 이미 많은 작업이 수행되어 사용하기가 매우 어렵습니다. 많은 개발자들에 의해 많은 할당 코드를 작성하고 동적 디스패치를 ​​사용해야 한다는 것을 알게 되었습니다. 및 동적 디스패치. 이 접근 방식은 제로 비용 추상화의 두 번째 원칙을 충족하지 않으며 사용하려는 경우 직접 작성하는 것보다 훨씬 느릴 것이므로 사용하는 이유는 무엇입니까?

이 계획은 Rust에서 다릅니다. Future 스케줄링 콜백 대신 실행기라는 구성 요소가 Future를 폴링합니다. Future는 "not yet ready (Pending)"를 반환하거나 해결된 후 "Ready (Ready)"를 반환할 수 있습니다. 이 모델에는 많은 장점이 있습니다. 장점 중 하나는 Future를 매우 쉽게 취소할 수 있다는 것입니다. Future를 취소하려면 단순히 Future 보유를 중지하면 되기 때문입니다. 콜백 기반 접근 방식을 사용하면 스케줄링을 통해 취소하고 중지하는 것이 그리 쉽지 않습니다.

동시에 프로그램의 서로 다른 부분 사이에 명확한 추상 경계를 설정할 수도 있습니다. 대부분의 다른 Future 라이브러리에는 이벤트 루프(이벤트 루프)가 있으며, 이는 Future에서 I/O를 수행하도록 예약하는 방법이기도 합니다. , 그러나 실제 당신은 이것에 대한 어떤 통제권도 가지고 있지 않습니다.

그러나 Rust에서는 구성 요소 사이의 경계가 매우 명확하며 실행자는 Future 일정을 담당하고 리액터는 모든 I/O를 처리한 다음 실제 코드를 처리합니다. 따라서 최종 사용자는 사용할 액추에이터를 스스로 결정할 수 있고, 사용하려는 리액터를 사용할 수 있으므로 시스템 프로그래밍 언어에서 정말 중요한 더 많은 제어권을 가질 수 있습니다.

그리고 이 모델의 가장 중요한 실질적인 이점은 실제 제로 비용으로 이러한 종류의 상태 머신 미래를 완벽한 방식으로 구현할 수 있다는 것입니다. 즉, 작성한 Future 코드가 실제 로컬(네이티브) 코드로 컴파일되면 상태 머신과 같은 상태 머신에서 각 I/O 일시 중지 지점에는 변형(variant)이 있고, 대신 각 변형은 실행 재개에 필요한 상태.

이 Future 추상화에서 정말 유용한 점은 그 위에 다른 API를 구축할 수 있다는 것입니다. 상태 머신은 이러한 연결자 메서드를 Future에 적용하여 구축할 수 있으며 Iterator의 어댑터처럼 작동합니다(예: 필터, 맵). 그러나 이 방법에는 몇 가지 단점이 있으며, 특히 중첩 콜백과 같이 가독성이 매우 떨어집니다. 그렇기 때문에 async/await 비동기 구문을 구현해야 합니다.

현재 Rust 생태계에는 이미 epoll과 같은 비동기 I/O를 지원하는 성숙한 tokio[5] 런타임 생태계가 있습니다. io_uring을 사용하려면 Glommio[6]를 사용하거나 tokio의 io_uring 지원을 기다릴 수도 있습니다. 심지어 smol 런타임에서 제공하는 async_executor[7] 및 async-io[8]를 사용하여 자체 런타임을 빌드할 수도 있습니다.

컴파일 시간 계산

Rust는 Cpp와 유사한 컴파일 타임 상수 평가를 지원할 수 있습니다. 이것은 분명히 C보다 우수합니다.

Rust에서 컴파일 시간 평가를 지원하는 것이 왜 그렇게 신중합니까? Rust 컴파일 타임 평가는 안전해야 하기 때문에 많은 고려 사항이 있습니다. Rust 컴파일 타임 평가는 Cpp만큼 자유롭고 쉽게 남용되지 않습니다.

mdnice 편집기

신뢰할 수 있음

2020년 6월 3개 대학 5명의 학자들이 ACM SIGPLAN International Conference(PLDI'20)에서 최근 Rust 언어를 이용한 오픈소스 프로젝트의 보안 취약점을 종합적으로 조사한 연구 결과를 발표했다. 이 연구는 Rust 언어로 개발된 5개의 소프트웨어 시스템, 널리 사용되는 5개의 Rust 라이브러리 및 2개의 취약성 데이터베이스를 조사합니다. 조사에는 총 850개의 안전하지 않은 코드 사용, 70개의 메모리 안전 결함 및 100개의 스레드 안전 결함이 포함되었습니다.

조사에서 연구원들은 모든 취약성 데이터베이스에서 보고된 버그와 소프트웨어에서 공개적으로 보고된 버그뿐만 아니라 모든 오픈 소스 소프트웨어 코드 리포지토리의 커밋 레코드도 조사했습니다. 수동 분석을 통해 제출이 수정하는 BUG 유형을 정의하고 해당 메모리 안전/스레드 안전 문제로 분류합니다. 조사된 모든 문제는 공용 Git 저장소에 정리되어 있습니다: https://github.com/system-pclub/rust-study[9]



  • 설문조사 결과 설명:


  • Rust 언어의 안전한 코드는 공간 및 시간 메모리 안전 문제를 확인하는 데 매우 효과적이며 안정 버전의 모든 메모리 안전 문제는 안전하지 않은 코드와 관련이 있습니다.


  • 메모리 안전 문제는 모두 안전하지 않은 코드와 관련이 있지만 안전한 코드와 관련된 문제도 많습니다. 일부 문제는 안전하지 않은 코드가 아닌 안전한 코드의 인코딩 오류에서 비롯됩니다.


  • 코드가 Rust 언어의 규칙을 완전히 준수하더라도 안전한 코드에서 차단 여부에 관계없이 스레드 안전성 문제가 발생할 수 있습니다.


  • Rust 언어의 수명 주기 규칙을 올바르게 이해하지 못하는 코더로 인해 많은 문제가 발생합니다.


Rust 언어의 일반적인 문제에 대한 새로운 결함 탐지 도구를 구축하는 것이 필요합니다.

그렇다면 이 설문 조사 보고서 뒤에 있는 Rust의 보안은 어떻게 보장됩니까? 안전하지 않은 Rust와 왜 안전하지 않은가?

소유권: Rust 언어 메모리 안전 메커니즘

Rust의 디자인은 안전한 시스템 프로그래밍에 대한 학문적 연구에 크게 의존합니다. 특히 다른 주류 언어와 비교할 때 Rust 디자인의 가장 두드러진 특징은 독점 유형 시스템(학술 문헌에서는 종종 아핀 또는 하위 구조 유형 시스템36[10]으로 언급됨)의 채택입니다.

소유권 메커니즘은 "메모리 안전" 아이디어를 전달하기 위한 유형 시스템의 도움으로 Rust 언어로 표현된 안전한 프로그래밍 시맨틱 및 모델입니다.



  • 소유권 메커니즘에 의해 해결되는 메모리 불안정 문제는 다음과 같습니다.


  • 널 포인터가 참조됩니다.


  • 초기화되지 않은 메모리 사용.


  • use-after-free, 즉 매달린 포인터를 사용합니다.


  • 범위를 벗어난 배열과 같은 버퍼 오버플로.


이미 해제된 포인터나 할당되지 않은 포인터의 불법 해제, 즉 반복 해제.

메모리 누수는 메모리 안전 문제가 아니므로 Rust도 메모리 누수를 해결하지 않습니다.


  • 메모리 안전을 보장하기 위해 Rust 언어는 엄격한 안전 메모리 관리 모델을 확립했습니다.

  • 소유권 시스템. 각 할당된 메모리에는 독점 소유권이 있는 포인터가 있습니다. 포인터가 소멸된 경우에만 그에 따라 해당 메모리를 해제할 수 있습니다.


대출과 평생. 모든 변수에는 수명 주기가 있으며 수명 주기를 초과하면 변수가 자동으로 해제됩니다. 차용인 경우 컴파일러 검사를 위해 수명 매개변수를 표시하여 댕글링 포인터, 즉 use-after-free 상황을 방지할 수 있습니다.

소유권 시스템에는 Rust의 GC가 없지만 안전한 메모리 관리의 초석인 최신 C++에서 차용한 RAII 메커니즘도 포함됩니다.


  • 안전한 메모리 관리 모델이 확립되면 타입 시스템으로 표현할 수 있습니다. Rust는 Haskell의 유형 시스템에서 다음 기능을 차용합니다.

  • 널 포인터 없음

  • 기본적으로 불변

  • 표현

  • 고차 함수

  • 대수 데이터 유형

  • 패턴 매칭

  • 일반적인

  • 특성 및 관련 유형


지역 유형 공제


  • 메모리 안전성을 달성하기 위해 Rust에는 다음과 같은 고유한 기능도 있습니다.

  • Rust 소유권에서 Move 시맨틱을 표현하는 데 사용되는 Affine Type.


차용, 라이프 사이클.

유형 시스템의 힘으로 Rust 컴파일러는 안전한 메모리 모델을 충족하는지 확인하기 위해 컴파일 시간에 유형을 검사할 수 있고 컴파일 시간에 메모리 불안정 문제를 감지하여 정의되지 않은 동작의 발생을 효과적으로 방지할 수 있습니다.

메모리 안전 버그와 동시 안전 버그의 내부 원인은 동일하며 둘 다 메모리에 대한 부적절한 액세스로 인해 발생합니다. 마찬가지로 Rust는 소유권이 있는 강력한 유형 시스템으로 동시성 안전성 문제도 해결합니다. Rust 컴파일러는 정적 검사 분석을 통해 컴파일 타임에 다중 스레드 동시 코드의 모든 데이터 경합 문제를 확인하고 분석합니다.

안전하지 않은 녹: 보안 경계 나누기

Rust는 기존 생태계와 잘 통합하기 위해 매우 편리하고 비용이 들지 않는 FFI 메커니즘을 지원하고 C-ABI와 호환되며 Rust 언어를 언어 아키텍처 수준에서 Safe Rust와 Unsafe Rust로 구분합니다.

그중 Unsafe Rust는 운영 체제 커널과 같은 외부 시스템을 다루는 데 특화되어 있습니다. 이렇게 구분한 이유는 Rust 컴파일러에 대한 검사와 추적이 제한적이기 때문이며, 다른 외부 언어 인터페이스의 보안 상태를 확인할 수 없기 때문에 개발자 본인만이 보장할 수 있습니다.



  • Rust의 궁극적인 목표는 이러한 위험 지점을 완전히 제거하는 것이 아닙니다. 어느 시점에서 우리는 메모리 및 기타 리소스에 액세스할 수 있어야 하기 때문입니다. 사실 Rust의 목표는 안전하지 않은 모든 요소를 ​​추상화하는 것입니다. 보안에 대해 생각할 때 "공격 표면" 또는 우리가 상호 작용할 수 있는 프로그램 부분에 대해 생각해야 합니다. 파서와 같은 것은 다음과 같은 이유로 큰 공격 표면입니다.


  • 일반적으로 공격자가 액세스할 수 있습니다.

    공격자가 제공한 데이터는 구문 분석에 종종 필요한 복잡한 논리에 직접적인 영향을 줄 수 있습니다.


전통적인 공격 표면을 "공격 표면"(프로그램 코드에 직접 영향을 줄 수 있는 부분)과 공격 표면이 의존하는 코드인 "보안 계층"으로 세분화하여 더 세분화할 수 있지만 액세스할 수 없으며 잠재적인 버그가 있을 수 있습니다. C에서 배열은 동일합니다. C의 배열은 전혀 추상적이지 않으므로 가변 개수의 항목을 읽는 경우 오류가 발생할 수 있는 레이어에 안전하지 않기 때문에 모든 불변량이 일정하게 유지되는지 확인해야 합니다. .

따라서 Rust는 안전한 코드와 외부 인터페이스에 액세스하는 안전하지 않은 코드를 명시적으로 구분하는 unsafe 키워드와 unsafe 블록을 제공하고 개발자가 오류를 디버그할 수 있는 편의성도 제공합니다. Safe Rust는 개발자가 컴파일 타임에 안전을 보장하기 위해 컴파일러를 신뢰한다는 것을 의미하고 Unsafe Rust는 컴파일러가 안전을 보장하는 개발자의 능력을 신뢰한다는 것을 의미합니다.

사람이 있는 곳에 벌레가 있다. Rust 언어의 정교한 설계를 통해 기계가 확인하고 제어할 수 있는 부분은 컴파일러에 넘겨 실행하고, 기계가 제어할 수 없는 부분은 개발자 자신에게 넘겨줍니다.

Safe Rust가 보장하는 것은 컴파일러가 컴파일 타임에 메모리 안전을 최대화하고 정의되지 않은 동작이 발생하는 것을 방지한다는 것입니다.

Unsafe Rust는 이 시점에서 개발된 코드가 정의되지 않은 동작을 유발할 수 있음을 개발자에게 상기시키기 위해 사용됩니다. 주의하세요! 인간과 컴파일러는 동일한 "보안 모델"을 공유하고 서로를 신뢰하며 조화를 이루어 인간 버그 가능성을 최대한 제거합니다.

Unsafe Rust는 Rust의 보안 경계입니다. 세상의 본질은 안전하지 않습니다. 당신은 그것을 피할 수 없습니다. 어떤 사람들은 Unsafe Rust가 존재하기 때문에 C/C++보다 반드시 안전하지 않다고 말합니다. Unsafe Rust는 실제로 C/C++와 동일하며 안전을 보장하는 것은 사람에 달려 있습니다. 그러나 사람들에게 더 높은 요구 사항이 있습니다.

또한 개발자에게 실제로는 보안 경계인 안전하지 않은 경계를 제공합니다. 코드에서 지뢰밭을 명시적으로 표시합니다. 팀 코드에서 검토하면 문제를 더 빨리 찾을 수 있습니다. 이것은 그 자체로 일종의 보안입니다. C++와 달리 작성하는 모든 코드 라인은 Rust와 같은 명백한 경계(안전하지 않은 블록)가 없기 때문에 안전하지 않습니다.


  • 다음은 누구나 장단점을 찾을 수 있도록 제가 요약한 Unsafe 사용에 대한 5가지 간단한 사양입니다.

  • Safe Rust를 사용할 수 있으면 Safe Rust를 사용하십시오.

  • 안전하지 않은 Rust는 성능을 위해 사용될 수 있습니다.

  • Unsafe Rust를 사용할 때 UB를 생성하지 않도록 하고 보안 경계를 판단하고 Safe 메서드로 추상화합니다.

  • 안전하다고 추상화할 수 없는 경우 안전하지 않음으로 표시하고 UB 생성을 위한 조건부 문서를 첨부해야 합니다.


안전하지 않은 코드의 경우 검토에 집중할 수 있습니다.

그러나 Rust 커뮤니티 생태계에는 Rust 보안 작업 그룹이 있어 cargo-audit[11]와 같은 일련의 도구를 제공하고 'RustSecurity' 보안 데이터베이스 라이브러리에 기록된 Rust 생태계 커뮤니티에서 발견된 보안 문제를 유지 관리합니다. [12]. Rust 프로젝트에서 종속 라이브러리의 보안 문제를 확인하는 것이 편리합니다.

mdnice 편집기

생산력


  • 프로그래밍 언어 생산성은 다음 세 가지 측면으로 평가할 수 있습니다.

  • 학습 곡선.

  • 언어 공학 능력.

  • 도메인 생태.


학습 곡선



  • 개인의 수준에 따라 학습 곡선이 높거나 낮습니다. 다음은 다양한 기본 Rust 학습을 위해 주의해야 할 장소 목록입니다.


  • 완전 제로 기반 개발자: 기본 컴퓨터 시스템의 지식 구조를 마스터하고, Rust 언어 및 하드웨어/OS 계층의 추상화를 이해하고, Rust 언어의 핵심 개념과 추상 모드를 이해하고, 특정 적용 가능한 Rust 언어 분야를 선택하여 실습을 통해 Rust 언어에 대한 숙련도와 이해의 깊이를 향상시키면서 도메인 지식을 습득합니다.


  • C 언어 기반: C 언어 개발자는 고급 언어의 추상화를 잘 이해하지 못하기 때문에 소유권, 수명 주기 및 차용 확인의 의미 체계를 포함하여 Rust의 소유권 메커니즘을 이해하고 숙달하는 데 중점을 둡니다. Rust 언어의 추상 패턴, 주로 유형과 특성, Rust 자체의 OOP 및 기능적 언어 기능을 이해합니다.


  • C++ 기반: C++ 개발자는 Rust 언어의 소유권을 잘 이해하고 있으며 Rust의 추상 패턴과 함수형 언어 기능에 중점을 둡니다.


  • Java/Python/Ruby 기반 보유: Rust의 소유권 메커니즘, 추상 패턴 및 함수형 프로그래밍 언어 기능을 이해하고 극복하는 데 중점을 둡니다.


  • Go 기반: Go 언어 개발자가 Rust의 유형 및 특성 추상화 패턴을 이해하는 것이 더 쉽지만 Go는 GC 언어이기도 하므로 소유권 메커니즘과 기능적 언어 기능이 학습의 초점입니다.


Haskell 기반 보유: Haskell 개발자는 Rust 언어의 기능적 기능을 잘 이해하고 있으며 주로 소유권 메커니즘과 OOP 언어 기능을 극복합니다.

따라서 특정 기반을 가진 개발자의 경우 Rust 언어를 학습하는 데 숙달해야 할 몇 가지 핵심 개념은 다음과 같습니다.

1. 소유권 시맨틱, 수명 주기 및 차용 확인을 포함한 Rust 소유권 메커니즘


  • 소유권 메커니즘은 Rust 언어의 핵심 기능으로 가비지 컬렉션 메커니즘 없이 메모리 안전을 보장하므로 GC에 익숙한 개발자에게는 Rust의 소유권을 이해하는 것이 가장 중요한 부분입니다.이 세 가지 사항을 기억하십시오.

  • Rust의 모든 값에는 소유자라는 변수가 있습니다.

  • 값에는 한 명의 소유자만 있습니다.


소유자(변수)가 범위를 벗어나면 이 값은 폐기됩니다. 여기에는 상대적으로 크랙하기 어려운 수명 주기 및 대출 확인과 같은 개념도 포함됩니다.

2. Rust 언어의 추상 모드, 주로 유형과 특성. 특성은 Haskell의 Typeclass에서 차용한 것입니다. 유형 동작의 추상화이며 다른 프로그래밍 언어의 인터페이스와 널리 비교할 수 있습니다. 유형이 제공해야 하는 기능적 언어 기능을 컴파일러에 알려줍니다. 사용할 때 일관성을 따라야 하며 충돌하는 구현을 정의할 수 없습니다.

3. OOP 언어 기능. 객체 지향 프로그래밍(OOP)의 네 가지 공통 기능인 객체, 캡슐화, 상속 및 다형성에 익숙하면 impl, pub, trait 등과 같은 Rust의 일부 기능을 더 잘 이해할 수 있습니다.

4. 기능적 언어 기능. 러스트 언어의 디자인은 함수형 프로그래밍의 영향을 많이 받았는데, 함수형 프로그래밍 언어의 가장 큰 특징은 계산 과정을 일련의 중첩 함수로 작성하는 것이기 때문에 함수형 프로그래밍 언어의 가장 큰 특징은 함수형을 보면 수학을 잘 못하는 사람들은 의아해 할 수 있습니다. Rust에서 클로저와 반복자를 마스터하는 것은 기능적 언어 스타일로 고성능 Rust 코드를 작성하는 데 중요한 부분입니다.

언어 공학 능력

Rust는 강력한 제품을 개발할 준비가 되어 있습니다.

안전성을 보장하기 위해 Rust는 강력한 유형 시스템과 소유권 시스템을 도입하여 메모리 안전성뿐만 아니라 성능 저하 없이 동시성 안전성도 보장합니다.

하드 실시간 시스템에 대한 지원을 보장하기 위해 Rust는 자동 및 결정론적 메모리 관리를 위해 C++에서 결정론적 소멸자, RAII 및 스마트 포인터를 차용하여 GC의 도입을 피하므로 "세계 정지" 문제가 없을 것입니다. 이러한 항목은 C++에서 빌려온 것이지만 C++보다 사용하기가 더 간결합니다.

프로그램의 견고성을 보장하기 위해 Rust는 오류 처리 메커니즘을 재검토했습니다. 일상적인 개발에는 일반적으로 실패, 오류 및 예외의 세 가지 유형의 비정상적인 상황이 있습니다. 그러나 C와 같은 프로세스 지향 언어에서 개발자는 반환 값 및 goto와 같은 명령문을 통해서만 오류를 처리할 수 있으며 통합된 오류 처리 메커니즘이 없습니다. C++, Java와 같은 고급 언어는 예외 처리 메커니즘을 도입하고 있지만 정상 논리와 오류 논리를 효과적으로 구분할 수 있는 구문을 구체적으로 제공하지 않고 전역적으로만 처리하므로 개발자는 모든 비정상적인 상황을 예외로 처리해야 합니다. 견고한 시스템 개발에 도움이 되지 않습니다. 또한 예외 처리는 상대적으로 큰 성능 오버헤드를 가져옵니다.


  • Rust 언어는 이러한 세 가지 유형의 비정상적인 상황에 대해 특별한 처리 방법을 제공하여 개발자가 상황에 따라 선택할 수 있도록 합니다.

  • 실패 사례의 경우 어설션 도구를 사용할 수 있습니다.

  • 오류에 대해 Rust는 반환 값을 기반으로 계층화된 오류 처리 방법을 제공합니다.예를 들어 Option은 null 값이 있을 수 있는 상황을 처리하는 데 사용할 수 있는 반면 Result는 합리적으로 해결될 수 있고 수정해야 하는 오류를 처리하는 데 특별히 사용됩니다. 전파.


예외의 경우 Rust는 이를 합리적으로 해결할 수 없는 문제로 간주하고 스레드 패닉 메커니즘을 제공하여 예외가 발생하면 스레드가 안전하게 종료될 수 있습니다.

이러한 정교한 설계를 통해 개발자는 비정상적인 상황을 보다 미세한 단위로 합리적으로 처리하고 최종적으로 보다 강력한 시스템을 작성할 수 있습니다.

유연한 아키텍처 기능을 제공하기 위해 Rust는 비용이 들지 않는 추상화의 기반으로 특성을 사용합니다. 특성은 상속보다는 구성을 지향하므로 개발자는 긴밀하게 결합된 시스템과 느슨하게 결합된 시스템을 설계할 수 있는 유연성을 제공합니다. Rust는 유형 추상화를 표현하는 제네릭도 제공하며, 특성 기능과 결합하여 Rust는 정적 다형성 및 코드 재사용 기능을 제공합니다. 제네릭 및 트레이트를 사용하면 다양한 디자인 패턴을 유연하게 사용하여 시스템 아키텍처를 재구성할 수 있습니다.

강력한 언어 확장 기능과 개발 효율성을 제공하기 위해 Rust는 매크로 기반 메타프로그래밍 메커니즘을 도입합니다. Rust는 두 가지 유형의 매크로, 선언적 매크로와 절차적 매크로를 제공합니다. 매크로를 선언하는 형태는 C의 매크로 대체와 비슷하지만, 차이점은 러스트가 매크로 확장 후 코드를 확인하므로 보안 측면에서 더 유리합니다. 절차적 매크로는 Rust에게 코드 재사용 및 코드 생성에 강력한 기능을 제공합니다.

Rust는 기존 생태계와 잘 통합하기 위해 매우 편리하고 비용이 들지 않는 FFI 메커니즘을 지원하고 C-ABI와 호환되며 Rust 언어를 언어 아키텍처 수준에서 Safe Rust와 Unsafe Rust로 구분합니다. 그중 Unsafe Rust는 운영 체제 커널과 같은 외부 시스템을 다루는 데 특화되어 있습니다. 이렇게 구분한 이유는 Rust 컴파일러에 대한 검사와 추적이 제한적이기 때문이며, 다른 외부 언어 인터페이스의 보안 상태를 확인할 수 없기 때문에 개발자 본인만이 보장할 수 있습니다. Unsafe Rust는 외부 인터페이스에 액세스하는 안전하지 않은 코드와 안전한 코드를 명시적으로 구분하고 개발자가 오류를 디버깅할 수 있는 편의성을 제공하는 안전하지 않은 키워드 및 안전하지 않은 블록을 제공합니다. Safe Rust는 개발자가 컴파일 타임에 안전을 보장하기 위해 컴파일러를 신뢰한다는 것을 의미하고 Unsafe Rust는 컴파일러가 안전을 보장하는 개발자의 능력을 신뢰한다는 것을 의미합니다.

사람이 있는 곳에 벌레가 있다. Rust 언어의 정교한 설계를 통해 기계가 확인하고 제어할 수 있는 부분은 컴파일러에 넘겨 실행하고, 기계가 제어할 수 없는 부분은 개발자 자신에게 넘겨줍니다. Safe Rust가 보장하는 것은 컴파일러가 컴파일 타임에 메모리 안전을 최대화하고 정의되지 않은 동작이 발생하는 것을 방지한다는 것입니다. Unsafe Rust는 이 시점에서 개발된 코드가 정의되지 않은 동작을 유발할 수 있음을 개발자에게 상기시키기 위해 사용됩니다. 주의하세요! 인간과 컴파일러는 동일한 "보안 모델"을 공유하고 서로를 신뢰하며 조화를 이루어 인간 버그 가능성을 최대한 제거합니다.

개발자들이 서로 쉽게 협업할 수 있도록 Rust는 매우 유용한 패키지 관리자인 Cargo[13]를 제공합니다. Rust 코드는 패키지(크레이트)를 기반으로 컴파일 및 배포되며, Cargo는 개발자가 자신의 패키지를 생성, 빌드, 배포 및 관리할 수 있도록 많은 명령을 제공합니다. Cargo는 또한 개발자가 더 많은 요구를 충족하기 위해 사용자 정의 플러그인을 작성하는 데 편리한 플러그인 메커니즘을 제공합니다. 예를 들어, 공식 rustfmt 및 clippy 도구를 사용하여 코드를 자동으로 포맷하고 코드에서 "나쁜 냄새"를 찾을 수 있습니다. 또 다른 예로, rustfix 도구는 개발자가 컴파일러 제안을 기반으로 잘못된 코드를 자동으로 수정하도록 도울 수도 있습니다. Cargo는 또한 자연스럽게 오픈 소스 커뮤니티와 Git을 수용하고 다른 사람들이 사용할 수 있도록 crates.io 웹사이트에 작성된 패키지의 원클릭 게시를 지원합니다.


  • 개발자가 Rust를 더 쉽게 배울 수 있도록 공식 Rust 팀은 다음과 같은 노력을 기울였습니다.

  • 전용 커뮤니티 작업 그룹을 분리하고 공식 Rust Book 및 컴파일러 문서, 노미콘 북 등과 같은 다양한 깊이의 기타 문서를 작성합니다. 무료 커뮤니티 교육 이벤트인 Rust Bridge를 조직하고 커뮤니티 블로깅을 적극 권장하는 등의 작업을 수행할 수 있습니다.

  • Rust 언어의 문서는 Markdown 형식을 지원하므로 Rust 표준 라이브러리 문서는 표현이 풍부합니다. 에코시스템의 많은 타사 패키지에 대한 문서의 표현력도 향상되었습니다.

  • 개발자가 코드를 배우고 사용하고 공유할 수 있는 매우 유용한 온라인 놀이터 도구를 제공합니다.

  • Rust 언어는 아주 초기에 부트스트랩되었기 때문에 학습자가 소스 코드를 읽어 내부 메커니즘을 이해하고 기여에 참여할 수도 있습니다.

  • Rust 코어 팀은 Rust를 지속적으로 개선하고, Rust의 친숙함을 개선하고, 초보자의 정신적 부담을 줄이고, 학습 곡선을 늦추기 위해 노력했습니다. 예를 들어 빌림 확인 시스템을 개선하기 위해 NLL 기능을 도입하면 개발자가 보다 직관적인 코드를 작성할 수 있습니다.

  • Haskell에서 유형 시스템과 관련된 많은 콘텐츠를 차용했지만 Rust 팀은 사람들이 Rust의 개념에 더 쉽게 접근할 수 있도록 언어 기능을 설계하고 홍보할 때 의도적으로 탈학술적입니다.

  • 유형 시스템을 기반으로 혼합 프로그래밍 패러다임을 지원하고 강력하고 간결한 추상 표현 기능을 제공하며 개발자의 개발 효율성을 크게 향상시킵니다.


Rust 개발자가 개발 효율성을 개선할 수 있도록 Rust 커뮤니티는 강력한 IDE 지원도 제공합니다. VSCode/Vim/Emacs + Rust Analyzer는 Rust 개발의 표준이 되었습니다. 물론 JetBrains 제품군의 IDEA/Clion도 Rust를 강력하게 지원합니다.

mdnice 편집기

녹과 오픈 소스

오픈 소스 프로젝트 자체로서 Rust 언어는 현대 오픈 소스 소프트웨어의 빛나는 진주이기도 합니다.

Rust 이전에 태어난 모든 언어는 상용 개발에만 사용되었지만 Rust 언어는 이러한 상황을 변경했습니다. Rust 언어의 경우 Rust 오픈 소스 커뮤니티도 언어의 일부입니다. 동시에 Rust 언어도 커뮤니티에 속합니다.

Rust 팀은 Mozilla와 비 Mozilla 회원으로 구성되어 있으며 지금까지 Rust 프로젝트에 1,900명 이상의 기여자가 있었습니다. Rust 팀은 코어 그룹과 기타 도메인 워킹 그룹으로 나뉘며, Rust 2018의 목표를 위해 Rust 팀은 Embedded 워킹 그룹, CLI 워킹 그룹, 네트워크 워킹 그룹, WebAssembly 워킹 그룹으로 나뉩니다. 생태계 작업반, 커뮤니티 작업반 등

이 필드의 디자인은 먼저 RFC 프로세스를 거치게 되며, RFC 프로세스를 거치지 않아도 되는 일부 변경 사항의 경우 Rust 프로젝트 라이브러리에 풀 요청만 제출하면 됩니다. 모든 프로세스는 커뮤니티에 투명하며 기여자는 검토에 참여할 수 있습니다. 물론 최종 의사 결정 권한은 핵심 그룹 및 관련 현장 작업 그룹에 있습니다. 나중에 FCP 프로세스를 간소화하기 위해 MCP도 도입되었습니다.

Rust 재단이 설립된 후 Rust 팀은 새로운 오픈 소스 거버넌스 솔루션을 지속적으로 탐색하고 있습니다.

mdnice 편집기

Rust 언어의 약점


  • Rust에는 많은 장점이 있지만 확실히 몇 가지 단점이 있습니다.

  • Rust 컴파일이 느립니다. Rust 관계자는 증분 컴파일 지원, 새로운 컴파일 백엔드(cranelift) 도입, 병렬 컴파일 및 기타 조치를 포함하여 Rust 컴파일 속도를 개선했지만 여전히 느립니다. 증분 컴파일에는 현재 버그가 있습니다.

  • 학습 곡선이 가파르다.

  • Rust 언어에 특정한 메모리 불안전 문제에 대한 다양한 감지 도구가 부족합니다.


mdnice 편집기

Rust 생태 기반 라이브러리 및 도구 체인

Rust 생태계는 점점 더 풍부해지고 있습니다. 많은 기본 라이브러리와 프레임워크가 crates.io[14]에 크레이트 형태로 출시될 예정입니다. 지금까지 crates.io에는 62,981개의 크레이트가 있으며 총 다운로드 수에 도달했습니다. 7,654,973,261회.


  • 패키지 사용 시나리오별로 분류한 Crates.io의 가장 인기 있는 시나리오는 다음과 같습니다.

  • 명령줄 도구(3133 크레이트)

  • no-std 라이브러리(2778 크레이트)

  • 개발 도구(테스트/디버그/린팅/성능 감지 등, 2652 크레이트)

  • 웹 프로그래밍(1776 크레이트)

  • API 바인딩(http api, ffi 관련 api 등과 같은 Rust용 특정 api 패키징, 1738 크레이트)

  • 네트워크 프로그래밍(1615 크레이트)

  • 데이터 구조(1572 크레이트)

  • 임베디드 개발(1508 크레이트)

  • 암호화 기술(1498 크레이트)

  • 비동기식 개발(1487 크레이트)

  • 알고리즘(1200 크레이트)


과학 컴퓨팅(물리, 생물학, 화학, 지리, 기계 학습 등 포함, 1100개 상자)

또한 WebAssembly, 인코딩, 텍스트 처리, 동시성, GUI, 게임 엔진, 시각화, 템플릿 엔진, 파서, 운영 체제 바인딩 및 많은 라이브러리와 같은 다른 범주가 있습니다.

일반적으로 사용되는 잘 알려진 기본 라이브러리 및 도구 체인



  • 그 중 crates.io 홈페이지에서 볼 수 있는 우수한 기본 라이브러리가 많이 등장했습니다. 다음은 몇 가지입니다.


  • 직렬화/역직렬화: Serde[15]


  • 명령줄 개발: clap[16]/structopt[17]


  • 비동기/웹/네트워크 개발: tokio [18] / tracing [19] / async-trait [20] / tower [21] / async-std [22] tonic [23] / actix-web [24] / smol [25 ] ]/surf[26]/async-graphql[27]/warp/[28] tungstenite[29]/encoding_rs[30]/loom[31]/Rocket[32]


  • FFi 개발: libc [33]/ winapi [34]/ bindgen [35]/ pyo3 [36]/ num_enum [37]/ jni [38]/ rustler_sys[39]/ cxx [40]/ cbindgen [41]/ autocxx- 바인드겐 [42]


  • API 개발: jsonwebtoken [43]/ validator [44]/ tarpc [45]/ nats [46]/ tonic[47]/ protobuf [48]/ hyper [49]/ httparse [50]/ reqwest [51] / url [ 52]


  • 파서: nom[53]/pest[54]/csv[55]/combine[56]/wasmparser[57]/ron[58]/lalrpop[59]


  • WebAssembly:   wasm-bindgen[67]/ wasmer [68]/ wasmtime [69]/ yew [70]


  • 암호화: openssl [60] / ring [61] / hmac [62] / rustls [63] / orion [64] / themis [65] / RustCrypto [66]


  • 데이터베이스 개발: diesel [71]/ sqlx [72]/ Rocksdb [73]/ mysql [74]/ elasticsearch [75]/ rbatis [76]


  • 동시성: crossbeam[77]/parking_lot[78]/crossbeam-channel[79]/rayon[80]/concurrent-queue[81]/threadpool[82]/flume[83]


  • 임베디드 개발: embedded-hal[84]/ cortex-m[85]/ bitvec[86]/ cortex-m-rtic[87]/ embedded-dma[88]/ cross[89]/ Knurling Tools[90]


  • 테스트: static_assertions [91] / difference [92] / quickcheck [93] / 임의 [94] / mockall [95] / criterion [96] / proptest [97] / tarpaulin [98] / fake-rs [99]


  • 멀티미디어 개발: rust-av[100]/ image[101]/ svg[102]/ rusty_ffmpeg[103]/ Symphonia[104]/"rapier") / Rustcraft[115] Nestadia[116]/ naga[117]/ Bevy Retro[118]/ Texture Generator[119] / building_blocks[120] / rpg-cli [121]/ macroquad[122]


  • TUI/GUI 개발: winit [123]/ gtk [124]/ egui [125]/ imgui [126]/ yew [127]/ 필기체 [128]/ iced [129]/ fontdue [130]/ tauri [131]/ 드루이드 [132]


mdnice 편집기

녹 산업 애플리케이션 인벤토리

Rust는 범용의 고수준 시스템 수준 프로그래밍 언어이며, 그 응용 분야는 기본적으로 C/Cpp/Java/Go/Python의 응용 분야를 동시에 커버할 수 있습니다.

다양한 분야의 국내외 Rust 프로젝트 목록을 살펴보겠습니다. 코드의 양, 팀 규모, 프로젝트 주기와 관련된 데이터를 제공함으로써 모든 사람들이 Rust 분야에서 애플리케이션과 개발 효율성을 보다 직관적으로 이해할 수 있기를 바랍니다.

mdnice 편집기

데이터 서비스

데이터 서비스 분야에는 데이터베이스, 데이터 웨어하우징, 데이터 스트림, 빅 데이터 등이 포함됩니다.

키워드: 데이터베이스 / 분산 시스템 / CNCF

소개하다

소개하다

TiKV[133]는 차세대 데이터베이스를 위한 안정적이고 고품질이며 실용적인 스토리지 아키텍처를 제공하는 데 중점을 둔 오픈 소스 분산 트랜잭션 키-값 데이터베이스입니다. 처음에 PingCAP 팀에서 개발한 TiKV는 Zhihu, Yidian, Shopee, Meituan, JD Cloud, Zhuanzhuan 및 많은 산업 분야의 기타 주요 기업에 출시 및 적용되었습니다.

TiKV는 Raft 합의 알고리즘을 사용하여 여러 데이터 사본 간의 일관성을 유지합니다.RocksDB 스토리지 엔진은 로컬에서 데이터를 저장하는 데 사용됩니다.동시에 TiKV는 자동 데이터 분할 및 마이그레이션을 지원합니다. TiKV의 은행 간 트랜잭션은 초기에 Google Percolator 트랜잭션 모델을 참조하며 스냅샷 격리 및 잠금을 통한 스냅샷 격리를 제공하고 분산 트랜잭션을 지원하기 위해 일부 최적화를 수행했습니다.

2018년 8월 CNCF에서 샌드박스 클라우드 네이티브 프로젝트로 채택되었다고 발표했고, 2019년 5월 샌드박스에서 인큐베이션 프로젝트로 승격되었습니다.

코드 및 팀 규모

TiKV 프로젝트에는 약 300,000줄의 Rust 코드(테스트 코드 포함)가 포함되어 있습니다.


  • TiKV는 글로벌 오픈 소스 프로젝트이며 기여자 목록에서 팀 규모를 볼 수 있습니다[134]. TiKV 조직에는 일부 Go/Cpp 프로젝트도 포함되어 있으며 이는 포함되지 않으며 Rust 프로젝트와 관련된 인력의 수만 계산됩니다.

  • 주요 개발: 약 20명.


커뮤니티 기여: 300명 이상.

프로젝트 주기

TiKV는 TiDB의 진화에 따른 TiDB의 기본 저장소입니다. TiDB는 Go용으로 개발되었고 TiKV는 Rust용으로 개발되었습니다.

2016년 1월 TiDB의 기본 스토리지 엔진으로 설계 및 개발되었습니다.

첫 번째 버전은 2016년 4월에 오픈 소스로 출시되었습니다.

2017년 10월 16일 TiDB는 GA 버전(TiDB 1.0)을 출시했고 TiKV는 1.0을 출시했습니다.

2018년 4월 27일 TiDB는 버전 2.0 GA를 출시했고 TiKV는 버전 2.0을 출시했습니다.

2019년 6월 28일 TiDB는 버전 3.0 GA를 출시했고 TiKV는 버전 3.0을 출시했습니다.

2020년 5월 28일 TiDB는 4.0 GA 버전을 출시했고 TiKV는 4.0을 출시했습니다.

2021년 4월 7일에 TiDB는 버전 5.0 GA를 출시했고 TiKV는 버전 5.0을 출시했습니다.

논평

일부 친구들은 Rust의 개발 효율성에 대해 더 우려하고 이를 정량화하고 싶어 할 수도 있습니다. 특히 C/Cpp/Go와 같은 다른 언어의 개발 효율성을 비교하기 위해요.

특히 다른 언어에 비해 개발 효율성을 정량화하는 것이 매우 어렵다고 개인적으로 생각합니다. 예를 들어 민첩한 프로젝트 반복 관리의 관점에서 이 문제를 다른 각도에서 보는 것이 좋습니다. 언어가 애자일 개발 반복의 일상적인 요구 사항을 충족하고 제품 진화를 완료하는 데 도움이 될 수 있다면 이 언어의 개발 효율성을 설명하기에 충분합니다.

PingCAP의 Go 개발자 수는 Rust 개발자의 4~5배이며 물론 작업량은 거의 동일한 것으로 파악됩니다. 위의 데이터에서 우리는 Rust 프로젝트(TiKV)가 여전히 Go 프로젝트(TiDB)의 반복적인 리듬을 따라갈 수 있다는 것을 알 수 있습니다. 이는 Rust의 개발 효율성이 여전히 현대 개발의 요구를 충족시키기에 충분하다는 것을 보여줍니다.

키워드: 실시간 데이터 웨어하우스 / 기업가 정신 / 엔젤 라운드

소개하다

소개하다

TensorBase[135]는 2020년 8월 Jin Mingjian 박사가 시작한 기업가 프로젝트입니다. 새로운 현대적 관점에서 시작하여 오픈 소스 문화와 방법을 사용하여 Rust에서 실시간 데이터 웨어하우스를 재구축하여 대용량 데이터 시대에 서비스를 제공합니다. 데이터 저장 및 분석. TensorBase 프로젝트는 세계적으로 유명한 벤처 캐피탈 액셀러레이터로부터 엔젤 라운드 투자를 받았습니다.

코드 및 팀 규모

TensorBase는 Apache Arrow[136] 및 Arrow DataFusion[137] 위에 구축되기 때문에 코드 통계에서 이 두 프로젝트의 종속성을 제외합니다.

TensorBase 핵심 코드 줄은 54000줄 이상입니다.


  • 팀 규모:

  • 주요 개발: 1명.


커뮤니티 기여: 13명.

새로운 프로젝트이기 때문에 오픈 소스 커뮤니티는 아직 구축 중입니다.

프로젝트 주기

TensorBase는 시맨틱 버전이 아닌 시간 기반으로 게시합니다. 반복 주기는 1년에 메이저 버전, 1월에 마이너 버전이 될 것으로 예상됩니다.

2021년 4월 20일 공식 출시부터 늦어도 6월 16일까지 이 리듬을 유지하세요.

Keywords: 데이터플로우/분산시스템/기업가정신

소개하다

소개하다

Timely Dataflow[138]는 Microsoft의 Timely Dataflow 논문 "Naiad: A Timely Dataflow System"[139]을 기반으로 하는 최신 Rust 구현입니다. clockworks.io[140] 회사의 오픈 소스 제품입니다.

다중 반복 또는 증분 계산과 같이 분산 시스템에서 스트리밍 데이터에 대한 복잡한 처리를 수행하는 것은 매우 어렵습니다. Storm, Streaming Spark 및 MillWheel은 다양한 애플리케이션의 복잡한 요구 사항에 적합하지 않습니다. 타임스탬프 개념을 도입함으로써 Naiad는 임의로 복잡한 스트림 컴퓨팅을 설명하는 데 사용할 수 있는 매우 낮은 수준의 모델을 제공합니다.

데이터 흐름 시스템은 포괄적이며 MapReduce 및 Spark를 대표로 간주할 수 있습니다. 시기 적절한 데이터 흐름은 완전한 시간 기반 추상화를 제공하여 스트림 컴퓨팅과 반복 컴퓨팅을 통합합니다. Timely Dataflow는 스트리밍 데이터의 병렬 처리와 반복 제어가 필요할 때 사용할 수 있습니다.

코드 및 팀 규모

Rust 코드 크기는 약 13000줄입니다.


  • 팀 규모:

  • 주요 개발자: 4명.


커뮤니티 기여: 30명 이상.

프로젝트 주기

2017년 9월 7일, 버전 0.3.0.

2018년 6월 28일, 버전 0.6.0.

2018년 9월 16일, 버전 0.7.0.

2018년 12월 3일, 버전 0.8.0.

2019년 3월 31일, 버전 0.9.0.

2019년 7월 10일, 버전 0.10.0.

2021년 3월 10일, 버전 0.12.0.

기본적으로 3개월마다 작은 버전이 출시되며, Timely Dataflow 외에도 팀은 Timely Dataflow와 동기적으로 반복되는 Timely Dataflow 위에 구축된 Differential Dataflow[141]를 유지 관리합니다.

Keywords: 데이터베이스/학술논문 프로젝트

소개하다

소개하다

Noria[142]는 MIT Jon Gjengset의[143] 박사 학위 논문[144]을 기반으로 하는 강력한 웹 애플리케이션을 위한 빠른 스토리지 백엔드로 설계된 새로운 스트리밍 데이터 흐름 시스템이며 OSDI'18 논문[145]에서도 참조됩니다. 데이터베이스와 유사하지만 쿼리 속도를 높이기 위해 관계형 쿼리 결과를 미리 계산하고 캐싱하는 기능을 지원합니다. Noria는 캐시된 결과를 영구 기본 테이블에 저장된 기본 데이터로 자동으로 유지합니다. Noria는 부분적 상태 저장 데이터 흐름을 사용하여 메모리 오버헤드를 줄이고 동적 런타임 데이터 흐름 및 쿼리 변경을 지원합니다.

코드 및 팀 규모

Rust 코드의 줄 수는 약 59000줄입니다.


  • 팀 규모:

  • 주요 기여자: 2명


커뮤니티 기여자: 21

프로젝트 주기

개인적인 학술 연구 프로젝트이기 때문에 릴리스 주기가 명확하지 않습니다.

프로젝트 주기는 2016년 7월 30일부터 2020년 4월 30일까지이며 총 5,000개 이상의 커밋이 있습니다.

벡터(해외/오픈 소스/데이터 파이프라인)

키워드: 데이터 파이프라인 / 분산 시스템 / 기업가 정신

Vector[146]는 Timer가 구축한 고성능 종단 간(브로커 및 수집기) 관찰 가능성 데이터 파이프라인입니다. 오픈 소스이며 공간의 모든 대안(Logstash, Fluentd 등)보다 10배 더 빠릅니다. 현재 Douban, checkbox.ai, fundamentei, BlockFi, Fly.io 등과 같은 회사에서 Vector를 사용합니다. 공식 실적 보고서를 보려면 여기[147]를 클릭하고 프로덕션에서 벡터를 사용하는 회사는 여기[148]를 클릭하십시오.

코드 및 팀 규모

코드의 양은 약 180,000줄의 Rust 코드입니다.


  • 팀 규모:

  • 주요 개발: 9명


커뮤니티 기여: 140명

프로젝트 주기

2019년 3월 22일에 초기 버전이 출시되었습니다.

2019년 6월 10일에 버전 0.2.0이 릴리스되었습니다.

2019년 7월 2일 버전 0.3.0 출시

2019년 9월 25일, 버전 0.4.0 출시

2019년 10월 11일에 버전 0.5.0이 릴리스되었습니다.

2019년 12월 13일에 버전 0.6.0이 릴리스되었습니다.

2020년 1월 12일에 버전 0.7.0이 릴리스되었습니다.

2020년 2월 26일에 버전 0.8.0이 릴리스되었습니다.

2020년 4월 21일, 버전 0.9.0 출시

2020년 7월 23일에 버전 0.10.0이 릴리스되었습니다.

2021년 3월 12일에 0.11.0 ~ 0.12 버전이 출시됩니다.

2021년 4월 22일, 버전 0.13.0 출시

2021년 6월 3일, 버전 0.14.0 출시

Arrow-rs (해외/오픈소스/빅데이터 표준)

키워드: 빅데이터/데이터 포맷 표준/Apach

arrow-rs[149]는 Apache Arrow의 Rust 구현입니다. Apache Arrow는 이기종 빅 데이터 시스템에 적합한 메모리 내 컬럼 스토리지 데이터 형식 표준입니다. 인메모리 분석을 위한 개발 플랫폼을 제공하여 이기종 빅 데이터 시스템 간에 데이터를 더 빠르게 이동하고 처리할 수 있도록 하는 매우 큰 비전을 가지고 있습니다.

Arrow는 버전 2.0부터 Rust[150]을 도입했고, 버전 4.0부터 Rust 구현은 독립된 웨어하우스 arrow-rs로 마이그레이션되었습니다.


  • Arrow의 Rust 구현은 실제로 다음과 같은 개별 크레이트 및 라이브러리를 포함하여 여러 가지 프로젝트로 구성됩니다.

  • arrow-rs에 포함된 arrow-rs 핵심 라이브러리인 arrow[151].

  • arrow-rs에 포함된 arrow-rs 구성 요소 중 하나인 arrow-flight [152].

  • arrow-rs 컴포넌트 중 하나인 parquet[153]이 arrow-rs에 포함되어 있다. 빅 데이터 생태계에서 Parquet은 가장 널리 사용되는 파일 저장 형식입니다.

  • 확장 가능한 메모리 내 쿼리 실행 엔진인 DataFusion [154]은 Arrow를 형식으로 사용합니다.


Apache Arrow와 DataFusion으로 구동되는 분산 컴퓨팅 플랫폼인 Ballista[155]가 DataFusion에 포함되어 있습니다.

코드 및 팀 규모

Arrow-rs의 관련 구성 요소를 더하면 Rust 코드의 양은 약 180,000줄입니다.



  • 팀 규모:


  • 주요 개발자: 약 10명


커뮤니티 기여: 550명 이상

프로젝트 주기

DataFusion 프로젝트는 2016년에 구축되기 시작했으며 나중에 Apache Arrow 프로젝트에 참여했습니다.

arrow-rs 4.0부터:

2021년 4월 18일에 버전 4.0이 출시되었습니다.

2021년 5월 18일에 버전 4.1이 릴리스되었습니다.

2021년 5월 30일에 버전 4.2가 릴리스되었습니다.

2021년 6월 11일에 버전 4.3이 릴리스되었습니다.

InfluxDB IOx(외국/오픈소스/시계열 데이터베이스)

키워드: 시계열 데이터베이스 / 분산

InfluxDB의 차세대 타이밍 엔진인 InfluxDB IOx[156]는 Rust + Aarow를 사용하여 재작성되었습니다.


  • 기존 설계에는 주로 다음과 같은 치명적인 문제가 있습니다.

  • 타임라인 팽창 문제를 해결할 수 없음

  • 클라우드 네이티브 환경에서 메모리 관리 요구 사항은 상대적으로 엄격합니다. 즉, mmap은 더 이상 적용할 수 없으며 InfluxDB는 로컬 디스크 없이 운영 모드를 지원해야 합니다.


인덱스와 데이터가 별도로 저장되기 때문에 효율적인 데이터 가져오기 및 내보내기 기능을 달성하기 어렵습니다.

위의 세 가지 문제는 기존 디자인의 핵심이므로 현재 요구 사항을 지원하기 위해 다시 작성하는 것이 더 나은 선택입니다.

코드 및 팀 규모

InfluxDB IOx 코드 크기는 약 160,000줄의 Rust 코드입니다.


  • 팀 규모:

  • 주요 개발: 5명


커뮤니티 기여: 24명

프로젝트 주기

이 프로젝트는 2019년 11월에 시작되었지만 현재로서는 프로젝트가 매우 초기 단계이며 테스트할 준비가 되지 않았으며 빌드나 문서가 없습니다.

하지만 깃허브 활동 현황으로 미루어 보아 개발 현황은 여전히 ​​활발하다. 주요 개발 작업은 2021년에 시작될 것으로 예상됩니다.

키워드: 시계열 데이터베이스

소개하다

소개하다

CeresDB는 Ant Group에서 개발한 TP/AP 융합 시계열 데이터베이스로, 재무 타이밍, 모니터링, IOT 및 기타 분야에서 대규모 시계열 데이터 저장, 다차원 쿼리 드릴다운 및 실시간 분석 요구 사항을 충족합니다. 시나리오. 오픈 소스 계획이 있지만 아직 오픈 소스는 아닙니다.

팀 규모

현재 데이터베이스 개발 인력은 8~10명 정도다.

다른 정보는 알 수 없습니다.

Tantivy (해외/오픈소스/전문검색)

Keyword: 전문검색 / 루씬

tantivy[157]는 Rust에서 구현된 Apache Lucene에서 영감을 받은 전체 텍스트 검색 엔진 라이브러리입니다.

Tantivy는 훌륭합니다. 다음은 Rust + Tantivy + AWS를 기반으로 구축된 앱입니다. 10억 개의 웹 검색을 제공하고 일반적인 단어의 클라우드를 생성합니다[158].

코드 및 팀 규모

코드 크기는 약 50000 줄의 Rust 코드입니다.


  • 팀 규모:

  • 주요 개발: 1명


커뮤니티 공헌: 85명

프로젝트 주기

프로젝트는 2016년에 수립되었으며, 반복 주기는 월 평균 1개의 마이너 버전 릴리스이며 현재 0.15.2 버전으로 릴리스되어 있습니다.

Keyword: 지후 / lucene

소개하다

소개하다

Rucene[159]은 Zhihu 팀에서 오픈 소스로 제공하는 Rust 기반 검색 엔진입니다. Rucene은 완전한 애플리케이션이 아니라 전체 텍스트 검색 기능을 애플리케이션에 추가하는 데 쉽게 사용할 수 있는 코드 라이브러리 및 API입니다. Apache Lucene 6.2.1 프로젝트의 Rust 포트입니다.

코드 및 팀 규모

코드 크기는 약 100,000 줄의 Rust 코드입니다.


  • 팀 규모:

  • 주요 개발: 4명


커뮤니티 기여: 0명

회사의 내부 프로젝트가 오픈 소스이고 현재 특정 시맨틱 버전이 반복되지 않았기 때문일 수 있습니다. Zhihu의 생산 환경에서 사용됩니다.

mdnice 편집기

클라우드 네이티브

클라우드 네이티브 분야에는 기밀 컴퓨팅, 서버리스, 분산 컴퓨팅 플랫폼, 컨테이너, WebAssembly, 운영 및 유지 관리 도구 등이 포함됩니다.

StratoVirt (국내/오픈소스/컨테이너)

키워드: 컨테이너 / 가상화 / 서버리스

StratoVirt[160]는 Huawei OpenEuler 팀이 개발한 차세대 Rust 기반 가상화 플랫폼입니다.

성층권에서 따온 Strato는 지구 대기권에 있는 성층권을 의미하며, 대기는 지구를 외부 환경으로부터 보호할 수 있으며, 성층권은 대기 중에서 가장 안정적인 층으로, 마찬가지로 가상화 기술은 운영 체제 플랫폼에 있는 격리 계층입니다. 상위 수준의 악성 응용 프로그램에 의해 운영 체제 플랫폼이 손상되지 않도록 보호할 수 있을 뿐만 아니라 정상 응용 프로그램에 안정적이고 신뢰할 수 있는 운영 환경을 제공할 수 있습니다. 오픈오일러 플랫폼. 동시에 Strato는 가볍고 유연하며 안전하고 완벽한 보호 기능이라는 프로젝트의 비전과 미래를 전달합니다.

StratoVirt는 컴퓨팅 산업의 클라우드 데이터 센터를 위한 엔터프라이즈급 가상화 플랫폼입니다.가상 머신, 컨테이너 및 서버리스 시나리오를 지원하는 통합 아키텍처를 실현합니다.경량, 저소음, 소프트웨어 및 하드웨어 협업, 및 보안 이점. StratoVirt는 아키텍처 설계 및 인터페이스에서 구성 요소 어셈블리의 기능 및 인터페이스를 예약합니다. StratoVirt는 표준 가상화를 지원하도록 진화할 때까지 필요에 따라 고급 기능을 유연하게 조립할 수 있으며 기능 요구 사항, 애플리케이션 시나리오 및 가벼움과 손재주 간의 최상의 균형을 찾습니다.

코드 및 팀 규모

코드 크기는 약 27000 줄의 Rust 코드입니다.


  • 팀 규모:

  • 주요 개발자: 4명.


커뮤니티 기여: 15명.

프로젝트 주기

2020-09-23, 릴리스 버전 0.1.0.

2021-03-25, 릴리스 버전 0.2.0.

2021년 5월 28일, 릴리스 버전 0.3.0.

폭죽(해외/상품)

안전
Odaily 공식 커뮤니티에 가입하세요