의견.png

러스트

위키원
some0410 (토론 | 기여)님의 2019년 6월 28일 (금) 13:28 판
이동: 둘러보기, 검색
파일:LUST.png
러스트 로고 LUST 로고

러스트(Rust)는 2012년 미국 모질라재단그레이던 호어(Graydon Hoare)가 개발한 프로그래밍 언어이다. 기존의 C/C++과 동등한 수준의 빠른 속도를 보장하면서도 메모리 오류를 완전히 없애는 것을 목표로 하는 현대적인 프로그래밍 언어이다. 즉 속도와 안정성같은 성능 부분에있어서 많이 유익한 언어인데 이는 컴파일 단계에서 메모리 참조 오류를 발견하는 부분에서 혁신적인 언어이다.[1][2]

개요

러스트 프로그래밍언어는 사용자로 하여금 좀더 빠르고,더 안정적인 소프트웨어를 작성하도록 해준다. 프로그래밍 언어는 항상 저급언어고급언어의 조화 부분에서 삐걱대지만 러스트는 속도와 안정성,편의성까지 고려하는 프로그래밍언어이며,지금까지의 언어들의 특성을 살펴보자면, 항상 이용이 쉽고 안전한 언어는 속도면에서 부족하고, 그와 반대로 컴파일 속도등 퍼포먼스를 강조하는 언어들은 이용이 어렵고 안전성이 떨어지는 현상이 있었는데 러스트언어는 놀랍게도 이를 극복한 언어이다. 러스트는 구글의(Go)언어와 비슷한 목표를 꿈꾸며 성능면에서 앞도적인 우월을 목표로하고 있다. 필자는 요즘 화재가되고 있는 러스트 언어와 파이선(Python)을 함께 사용해서 블록체인의 proof of work 부분 을 사용햘때의 이점등을 중점으로 해당언어를 서술하고자 한다.

등장배경

러스트 언어의 역사

러스트는 원래 그레이던 호어가 혼자 개발하던 언어였다. 그러던 와중에 이 언어의 발전가능성을 알게된 모질라재단의 모질라가 2009년부터 스폰싱을 시작하였고, 2012년 1월에 드디어 본격적인 합동 개발을 시작한다. 따라서 그레이던 호어가 개인적으로 개발한 기간까지 합치면 거의 8년정도의 시간을 할애하여, 본격적인 개발이 시작된 후부터 약3년이 넘는 기간 동안 개발된 언어인것이다. 참고로 모질라는 웹 기술을 주도하는 사람이며 이런 러스트의 특성을 살려 웹브라우저를 다시 개량항 비전을 가지고 실제로 이를 위한 시험 프로젝트로 'Servo'라는 브라우저 엔진이 개발되고있다.[3]

특징

러스트 언어는 시스템 수준의 빠른 소프트웨어를 제작하기 위한 언어인데, C/C++ 언어와 동일한 수준의 퍼포먼스 를 달성하면서도 메모리의 오류를 대폭 줄여주는것이 핵심적인 특징이다. 이는 함수형 프로그래밍 언어 로부터 발전된 타입 시스템 에서 발전하였고, 클래스 대신 트레이트(Trait)를 기반으로 다형성을 달성, 매크로의 활용이가능하고 크레이트(Crate)라는 단위로 라이브라리가 배포되며 Cargo라는 패키지 관리 프로그램으로 필요한 라이브러리를 자동으로 다운받을 수 있다. 이제 면밀히 해당 특징들을 분석해 본다.[3]

보다 안정적인 메모리의 관리

이는 러스트 언어만의 독자적이면서도 상당한 상용성을 기대할 수 있는 언어적 특징이기도하다. 기존의 언어는 메모리 안전성이 떨어지거나 개발자의 실수등을 통해서(사람이라면 실수를 한다.), 쓰레기 수집기(garbage collection)을 사용 하여야만 한다. 하지만 러스트는 이러한 작업이 필요가 없다. 그이유는 러스트에는 '소유권'(ownership)이라는 개념을 적용하는데 어떤 객체를 가리키는 포인터는 여러 개가 있을 수 있지만, 그 중 오직 하나만 소유권을 갖게되고 그 소유권이있는 포인터만으로 해당 객체의 내용을 바꿀수 있다. 여기서 핵심은 그 소유권을 가진 포인터가 사라질때, 자동을 메모리가 해제(free) 되는데, 기존의언어는 쓰레기 수집기를통해 작업할시 반듯시 cup와 메모리를 사용하고 따라서 전체 프로그램 수행 속도가 느려지며, 쓰레기 수집이 동반하는 런타임 오버헤드가 러스트에는 없다. 이 규칙에 어긋나는 코드가 발견되면(즉, 메모리 안전성을 침해할 만한 코드가 발견되면), 컴파일 오류가 나고 이는 모든 변수가 초기값을 가지고 할당되며, 해제된 포인터에 접근하는 코드는 컴파일러가 사전에 미리 감지후 파일 오류를 일으키는 방식이며 특히 쓰레기 수집기가 작동시 사실상 프로그램의 실행은 잠시 멈추게 되는데 찰라의 순간이지만 상상해보면 만약 자율주행이나 공장의 위험한 장비를 다루는 기계의 순간의 오작동이나 멈칫거림은 치명적인 사고로 이어질 가능성이있기 때문에 안정성이떨어지게되며 메모리의 수명과 자원의 수명을 일치시키려는 'RAII'라는 원칙이 있는데, 일부 쓰레기 수집 알고리즘에서는 메모리가 해제되는 시점이 불명확하기에 이들 언어에서는 반드시 .close()를 호출하여야한다. 따라서 성능이 위주의 분야에서는 여전히 메모리 안전성이 떨어지는 C/C++를 사용할 수밖에 없었습니다. 대표적인 분야가 게임이나 운영체제 인데, C/C++에서 발생하는 보안 버그들 중 절대 다수는, 알고리즘에 근본적인 문제보다 순전히 프로그래머가 해제할 메모리를 잊어버리는 실수로 발생하기도하니 쓰레기 수집기능이없으나, 성능 때문에 C/C++를 포기할 수도 없었으나 이제 러스트로 그러한 문제들을 해결할수있다.[3]

