logo MSJO.kr

Rust (programming language)

2019-10-18
MsJ

Rust is a multi-paradigm system programming language focused on safety, especially safe concurrency. Rust is syntactically similar to C++, but is designed to provide better memory safety while maintaining high performance(wikipedia, 2019). Rust 컴파일러는 Rust로 작성한다.

러스트는 인터넷에서 실행되는 서버 및 클라이언트 프로그램을 개발하는데 적합한 언어를 목표로 설계되었다. 이 목표에 따라 러스트는 안전성과 병행 프로그래밍, 그리고 메모리 관리의 직접 제어에 초점을 맞추고 있다. 또한 성능 면에서는 C++와 비슷한 수준을 목표로 하고 있다(ibid). 모질라 재단에서 개발하고 있으며, 차기 웹 브라우저 엔진 프로젝트인 서버(Servo)를 개발하는 데에 쓰인다.

테스트 화면

설치 및 튜토리얼

윈도우 사용자는 프로그램을 다운로드하여 설치하고, MacOS, Linux에서는 아래의 스크립트로 설치한다. 설치 후에는 rustup(rust관리), cargo(프로젝트관리), rustc(컴파일러)를 사용한다. 소스 확장자는 .rs 이며 Rust 언어 튜토리얼은 여기를 참고한다.

curl https://sh.rustup.rs -sSf | sh
Visual Studio Code 설정

대표적인 아래 두 개의 확장을 설치한다.

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug",
            "program": "${workspaceRoot}/target/debug/${workspaceRootFolderName}",
            "args": [],
            "cwd": "${workspaceRoot}/target/debug/",
            "sourceLanguages": ["rust"]
        }
    ]
}
// Rust Hello World
extern crate num_bigint;
use num_bigint::BigUint;

fn main() {
    println!("Hello, world!");
    let number = 1000u32.into();
    println!("{}", factorial(number));
}

fn factorial(number: BigUint) -> BigUint {
    let big_1 = 1u32.into();
    let big_2 = 2u32.into();
    if number < big_2 {
        big_1
    } else {
        let prev_factorial = factorial(number.clone() - big_1);
        number * prev_factorial
    }
}
// C#과 비교
using System;
using System.Numerics;

namespace Hello {
    class Program {
        public static BigInteger fact (Int32 n) {
            BigInteger f = new BigInteger (n);
            while (--n > 1) {
                f *= n;
            }
            return f;
        }

        static void Main (string[] args) {
            Console.WriteLine ("헬로우월드");

            BigInteger f = fact (10000);
            Console.WriteLine (f.ToString ());
        }
    }
}
Reference

Prεv   Nεxt
Content
Search     RSS Feed     BY-NC-ND