Goose - 힙 없이 메모리 안전성을 제공하는 시스템 프로그래밍 언어

1 week ago 23

Goose는 동적 값을 컴파일러가 관리하는 데이터 스택에 인라인으로 저장하는 시스템 언어로, 힙 할당기, GC, 참조 카운팅, 수명 표기 없이 메모리 안전성을 제공함 배열이 커져도 기존 참조가 유지되며, 컴파일러가 참조의 소유 변수와 수명을 추론해 소유자보다 오래 살아남는 참조를 거부함 중첩 문자열과 가변 크기 레코드를 연속된 바이트 블록으로 저장하고, 작은 상대 오프셋으로 링크를 표현해 메모리 사용량과 간접 접근을 줄임 저장소의 16개 벤치마크에서 C++ 및 안전한 Rust보다 높은 속도와 적은 메모리 사용량을 기록했으나, 가변 크기 배열의 임의 접근 불가와 전체 프로그램 컴파일 등 제약이 있음 전체 프로그램을 C로 컴파일하며 TinyCC를 통한 프로세스 내 실행도 지원함. 아직 초기 단계인 프로젝트로, 사람이 설계한 언어를 바탕으로 저장소 대부분을 AI로 구현함 데이터 스택으로 관리하는 메모리 힙 없이 네이티브 호출 스택, 정적 데이터, 컴파일러가 개수를 결정하는 N개의 데이터 스택을 사용함 데이터 스택은 큰 주소 공간을 예약하고 범프 포인터로 사용 영역을 늘림 각 스택에서 살아 있는 크기 조절 가능 값은 최대 하나이며 항상 맨 위에 있으므로, 확장 시 데이터를 이동하거나 용량을 검사하지 않음 이 조건은 컴파일 시 증명하며, 런타임은 범프 포인터만 추적함 스코프 종료가 메모리 해제가 되며, 깊게 중첩된 백만 원소 구조도 스택 상단 포인터를 한 번 저장해 해제함 할당기, GC, 참조 카운팅, 소멸자가 없음 push는 새 원소의 참조를 반환하며, 이후 배열에 원소를 추가해도 기존 참조가 유효함 재할당이 가능한 C++ vector<T>나 Rust Vec<T>와 달리, 배열을 구성하면서 원소끼리 직접 연결할 수 있음 대응 벤치마크에서 C++은 reserve, 안전한 Rust는 u32 인덱스를 사용하는 반면, Goose는 타입이 있는 참조를 유지함 수명 표기 없는 안전한 참조 모든 참조와 슬라이스에는 대상의 수명을 제한하는 변수인 정적 루트(root) 가 있음 컴파일러가 루트를 추론하고 이에 맞게 함수를 특수화함 소유 변수보다 오래 살아남거나 호환되지 않는 타입으로 대상에 접근하는 참조를 거부함 수명 검사 오류는 참조의 루트와 저장 목적지를 알려줌 수명 문법, 별칭 제한, 배타성 규칙, unsafe가 없음 T[:] 슬라이스는 어떤 배열 종류에서든 원소 복사 없이 범위를 전달함 split은 입력을...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