2024.08.01 GO와 RUST 비교 입문 (1)
GO 튜토리얼 w3school GO tutorial
The Rust Programming Language 번역본 rust lang book
출처: IT WORLD 기사 “차세대 C++는 누가 될까” 러스트vs.카본vs.Cpp프론트 언어 차이 살펴보기
C++은 컴파일 과정에서 많은 시간 필요 → 이 문제를 해결하는 과정에서 GO 언어 구상 및 개발
- 컴파일, 링크, 빌드 in C
- 빌드 과정 내에 컴파일과 링크 과정이 있다.
- 컴파일 과정: 소스코드(.c) → 목적 파일(.o)로 변환
- 링크 과정: 모든 오브젝트 코드(.o)를 합쳐서 → 실행파일(.out)로 만든다
C++의 대안으로는 RUST/CARBON/CPP프론트
- PRODUCTION 수준으로 사용 가능한 언어는 RUST 유일
1-1. RUST의 장점
- 성능, 안정성, 생산성
- 빠르고 안전하고 사용하기 쉽도록 설계, 안정적이고 효율적인 SW 구축 목표
- 메모리 효율성 높다 ← 런타임(=’실행 시간에 프로그래머가 의도치 않게 부가된 코드’ → C와 같은 언어는 10줄 작성하면 실행했을 때 10줄만 존재, 그러나 어떤 언어는 실행했을 때 10줄 외에 부가적인 코드가 첨부된다) 또는 가비지 콜렉터 X
- ‘가비지 콜렉터가 없다’
- 가비지 콜렋터가 있는 언어에서는 메모리 해제를 위해 주기적으로 작업이 수행되어 성능이 일시적으로 저하될 수 있다
- RUST에서는 메모리 해제가 컴파일 타임에 결정 → 런타임 성능(=’실행시간’)이 더 예측 가능
- 메모리 안전성을 보장하기 위해 런타임(’프로그램이 실행되는 동안의 시간’)에서 추가적인 메모리 정리 작업이 필요하지 않으며 → 성능이 더 예측 가능
- 메모리 관리를 컴파일 타임에 해결 = 메모리 오류 방지, 성능 극대화
- = 프로그램이 실행되기 전에 메모리 사용과 관련된 문제를 미리 검출하고 처리
- RUST의 RAII(Resource Acquisition is Initialization, 자원 획득은 초기화) 패턴 → 자원(메모리 포함)이 스코프(’프로그램 내에서 아이템이 유효함을 표시하기 위한 범위’ ⇒ 변수는 선언된 시점부터 현재의 스코프가 끝날 때까지 유효) 벗어날 때 자동으로 해제 ⇒ 메모리 누수 방지

여기서 잠깐! 소유권이란 무엇일까?
→ 메모리 해제 시점을 정확하게 예측 ⇒ 프로그램의 성능을 예측 가능한 범위 내로 유지
- ⇒ 성능이 중요한 서비스를 구동하고, 임베디드 디바이스(’특정 기능이나 작업을 수행하도록 설계된 전자기기’, 예: 엔진 제어 장치, 모바일 기기 내 센서)에서 실행되고 다른 언어와 손쉽게 통합된다
- 뛰어난 문서화, 오류 메시지가 포함된 컴파일러, 통합 패키지 관리자와 빌드 툴, 자동 완성 및 형식 검사가 포함된 다중 편집기 지원, 자동 포맷터 등을 포함한 최상급 툴
추가: Garbage Collector
GARBAGE COLLECTION(GC): 프로그램이 실행될 떄 더이상 사용하지 않는 메모리를 끊임없이 찾는다
: 메모리 관리 방법 중 하나, 시스템에서 더 이상 사용하지 않는 메모리 블록을 찾아 자동으로 다시 사용 가능한 자원으로 회수
→ 어떤 방식의 쓰레기 수집을 사용하든 실행 시간에 작업을 하는 이상 성능 하락을 피할 수는 없다. 쓰레기 수집기가 존재하더라도, 더 이상 접근이 불가능한 객체만 회수하기 때문에 메모리 누수는 발생할 수 있다.
← WHY? 기존에 가리키고 있던 메모리를 새롭게 선언되거나 형 변환이 되면 다른 곳을 가리키게 되면서 주소를 잃어버리게 되고, 다시 찾을 수 없게 되면서 정리되지 않은 메모리가 생겨버리게 되기 때문!
- 더 이상 필요 없어진 메모리 = 쓰레기(GARBAGE)
- 이 쓰레기를 효과적으로 처리하는 작업 = GC
1-2. RUST의 단점
- 메모리 관리 방식의 복잡성
- 메모리 관리의 책임은 개발자에게 → 그러나 RUST는 이런 문제를 컴파일 타임에 잡아내기 때문에 런타임에서의 오류는 줄어든다