러스트
Rust 언어는 Mozilla Research에서 개발되었습니다. Graydon Hoare가 2006년에 개발을 시작했고, 2010년에 최초로 공식적으로 발표되었습니다. 이 언어는 메모리 안전성, 병행성 및 성능을 강조하는 시스템 프로그래밍 언어로 설계되었습니다. Rust의 초기 버전은 2015년 1.0으로 릴리스되었으며, 그 이후 꾸준히 발전해왔습니다. Rust는 공식적으로 릴리스된 이후 많은 커뮤니티 및 기업에서 채택되어 시스템 프로그래밍 분야에서 높은 인기를 얻고 있습니다.
특징
러스트는 인터넷에서 실행되는 서버 및 클라이언트 프로그램을 개발하는데 적합한 언어를 목표로 설계되었다. 이 목표에 따라 러스트는 안전성과 병행 프로그래밍, 그리고 메모리 관리의 직접 제어에 초점을 맞추고 있다. 또한 성능 면에서는 C++와 비슷한 수준을 목표로 하고 있다. 미국 국토안보부에서도 이러한 점을 이유로 러스트, 고, C#의 안전한 언어로 전환을 권고했다.[10]
러스트의 문법은 중괄호로 코드 블록을 구분하고, if, else, while 등의 키워드를 사용하는 등 C 및 C++와 유사한 모양을 하고 있다. 그러나 러스트와 C/C++는 의미상으로는 크게 다른 문법을 갖고 있다.
러스트는 메모리 오류를 발생시키지 않도록 설계되었다. 러스트는 널 포인터나 초기화되지 않은 포인터가 존재하지 않도록 강제하고 있다. 모든 변수는 초기값을 가지고 할당되며, 해제된 포인터에 접근하는 코드는 컴파일러가 미리 감지하여 컴파일 오류를 일으킨다.
타입 시스템은 하스켈의 영향을 받아 타입 클래스를 지원한다. 또한, 변수 선언 시 타입을 지정하지 않아도 컴파일러가 타입 추론을 통해 해당 변수의 타입을 지정할 수 있다. 반면 함수의 인자나 반환값에서는 타입 정보를 빼놓을 수 없다.
병행 프로그래밍은 얼랭과 유사한 actor 기반의 모델을 사용하고 있다. 각각의 태스크는 데이터를 직접 공유하지 않고 메시지 전달을 통해서만 데이터를 교환할 수 있다. 메시지를 복사할 때 생기는 성능 저하를 막기 위해, unique box의 경우 데이터 복사 없이 메시지를 전달할 수 있다. unique box는 하나의 객체만이 소유할 수 있고, 다른 태스크로 전달될 경우 데이터 복사 없이 소유권만 바뀌게 된다.
객체 시스템은 implementation, trait, struct 또는 enum으로 이루어져 있다. struct 또는 enum은 객체의 데이터를 정의하는데 사용되며, impl 키워드로 정의하는 implementation은 객체의 멤버 함수를 정의하는데 사용된다. 객체의 상속은 trait을 통해 이루어지며, C++의 다형 상속 문제를 회피하기 위해 trait은 객체의 멤버를 정의할 수 없도록 만들어져 있다.
'코딩' 카테고리의 다른 글
| 라즈베리파이로 집에서 서버 만들기 (0) | 2024.06.12 |
|---|---|
| 자바 스프링 프레임워크: 역사와 발전 (0) | 2024.01.10 |