Go vs. Rust (1)

wldbs._.·2024년 8월 5일

GoSeminar

목록 보기
1/4
post-thumbnail

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는 이런 문제를 컴파일 타임에 잡아내기 때문에 런타임에서의 오류는 줄어든다
profile
공부 기록용 24.08.05~ #LLM #RAG

0개의 댓글