최근 편집
최근 토론
무작위
도구
스킨 설정
파일 올리기
도구
최근 편집
최근 토론
돌아가기
삭제
이동
파일 올리기
Rust
(편집)
(불러오기)
(편집 필터 규칙)
{"section": "", "markup": "namumark"}
(틀)
(중괄호)
(개행)
(추가)
==개요== 파이어폭스를 만든 모질라 재단에서 개발하고, 현재는 러스트 재단에서 관리하고 있는 프로그래밍 언어이다. 다른 프로그래밍 언어들이 흔히 그러듯이, 심심한 모질라 재단의 개발자가 처음 만들었는데, 모질라 재단이 그걸 보고 파이어폭스의 신형 렌더링 엔진인 Servo를 개발하는데 써먹기 위해서 자기네들 프로젝트로 편입시켰다. [[C언어]]처럼 프로그래머에게 메모리 관리를 일임하지 않고, [[Java]], [[Kotlin]]과 달리 가비지 컬렉터를 사용하지 않으면서도 '''소유권 (ownership)'''이라는 개념으로 메모리 안정성을 제공하는 특이한 언어이다. 상당히 좋은 언어이지만, 그렇다고 이 언어를 첫 프로그래밍 언어로 배우는 것은 권장되지 않으며, 다른 언어들을 몇개 배우고 나서 --고통을 좀 느껴보고-- 배우는 것이 좋다. 러스트의 여러 문법들은 초보자 입장에서 대체 왜 이런 문법이 필요한지 이해할 수 없는 경우가 잦기 때문. [* 예를 들어, 변수를 다른 변수에 대입하면 Move되어 원래 변수는 더 사용할 수 없다는 기초적인 개념도 메모리 관리의 지옥을 겪지 않았다면 왜 이렇게 만들었는지 이해할 수 없을 것이다.] ==특징== ===빠른 속도=== 러스트는 C/C++의 저수준 시스템 프로그래밍 언어를 대체하기 위해 만들어진 만큼, Zero-cost abstraction (무비용 추상화)를 지향한다. 이말인 즉슨, 클래스, 메소드, 제네릭 등 다양한 고수준 기능을 지원하면서도, 메모리 소비나 실행속도에 큰 영향을 미치지 않는다는 뜻이다. 이외에도 여러 컴파일 단계에서의 최적화를 통해 러스트는 [[C언어]]나 [[C++]]와 동급의, 혹은 더 빠른 속도를 낼 수 있다. ===안전한 메모리 관리=== 러스트는 가비지 콜렉터를 사용하지 않고도, 메모리 누수가 나지 않게 설계된 언어이다. [[C++]]같은걸 사용해서 프로젝트를 하다보면 메모리 해제를 깜박해서 메모리가 줄줄 새는걸 볼 수 있고, 가비지 콜렉터는 stop-the-world 같은 오버헤드가 발생하는데, 러스트는 소유권이라는 개념을 도입하여 이러한 문제 없이 메모리 관리를 편리하게 하였다. C++의 unique_ptr 랑 비슷한데, 변수는 값에 대한 고유한 소유권을 가지며, 대입은 복사가 아닌, 소유권의 이동이다. 이러한 소유권 개념이 다른 프로그래밍 언어에 비해선 다소 거추장스럽다고 생각할 수 있으나, 메모리가 어디서 새는지 확인하기 위해 디버거를 들고 프로그램을 이곳저곳 찔러보는 것 보다는 훨씬 나은 경험일 것이다. ===강력한 컴파일러=== 러스트는 안전성을 위해 --[[자바스크립트|다른 어떤 언어]]와는 다르게-- 컴파일 단계에서 최대한 많은 오류를 잡아내며, 컴파일 단계에서 잠재적인 오류나 오류의 해결 방법 등 다양한 정보를 제공한다. --다른 언어에서 런타임 에러가 10번 날 때, 러스트에서는 그 중 컴파일 에러가 7번정도 난다고 보면 된다.-- 다만 많은 기능이 있어서 컴파일 속도는 상대적으로 느린 편에 속한다. ===모던한 패키지 관리=== 러스트에는 Cargo라고 하는 패키지 관리자 겸 빌드 도구가 있다. [[Python]]의 pip나, [[Java]], [[Kotlin]]의 Gradle, [[C언어]]의 Cmake와 비슷한 역할을 하는데, 이런 도구를 많이 써봤다면 알겠지만 --특히 pip-- 설치나 사용이 까다로운 편에 속한다. Cargo는 이들에 비하면 눈물나게 간편한 의존성 관리 기능을 제공한다. ===에러 관리=== 러스트는 철저하게 예외를 관리하고, '''예외 처리를 모든 경우에 강제'''하여, 프로그램의 안정성을 제공한다. 입출력이나 메모리 관련 등 예외가 발생할 가능성이 있는 모든 함수는 Result<T, E>의 형태로 제공되어, 프로그래머는 반드시 이런 반환값이 에러일 경우에 대한 예외처리를 해주어야 한다. [* 그래서 러스트 코드를 보면 코드 이곳저곳에 .unwrap() 으로 도배되어 있는 것을 볼 수 있다.] 예외가 발생하여도 [[C++]]처럼 에러 위치를 찾기 위해 코드 스택을 되감거나 하지 않아, 오버헤드도 상당히 적게 예외를 처리할 수 있다. ===하이지닉 매크로== 러스트의 매크로는 [[C언어]]의 #define같은 단순 문자열 치환이 아닌, [[LISP]]같은 함수형 프로그래밍 언어의 매크로를 차용하여 만든 하이지닉 매크로이다. 매크로에 입력될 변수의 타입을 지정하거나, 매크로 메타 프로그래밍이 가능하다. 러스트를 처음 배울 때 쓰게 되는 출력함수인 println!도 함수가 아닌 일종의 매크로이다.
==개요== 파이어폭스를 만든 모질라 재단에서 개발하고, 현재는 러스트 재단에서 관리하고 있는 프로그래밍 언어이다. 다른 프로그래밍 언어들이 흔히 그러듯이, 심심한 모질라 재단의 개발자가 처음 만들었는데, 모질라 재단이 그걸 보고 파이어폭스의 신형 렌더링 엔진인 Servo를 개발하는데 써먹기 위해서 자기네들 프로젝트로 편입시켰다. [[C언어]]처럼 프로그래머에게 메모리 관리를 일임하지 않고, [[Java]], [[Kotlin]]과 달리 가비지 컬렉터를 사용하지 않으면서도 '''소유권 (ownership)'''이라는 개념으로 메모리 안정성을 제공하는 특이한 언어이다. 상당히 좋은 언어이지만, 그렇다고 이 언어를 첫 프로그래밍 언어로 배우는 것은 권장되지 않으며, 다른 언어들을 몇개 배우고 나서 --고통을 좀 느껴보고-- 배우는 것이 좋다. 러스트의 여러 문법들은 초보자 입장에서 대체 왜 이런 문법이 필요한지 이해할 수 없는 경우가 잦기 때문. [* 예를 들어, 변수를 다른 변수에 대입하면 Move되어 원래 변수는 더 사용할 수 없다는 기초적인 개념도 메모리 관리의 지옥을 겪지 않았다면 왜 이렇게 만들었는지 이해할 수 없을 것이다.] ==특징== ===빠른 속도=== 러스트는 C/C++의 저수준 시스템 프로그래밍 언어를 대체하기 위해 만들어진 만큼, Zero-cost abstraction (무비용 추상화)를 지향한다. 이말인 즉슨, 클래스, 메소드, 제네릭 등 다양한 고수준 기능을 지원하면서도, 메모리 소비나 실행속도에 큰 영향을 미치지 않는다는 뜻이다. 이외에도 여러 컴파일 단계에서의 최적화를 통해 러스트는 [[C언어]]나 [[C++]]와 동급의, 혹은 더 빠른 속도를 낼 수 있다. ===안전한 메모리 관리=== 러스트는 가비지 콜렉터를 사용하지 않고도, 메모리 누수가 나지 않게 설계된 언어이다. [[C++]]같은걸 사용해서 프로젝트를 하다보면 메모리 해제를 깜박해서 메모리가 줄줄 새는걸 볼 수 있고, 가비지 콜렉터는 stop-the-world 같은 오버헤드가 발생하는데, 러스트는 소유권이라는 개념을 도입하여 이러한 문제 없이 메모리 관리를 편리하게 하였다. C++의 unique_ptr 랑 비슷한데, 변수는 값에 대한 고유한 소유권을 가지며, 대입은 복사가 아닌, 소유권의 이동이다. 이러한 소유권 개념이 다른 프로그래밍 언어에 비해선 다소 거추장스럽다고 생각할 수 있으나, 메모리가 어디서 새는지 확인하기 위해 디버거를 들고 프로그램을 이곳저곳 찔러보는 것 보다는 훨씬 나은 경험일 것이다. ===강력한 컴파일러=== 러스트는 안전성을 위해 --[[자바스크립트|다른 어떤 언어]]와는 다르게-- 컴파일 단계에서 최대한 많은 오류를 잡아내며, 컴파일 단계에서 잠재적인 오류나 오류의 해결 방법 등 다양한 정보를 제공한다. --다른 언어에서 런타임 에러가 10번 날 때, 러스트에서는 그 중 컴파일 에러가 7번정도 난다고 보면 된다.-- 다만 많은 기능이 있어서 컴파일 속도는 상대적으로 느린 편에 속한다. ===모던한 패키지 관리=== 러스트에는 Cargo라고 하는 패키지 관리자 겸 빌드 도구가 있다. [[Python]]의 pip나, [[Java]], [[Kotlin]]의 Gradle, [[C언어]]의 Cmake와 비슷한 역할을 하는데, 이런 도구를 많이 써봤다면 알겠지만 --특히 pip-- 설치나 사용이 까다로운 편에 속한다. Cargo는 이들에 비하면 눈물나게 간편한 의존성 관리 기능을 제공한다. ===에러 관리=== 러스트는 철저하게 예외를 관리하고, '''예외 처리를 모든 경우에 강제'''하여, 프로그램의 안정성을 제공한다. 입출력이나 메모리 관련 등 예외가 발생할 가능성이 있는 모든 함수는 Result<T, E>의 형태로 제공되어, 프로그래머는 반드시 이런 반환값이 에러일 경우에 대한 예외처리를 해주어야 한다. [* 그래서 러스트 코드를 보면 코드 이곳저곳에 .unwrap() 으로 도배되어 있는 것을 볼 수 있다.] 예외가 발생하여도 [[C++]]처럼 에러 위치를 찾기 위해 코드 스택을 되감거나 하지 않아, 오버헤드도 상당히 적게 예외를 처리할 수 있다. ===하이지닉 매크로== 러스트의 매크로는 [[C언어]]의 #define같은 단순 문자열 치환이 아닌, [[LISP]]같은 함수형 프로그래밍 언어의 매크로를 차용하여 만든 하이지닉 매크로이다. 매크로에 입력될 변수의 타입을 지정하거나, 매크로 메타 프로그래밍이 가능하다. 러스트를 처음 배울 때 쓰게 되는 출력함수인 println!도 함수가 아닌 일종의 매크로이다.
비로그인 상태입니다. 편집 시 지금 접속한 IP가 기록됩니다.
문서 편집을 저장하면 당신은 기여한 내용을 CC-BY-NC-SA 3.0(문서에 별도 명시된 경우 해당 라이선스) 로 배포하고 기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다. 이 동의는 철회할 수 없습니다
저장
미리보기
편집지침
에 어긋나는 편집은 삭제되고, 제제를 받을 수 있습니다.