IT

Rust vs. Go 특징과 차이점이 뭐에요?

jaewon_sss 2024. 7. 8. 16:45
반응형
 

1. 언어 개요

Rust:

  • 개발사: Mozilla에서 개발.
  • 특징: 메모리 안전성과 성능에 중점.
  • 사용 사례: 시스템 프로그래밍, 성능이 중요한 애플리케이션.

Go:

  • 개발사: Google에서 개발.
  • 특징: 간결한 문법과 빠른 컴파일 속도.
  • 사용 사례: 서버 프로그래밍, 네트워킹 도구.

 

 

 

2. 메모리 관리

Rust:

  • 메모리 안전성: 컴파일 타임에 메모리 오류를 방지.
fn main() {
    let x = 5;
    let y = &x;
    println!("y: {}", y);
}

Go:

  • 가비지 컬렉션: 런타임에 메모리 관리를 자동으로 처리.
package main

import "fmt"

func main() {
    x := 5
    y := &x
    fmt.Println("y:", *y)
}

 

 

 

3. 동시성 처리

Rust:

  • 주요 기능: 소유권 시스템을 이용한 안전한 동시성.
  •  
use std::thread;

fn main() {
    let handle = thread::spawn(|| {
        for i in 1..10 {
            println!("hi number {} from the spawned thread!", i);
        }
    });

    for i in 1..5 {
        println!("hi number {} from the main thread!", i);
    }

    handle.join().unwrap();
}

Go:

  • 주요 기능: 고루틴과 채널을 이용한 간편한 동시성.
package main

import (
    "fmt"
    "time"
)

func main() {
    go func() {
        for i := 1; i < 10; i++ {
            fmt.Printf("hi number %d from the goroutine!\n", i)
            time.Sleep(time.Millisecond * 50)
        }
    }()

    for i := 1; i < 5; i++ {
        fmt.Printf("hi number %d from the main thread!\n", i)
        time.Sleep(time.Millisecond * 50)
    }

    time.Sleep(time.Second)
}

 

 

 

4. 컴파일 시간 및 실행 속도

Rust:

  • 컴파일 시간: 상대적으로 느림.
  • 실행 속도: C/C++ 수준의 성능.
fn main() {
    println!("Hello, Rust!");
}

 

Go:

  • 컴파일 시간: 매우 빠름.
  • 실행 속도: 상당히 빠르지만 Rust보다는 낮음.
package main

import "fmt"

func main() {
    fmt.Println("Hello, Go!")
}

 

 

 

5. 에러 처리

Rust:

  • 에러 처리 방식: Result와 Option 타입을 사용한 명시적 에러 처리.
fn divide(a: f64, b: f64) -> Result<f64, String> {
    if b == 0.0 {
        Err(String::from("Division by zero"))
    } else {
        Ok(a / b)
    }
}

fn main() {
    match divide(4.0, 2.0) {
        Ok(result) => println!("Result: {}", result),
        Err(e) => println!("Error: {}", e),
    }
}

 

Go:

  • 에러 처리 방식: 다중 반환 값을 이용한 에러 처리.
package main

import "fmt"

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, fmt.Errorf("division by zero")
    }
    return a / b, nil
}

func main() {
    result, err := divide(4, 2)
    if err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println("Result:", result)
    }
}

 

 

 

6. 생태계 및 커뮤니티

Rust:

  • 생태계: 안정적인 패키지 관리자(Cargo)와 강력한 커뮤니티.
  • 예시: 다양한 라이브러리와 툴체인을 제공하는 crates.io.

Go:

  • 생태계: 표준 라이브러리가 매우 강력하며, 패키지 관리도 쉬움.
  • 예시: go modules을 통한 의존성 관리.
반응형