Rust (0) - Hello Rust!

kimseyoung·2023년 1월 2일
0

Rust

목록 보기
1/1

Rust

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

2006년 개발자 그레이든 호아레의 개인 프로젝트로 시작되었으며, 2009년 호아레의 고용주인 모질라가 개발에 참여했다. 2010년 처음으로 일반에 공개되었으며, 같은 해 Objective Caml로 작성된 초기 컴파일러에서 Rust로 작성된 컴파일러로 전환되었다. rustc(러스트의 공식 컴파일러)는 2011년 처음으로 자기 자신을 컴파일하는데 성공했다.

2012년 1월에는 첫 번째 알파 버전인 0.1이 발표되었고, 현재 1.66 버전이 운용중이다.

Cargo

Cargo는 러스트의 빌드 시스템이다. 러스트는 CPU 병행처리 및 메모리 자원 누수 방지등의 언어 철학 바탕위에 설계된 취지에 맞게 안정성으로 제작된 프로그램은 빌드 과정에서 사전에 불안정한 결과를 방지할 수 있다는 빌드시스템으로까지 이어지는 완전한 안정성을 실현하고 있다. 또한 Cargo는 NodeJS의 npm과 같은 패키지 매니저 역할도 수행한다.

Rust의 특징

러스트는 인터넷에서 실행되는 서버 및 클라이언트 프로그램을 개발하는데 적합한 언어를 목표로 설계되었다. 이 목표에 따라 러스트는 안전성과 병행 프로그래밍, 그리고 메모리 관리의 직접 제어에 초점을 맞추고 있다. 또한 성능 면에서는 C++과 비슷한 수준을 목표로 하고 있다. 미국 국토안보부에서도 이러한 점을 이유로 Rust, Go, C#의 사용을 권장하며 안전한 언어로 전환을 권고했다.

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

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

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

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

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

profile
Back-end Developer, DevOps Engineer

0개의 댓글