Valen의 메모리 안전성: 새로운 종류의 빌림 검사

2 hours ago 2

Valen은 같은 객체를 가리키는 여러 참조로 읽기와 쓰기를 허용하면서, 해제된 데이터에 대한 참조 사용을 컴파일 시점에 차단하는 그룹 빌림(group borrowing) 기반 검사기를 구현함 컴파일러는 각 참조가 가리키는 소유권 경로를 추적함. 객체를 변경하면 그 객체 자체가 아니라 내부 데이터를 가리키는 참조를 무효화하고, 이후 사용을 오류로 처리함 함수 시그니처에 변경 가능한 경로를 명시해, 전체 객체를 읽으면서 특정 내부 객체만 수정할 수 있음. 가변성은 참조 타입이 아니라 함수의 속성이며, 빌림 참조는 한 종류만 존재함 Rust 상호운용을 위해 호출 중 데이터 접근의 유일성을 확인하는 일시적 유일성과, 반환 참조의 대략적인 위치를 나타내는 와일드카드 하위 경로를 도입함 참조 카운팅과 세대별 참조를 결합하는 설계도 추진 중임. 더 정밀한 변경 정보에 따른 최적화 가능성은 아직 전망이며, 타입이 안정적인 내부 데이터의 참조를 유지하는 예외 규칙은 미구현 상태임 목표와 현재 구현 범위 Valen의 목표는 Rust 빌림 검사 수준의 강력함과 참조 카운팅이나 가비지 컬렉션의 단순함과 유연성을 함께 확보하는 것임 이를 위해 세 가지 과제를 풀어야 함 동일 객체에 여러 읽기/쓰기 참조를 허용하는 더 느슨한 빌림 검사가 가능한가 객체끼리 자유롭게 참조하는 임의의 데이터 그래프에도 불변 빌림 참조를 만들 수 있는가 두 체계를 동시에 작동시킬 수 있는가 현재 설명의 중심은 첫 번째 과제임. 나머지는 Vale의 세대별 참조와 영역 빌림, 그룹 빌림, 2023년의 사고실험을 결합하는 방식으로 접근함 Vale의 불변 영역 빌림은 기존 데이터를 일시적으로 동결된 영역으로 추적해 그 안을 빌릴 수 있게 함 예제의 빌림 검사 동작은 구현되어 있지만, 일부 문법 편의 기능은 11월 도입 예정임 현재는 수동 역참조, my_vec[0] 대신 my_vec.data[0], entity &Entity in world.entities[]처럼 명시적인 매개변수 타입이 필요함 자동 역참조, 구조체 직접 인덱싱, 그룹에서 타입을 추론하는 문법은 예제의 가독성을 위해 미리 사용함 그룹 빌림의 출발과 다른 언어로의 확산 그룹 빌림은 Nick Smith가 설계했으며, 핵심은 컴파일러가 참조의 목적지를 기억하고 그 정보로 메모리 안전성을 검사하는 것임 처음에는 Mojo를 염두에 둔 설계였지만 채택되지 않았음. 이후 설명과 이점을 다듬어 공개한 이전...

Read Entire Article