Rust 런타임
Rust 런타임
사실 Rust는 일반적인 의미의 "런타임"이 거의 없다고 알려져 있어요. 그런데도 공식 문서에는 런타임(runtime) 이라는 이름의 장이 있는데요, 이 장은 Rust 런타임의 특정 측면을 정의하는 기능들, 특히 런타임의 메모리 할당과 같은 부분을 다뤄요.
본문
이 장은 Rust 런타임의 일부 측면을 정의하는 기능들에 대해 다뤄요.
global_allocator 속성
global_allocator 속성은 메모리 할당자(allocator)를 선택하는 속성이에요. 어디선가 전역으로 메모리를 할당해야 할 때, 그 일을 누가 맡을지를 정해주는 거죠.
#![allow(unused)]
fn main() {
use core::alloc::{GlobalAlloc, Layout};
use std::alloc::System;
struct MyAllocator;
unsafe impl GlobalAlloc for MyAllocator {
unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
unsafe { System.alloc(layout) }
}
unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
unsafe { System.dealloc(ptr, layout) }
}
}
#[global_allocator]
static GLOBAL: MyAllocator = MyAllocator;
}
- 문법:
global_allocator속성은 MetaWord 구문을 사용해요. - 위치 제한: 이 속성은 타입이
GlobalAlloc트레잇을 구현하는 static 항목에만 적용할 수 있어요. - 중복 제한: 하나의 항목에는 한 번만 사용할 수 있어요. 그리고 크레이트 그래프 전체에서도 한 번만 사용할 수 있어요.
- 이 속성은 표준 라이브러리 프렐류드(prelude)로부터 내보내져요.
windows_subsystem 속성
windows_subsystem 속성은 Windows 타깃에서 링크할 때의 서브시스템을 결정해요.
#![allow(unused)]
#![windows_subsystem = "windows"]
fn main() {
}
- 문법: MetaNameValueStr 구문을 사용하며, 허용되는 값은
"console"과"windows"에요. - 위치 제한: 크레이트 루트(crate root)에만 적용할 수 있어요.
- 중복: 처음 사용한 것만 효과가 있어요. 이후의 사용에는 rustc가 린트를 냅니다(이건 나중에 에러로 바뀔 수도 있어요).
이 속성은 Windows가 아닌 타깃과 bin이 아닌 크레이트 타입에서는 무시돼요.
두 가지 값이 어떻게 다른지 볼게요.
"console"(기본값): console 프로세스가 기존 console에서 실행되면 그 console에 연결되고, 그렇지 않으면 새 console 창이 만들어져요."windows": 기존 console과 무관하게 분리(detached)된 채로 실행돼요. 시작할 때 console 창을 표시하고 싶지 않은 GUI 애플리케이션에서 흔히 쓰는 값이에요.
더 알아보기 (Learn more)
- Rust Reference - Attributes — 속성의 전반적인 문법과 규칙.
- rustc book -
global_allocator— 할당자와 관련된 컴파일 옵션.