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 등을 이용한 예술적 표현 가능
- 미디어 아티스트, 해커, 디자이너들이 간단하고, 빠르고, 안정적인 코드로 자신을 표현할 수 있게 해주는 라이브러리
특징
러스트는 인터넷에서 실행되는 서버 및 클라이언트 프로그램을 개발하는데 적합한 언어를 목표로 설계되었다. 이 목표에 따라 러스트는 안전성과 병행 프로그래밍, 그리고 메모리 관리의 직접 제어에 초점을 맞추고 있다. 또한 성능 면에서는 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을 사용한 설치:
최신버전 업데이트
Basic
Shadowing
x
변수가 이 후 나오는 x
변수로 인해 숨겨진(Shadowing) 되는 현상. 변수 명을 재활용할 수 있는 이점이 있다.
let mut
과의 차이점은 let mut
은 변수를 "할당"하기 때문에, 자료형이 달라지면 에러가 발생된다.
let and const
Rust Memory Container Cheat-sheet
Rust-memory-container-cs-3840x2160-dark-back.png
for JavaScript
- [추천] Rust Is The Future of JavaScript Infrastructure - Rust는 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은 아직 완벽한 솔루션은 아니지만 개발자가 매우 빠른 웹 경험을 만드는 데 도움 이 될 수 있습니다. 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
- GitHub - simrat39/rust-tools.nvim: Tools for better development in rust using neovim's builtin lsp
- How to debug rust applications with VIM
- Setting up Neovim for Rust Debugging — termdebug and vimspector
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
- Rust web site
- Wikipedia (en) Rust
- RUST 자주 묻는 질문들 (ko)
- Golang vs Rust 퍼포먼스 벤치마킹 썰
- A half-hour to learn Rust
Tutorials
- [추천] Tour of Rust (한글 있음)
- [추천] 들어가기 앞서 - The Rust Programming Language 1
- Rust for professionals
- 다른 언어에 익숙한 전문가를 위한 Rust 가이드. TypeScript, JavaScript, Java, C++, Kotlin 등과 비교하는 예제들을 통해서 설명.
- [원문] Write a First Person Game in 2KB With Rust :: grantsh
- grantshandy/wasm4-raycaster: A demo raycaster for the WASM-4 engine.
- 그래픽 API 없이 FPS(1인칭 슈팅 게임) 작성하기
- 필수 알고리듬 설명
- WASM-4(웹어셈블리 기반 초소형 게임엔진) 이용
- 프로젝트 셋업부터 게임 상태 저장, 캐릭터 이동, 맵, 교차, 원근법 및 깊이를 위한 쉐도우 등을 구현
- gurugio/quick-guide-rust-programming - 러스트 프로그래밍 빠르게 시작하기
Guides
- Github - blog_os - Writing an OS in Rust
- Rust를 WebAssembly로 컴파일하기 (WebAssembly)
- Visual Studio Code를 이용한 Rust 개발환경 꾸며보기
- [추천] So you want to live-reload Rust
- [추천] 러스트 찍먹 후 느낀점? :: BlaCk_Log
- Rust에서 "& 중심 개발" 극복하기 | GeekNews
- [원문] Getting Past “Ampersand-Driven Development” in Rust - Blog
- Rust 입문자들이 종종 삽입하게 되는 &에 대해 확실히 알기
- References (&variable) : 장난감을 빌려주는 것과 같음 "볼 수 있지만, 만질 수는 없어. 다 쓰고나면 돌려줘"
- Mutable References (&mut variable) : 컬러링 북을 빌려주는 것과 같음 "보고 색칠도 맘대로 할 수 있지만, 쓰고나면 돌려줘야 해"
- Owned Values (variable) : 장난감을 남에게 주는 것과 같음 "여기 가져. 니 맘대로 쓸 수있고, 돌려주지 않아도 돼"
- Reference-Counted Pointers (Rc and Arc) :
- Rc 는 "아이 생일파티의 풍선 같은 장식. 누구나 볼 수 있지만 손대지 않기를 원함. 모든 아이가 떠날때 까지 거기 있어야하고, 마지막 아이가 떠나면 청소 시작"
- 어싱크/멀티쓰레드 코드에서는 Arc를 사용. 동작은 Rc와 같음
Embedding & FFI
- A little Rust with your C (C에서 Rust를 사용하는 방법)
- [추천] The (unofficial) Rust FFI Guide 3
- [추천] The Embedded Rust Book 4
Article
- Golang vs Rust 퍼포먼스 벤치마킹 썰 (Go, Rust)
- "러스트"와 "고"를 선택하는 방법 (Go, Rust)
- Rust와 C++의 컴파일 시간 비교하기 | GeekNews