Skip to content

Rust

러스트(영어: Rust)는 모질라 리서치에서 개발한 범용 프로그래밍 언어이다. "안전하고, 병렬적이며, 실용적인" 언어로 디자인되었으며, 순수 함수형 프로그래밍, 액터 기반 병렬 프로그래밍, 명령형 프로그래밍, 객체 지향 프로그래밍 스타일을 지원한다.

Categories

Projects

  • Tokio - async io
  • Artichoke - Rust로 만든 Ruby
  • RustPython - Rust로 만든 Python
  • wasm-bindgen - wasm 모듈.
  • Zaplib - Rust와 WASM으로 웹 앱을 가속하는 오픈소스
  • Bevy - Rust 기반 오픈소스 2D/3D 게임엔진
  • Graphul - Express에서 영향받은 Rust 웹 프레임워크
  • Dioxus - React에서 영향받은 Rust용 UI 라이브러리
  • Nannou - 오픈소스 크리에이티브 코딩 프레임워크
    • 미디어 아티스트, 해커, 디자이너들이 간단하고, 빠르고, 안정적인 코드로 자신을 표현할 수 있게 해주는 라이브러리
      • 그래픽, LED, 레이저, 오디오, GUI 등을 이용한 예술적 표현 가능
  • Arroyo - Rust로 작성된 분산 스트림 처리 엔진
  • mapgen.rs - 게임 던전 생성.
  • Cacao - Rust로 macOS/iOS 앱 만들기
  • redb - Pure Rust로 작성된 임베디드 키/밸류 스토어
  • ruff - 러스트로 구현한 빠른 파이썬 린트
  • Uv - 러스트로 구현한 초고속 파이썬 패키징 도구
  • gccrs - Rust를 위한 대체 컴파일러
  • Rust-Query - Rust Type 시스템을 사용한 안전한 RDB쿼리
  • Tuono - Rust 기반 풀스택 React 웹 프레임워크

특징

러스트는 인터넷에서 실행되는 서버 및 클라이언트 프로그램을 개발하는데 적합한 언어를 목표로 설계되었다. 이 목표에 따라 러스트는 안전성과 병행 프로그래밍, 그리고 메모리 관리의 직접 제어에 초점을 맞추고 있다. 또한 성능 면에서는 C++와 비슷한 수준을 목표로 하고 있다.

러스트의 문법은 중괄호로 코드 블록을 구분하고, if, else, while 등의 키워드를 사용하는 등 C 및 C++와 유사한 모양을 하고 있다. 그러나 러스트와 C/C++는 의미상으로는 크게 다른 문법을 갖고 있다.

러스트는 메모리 오류를 발생시키지 않도록 설계되었다. 러스트는 널 포인터나 초기화되지 않은 포인터가 존재하지 않도록 강제하고 있다. 모든 변수는 초기값을 가지고 할당되며, 해제된 포인터에 접근하는 코드는 컴파일러가 미리 감지하여 컴파일 오류를 일으킨다.

타입 시스템은 하스켈의 영향을 받아 타입 클래스를 지원한다. 또한, 변수 선언 시 타입을 지정하지 않아도 컴파일러가 타입 추론을 통해 해당 변수의 타입을 지정할 수 있다. 반면 함수의 인자나 반환값에서는 타입 정보를 빼놓을 수 없다.

병행 프로그래밍은 얼랭과 유사한 actor 기반의 모델을 사용하고 있다. 각각의 태스크는 데이터를 직접 공유하지 않고 메시지 전달을 통해서만 데이터를 교환할 수 있다. 메시지를 복사할 때 생기는 성능 저하를 막기 위해, unique box의 경우 데이터 복사 없이 메시지를 전달할 수 있다. unique box는 하나의 객체만이 소유할 수 있고, 다른 태스크로 전달될 경우 데이터 복사 없이 소유권만 바뀌게 된다.

객체 시스템은 implementation, trait, struct 또는 enum으로 이루어져 있다. struct 또는 enum은 객체의 데이터를 정의하는데 사용되며, impl 키워드로 정의하는 implementation은 객체의 멤버 함수를 정의하는데 사용된다. 객체의 상속은 trait을 통해 이루어지며, C++의 다형 상속 문제를 회피하기 위해 trait은 객체의 멤버를 정의할 수 없도록 만들어져 있다.

How to install

rustup을 사용한 설치:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

최신버전 업데이트

rustup update

Basic

Shadowing

let x = 1;
let x = x + 1;

x 변수가 이 후 나오는 x 변수로 인해 숨겨진(Shadowing) 되는 현상. 변수 명을 재활용할 수 있는 이점이 있다.

let mut과의 차이점은 let mut은 변수를 "할당"하기 때문에, 자료형이 달라지면 에러가 발생된다.

let mut spaces = "   ";
spaces = spaces.len();  // Error !!!

let and const

Rust Memory Container Cheat-sheet

Rust-memory-container-cs-3840x2160-dark-back.png