장점

러스트는 위에서 언급했듯이 쓰레기 수집기가 없어 C나 C+ 프로그램에서 자주 발생하는 잘못된 연산을 수행'(segmentation fault)하는 오류의 발생이없다. 더불어 파이선 이상의 높은 수준의C++와 동일하게 Rust는 비용 없는 추상화(zero-cost abstractions) 가 제공되고 메모리 안정성도 뛰어나며 빠르다. 또한 C++와 유사하게 extern "C" 를 써서 c와의 호환이 용이하며, 문법 자체도 c계열이기에 {, }, <, > 같은 기호들을 사용하여 배우기 좋고, 여러플랫폼에 걸쳐 기본 시스템 코드로 컴파일 되는구조이기 때문에 바이너리자체를 포함하여 런타임도 없고, 러스트를 사용한 파이선과 순수 파이선을 비교할때 러스트와 함께 사용한경우가 3배정도더빠르다. 러스트는 필요하다면 c나c++의 raw pointer 와 같이 메모리를 직접적으로 조작해야 하는 경우 부분적으로 이를 비활성하여 안정성의 측면에서볼떄 좀더 안전의 기본값을 더 높은 수준의 소프트웨어로 개발할수 있다. 러스트언어는 리눅스,윈도우,맥os주요 3가지 주된 플랫폼에서 모두 작동하니 개발자사이의 의견교류와 이들 운영체제사이의 변환 과정에서 드는 노력을 줄여준다. 프로그래밍언어의 유용성과 가치를 평가할때 서드 파티를 사용해 얼마나 라이브러리를 풍부히 하는지 확인하는데 러스트의 카고는 약1만개의 크레이트를 열거하여 사용한다.[3][4]

단점

러스트의 단점으로는 현실적으로 봤을 때 신생언어 이기때문에 이러한 메타포를 배우기 어려울수 있고 소유권,대여와 같은 러스트만의 메모리 관리 시스템의 사용이 익숙하지않다. 러스트가 C++언어보다 쉬운건 사실이지만 여전히 자바나, 파이선 같은 쓰레기 수집을 사용하는 자동 관리되는 언어들과 비교했을때 친밀성이낮아 사용이 여전히 난해하며 메모리관리에 관하여 개발 효율이 떨어질수도있습니다.[3][5]

러스트의 소유권

소유권(ownership)은 Rust의 특유한 개념이며, 쓰레기 수집기 없이도 메모리를 안전하게 사용할 수 있도록 보장한다. 따라서 그작성기능을 알아본다. 프로그램사용자라면 어떤 언어를 실행 할때 반드시 실행중에 컴퓨터 메모리를 관리해주어야하는데 기종의 언어들은 쓰레기 수집기를 이용하여 관리하고 할당및 풀기를 해주나 러스트는 컴파일시점에서 메모리를 관리한다. 이는 런타임 성능 저하를 방지한다. 소유권의 규칙으로는 어떤 객체,변수를 가리키는 포인터는 여러 개가 있을 수 있지만, 그 중 오직 하나만 소유권을 가지며 또한 소유권이 있는 포인터만 객체의 내용을 바꿀 수 있고 마지막에 접근하여 소유권을 가진 그 포인터가 사라질 때 메모리도 자동으로 해제된다.[3]

문법 예시

러스트 맛보기

먼저 간단한 문자열의 출력 'hello world'이다 간단히 메인 함수 를 호출하여 출력하는데 이때 파이선과 다른점이 (세미콜론 ;)을 하용한다는 것인데 이는 러스트가 c의 기반으로 문법을 구동하기 때문이다.

파일:Hello.png
맛보기1 간단한 문자열 출력


변수의 선언과 활요은 let을 이용하고 println!으로 출력하는데 일반적으로 변수 값을 바꾸는것이 가능하나 러스트는 let mut를통해서 다시 저장해주어야 값을 바꾸어 출력해야한다.

파일:변수.png
맛보기2 변수 출력

사용 프로젝트

블록체인에 적용해본 러스트 언어

파이선과 러스트의 적용

각주

  1. 러스트 (프로그래밍 언어)〉, 《위키백과》
  2. Rust〉, 《나무위키》
  3. 3.0 3.1 3.2 3.3 3.4 3.5 , 〈러스트 프로그래밍 언어란 무엇이며, 왜 중요한가? 〉, 《PGR21》, 2015-02-14
  4. , Serdar Yegulalp 기자, 〈C·C++ 개발자 노린다··· ‘러스트’ 언어란? 뜨는 이유는 〉, 《CIO》, 2018-12-07
  5. 인용 오류: <ref> 태그가 잘못되었습니다; .EB.9F.AC.EC.8A.A4.ED.8A.B8_.EA.B8.B0.EC.82.AC라는 이름을 가진 주석에 제공한 텍스트가 없습니다

같이 보기


  의견.png 이 러스트 문서는 프로그래밍에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.