포인터
소개
이 문서는 Wave 언어에서 제공하는 포인터 기능과 그 활용 방식에 대해 설명합니다. Wave는 저수준 시스템 프로그래밍을 지원하는 언어로서, 명시적인 메모리 주소 조작이 필요한 상황을 고려하여 포인터 기능을 제공합니다.
Wave의 포인터 설계는 Wave Explicit Memory Type Model을 기반으로 합니다. 이 모델은 포인터와 배열을 문법적 트릭이나 라이브러리 추상화가 아닌, 언어 차원의 명시적인 메모리 타입으로 정의하는 것을 목표로 합니다.
이러한 설계에 따라 Wave에서는 포인터를 ptr<T> 형태의 타입으로 표현하며,
이는 특정 타입 T의 값을 저장하고 있는 메모리 주소를 가리키는 타입임을 명확하게 드러냅니다.
이 접근 방식은 포인터를 연산자나 선언 문법이 아닌,
타입 시스템의 일부로 다룸으로써 메모리 구조를 더 직관적이고 일관되게 표현할 수 있게 합니다.
포인터는 특정 타입의 메모리 주소를 가리키는 변수이며, 이를 통해 메모리에 저장된 값에 직접 접근하거나 해당 값을 수정할 수 있습니다. 이 기 능은 시스템 소프트웨어, 네이티브 라이브러리, 성능이 중요한 코드, 하드웨어 제어와 같은 영역에서 핵심적인 역할을 합니다.
포인터 선언
Wave에서 포인터는 ptr<타입> 형태로 선언합니다.
이는 해당 타입의 값을 저장하고 있는 메모리 주소를 가리키는 포인터임을 명확하게 표현합니다.
예를 들어, i32 타입의 값을 가리키는 포인터는 다음과 같이 선언할 수 있습니다.
var p: ptr<i32>;
이 선언은 아직 어떤 메모리도 가리키지 않는 포인터 변수를 생성하며, 이후에 실제 주소로 초기화할 수 있습니다.
포인터 초기화
포인터는 변수의 주소를 참조함으로써 초기화할 수 있습니다.
Wave에서는 주소 연산자 &를 사용하여 변수의 메모리 주소를 얻습니다.
var a: i32 = 10;
var p: ptr<i32> = &a;
위 코드에서 &a는 변수 a가 저장된 메모리 주소를 의미하며,
포인터 p는 해당 주소를 가리키게 됩니다.
이 시점부터 p를 통해 a의 값에 직접 접근할 수 있습니다.