머리말 : 녹이 아직 개발 중이며이 질문에 답한 이후 언어가 많이 바뀌 었습니다.
@ 포인터는 표준 라이브러리에서 제공하는 Gc 및 Rc 스마트 포인터로 대체되어 언어에서 제거되기 직전입니다.
두 번째로, 수명에 대한 구문은 이제 &'a pointer
입니다. References and Lifetimes Guide은 주제에 대한 포괄적이고 잘 쓰여진 자료입니다.
내 대답의 내용은이 두 가지 사항을 고려하면 여전히 적절합니다. 스택 (T
)에서
- : 녹
는 메모리 할당 3 방법이있다. 이는 C에서와 동일합니다.
- 작업의 힙 (
@T
)에서. 이 메모리는 GC로 처리 된 언어 에서처럼 가비지 수집됩니다.
- 교환 힙에 (
~T
). 이 메모리의 수명은 누가 그것을 소유하고 있는지에 달려 있습니다.
그리고, 할당의 종류에 따라서는 @
포인터 (대해서만 @
-allocated 값) (단 ~
-allocated 값)을 ~
포인터를 사용하여 값에 대한 참조를 저장할 수하는 &
포인터 (빌린 포인터) 또는 *
포인터 (안전하지 않은 포인터).두번째는 할당 유형을 나타내는 반면, 본 실시 예에서는
let x: @int = @2;
는 제
@
는 포인터 타입을 나타낸다. 이 값은
@
입니다. GC 값에 대한 포인터입니다.
let y: &int = @2;
이것은 GC 값에 대한 것입니다.
&
-pointers는 모든 유형의 메모리를 참조 할 수 있기 때문에 유용합니다. 함수를 작성할 때 호출자는 원하는 방식으로 값을 할당하여 함수를 호출 할 수 있으므로 매개 변수를 &
-pointer로 선언해야합니다. 함수가 매개 변수를 @
-pointer로 선언하면 호출자는 힙 할당 값을 전달할 수 밖에 없습니다.
&
- 포인터는 수명 개념을 도입합니다. 이것은 컴파일러가이 포인터가 할당 된 메모리보다 오래 지속되지 않도록 보장하기 위해 사용되는 개념입니다 (따라서 "안전한"포인터가됩니다).
@
할당 된 값의 "수명"은 컴파일러에서 알 수 없으므로 컴파일러에 의해 정적으로 결정되지 않고 런타임에 의해 동적으로 결정됩니다.
@pointer를 사용할 때마다 항상 유효하고 살아 있기 때문에 managed @ pointer의 수명은 무한대로 계산됩니다. –
@DmitryBelyaev 주제에 대한 답변을 게시 하시겠습니까? 그것은 받아 들여질 것 같다;) – deadalnix
나는 벌써 그것을했다 =) –