for JavaScript

Rust 는 빠르고 안정적이며 메모리 효율적인 프로그래밍 언어입니다. 그것은 가장 사랑 프로그래밍 언어를 선정되었습니다 6 개의 년 에 행 ( 설문 조사 ). Mozilla에서 만든 이 도구는 현재 Facebook , Apple , Amazon , Microsoft 및 Google 에서 시스템 인프라, 암호화, 가상화 및 더 낮은 수준의 프로그래밍을 위해 사용하고 있습니다.

왜 이제 Rust가 축소(Terser), 변환(Babel), 형식 지정(Prettier), 번들링(webpack), 린팅(ESLint) 등과 같은 JavaScript 웹 생태계의 일부를 대체하는 데 사용되고 있습니까?

  • Firecracker (AWS)
  • Bottlerocket (AWS)
  • Quiche (Cloudflare)
  • Neqo (Mozilla)

for WebAssembly

WebAssembly (WASM) 는 Rust가 컴파일할 수 있는 이식 가능한 저수준 언어입니다. 브라우저에서 실행되고 JavaScript와 상호 운용 가능하며 모든 주요 최신 브라우저에서 지원됩니다.

WASM은 확실히 JS보다 훨씬 빠르지만 기본 속도는 아닙니다. 테스트에서 Parcel은 기본 바이너리보다 WASM으로 컴파일될 때 10-20배 느리게 실행됩니다. – 데본 고벳

WASM은 아직 완벽한 솔루션은 아니지만 개발자가 매우 빠른 웹 경험을 만드는 데 도움 이 될 수 있습니다. Rust 팀은 고품질의 최첨단 WASM 구현에 전념 하고 있습니다. 개발자에게 이것은 웹용으로 컴파일하면서(WASM을 사용하여) Rust(vs. Go)의 성능 이점을 가질 수 있음을 의미합니다.

이 분야의 일부 초기 라이브러리 및 프레임워크:

  • Yew
  • Percy
  • Seed
  • Sycamore
  • Stork

WASM 세계에서 Rust GUI가 급성장중

Rust의 크로스플랫폼 특성과 소프트웨어 배포가 쉬운 WebAssembly 특성의 결합등이 원인.

  • Dioxus - React와 비슷한 인터페이스 아키텍처
  • Tauri - Electron과 비슷하게 웹을 이용하여 데스크탑앱 작성
  • Xilem - Rust 언어 아키텍처와 잘 얼라인된 데이터-퍼스트 아키텍처
  • Iced - 단순성 및 타입 안전성에 중점을 둔 크로스플랫폼 GUI 라이브러리
  • Egui - 가장 사용하기 쉬운 GUI 라이브러리
  • Kas - “efficient retained-state toolkit”
  • Slint - 임베디드 시스템, 마이크로컨트롤러 및 데스크탑을 타겟
  • Yew - React와 비슷한 웹용 GUI 프레임워크
  • Bracket - rltk(Roguelike Toolkit)에서 리브랜딩. 웹/데스크탑용 Rogukelike 같은 게임개발에 최적화
  • Vizia - Declarative & Reactive GUI 프레임워크
  • Leptos - Isomorphic web framework
  • Perseus - state-driven web development framework
  • Sauron - Versatile web framework for Client/Server web app
  • MoonZoon - 풀 스택 프레임워크
  • Relm4 - Elm 과 GTK4-RS에서 영감받은 idomatic GUI 라이브러리
  • Fltk-rs - Fast Light Toolkit용 Rust 바인딩
  • Makepad - UI Framework + IDE

rust + WebAssembly + Game

Debugging

rust + Ethereum

Rust projects and tools

  • pwasm-ethereum - Collection of externs to interact with ethereum-like network.
  • Ethereum WebAssembly
  • oasis_std - OASIS API reference
  • Solaris
  • SputnikVM - Rust Ethereum Virtual Machine Implementation
  • Parity - Ethereum Rust client
  • rust-web3 - Rust implementation of Web3.js library
  • Wavelet - Wavelet smart contract in Rust

Documentation

Rust 입문용 치트시트 (Cheat Sheet)
https://happygrammer.github.io/rust/cheat-seat/
https://happygrammer.github.io/rust/rust-cheat-sheet.pdf
Happygrammer.github.io_-_rust-cheat-sheet.pdf
파이썬 프로그래머를 위한 러스트 입문
https://indosaram.github.io/rust-python-book/ch1-00.html
https://indosaram.github.io/rust-python-book/print.html
Indosaram.github.io_-_rust-python-book.pdf

See also

Favorite site

Tutorials

Guides

Embedding & FFI

Article

References


  1. The_Rust_Programming_Language.pdf 

  2. A-guide-to-porting-c-to-rust.pdf 

  3. Michael-f-bryan.github.io_-unofficial-The_Rust_FFI_Guide-_20200910.pdf 

  4. Rust-embedded.github.io_-_The_Embedded_Rust_Book.pdf