각각 Dynamic Sized Types와 Zero Sized Types의 약자며


다른 타입들이랑은 다르게 작동한다



먼저 DSTs는 trait object(dyn Trait)나 slice([T]) 그리고 DST를 하나라도 포함하는 struct들이 DSTs가 되겠다


이 DSTs를 구분하는 trait가 바로 Sized trait며 DSTs는 !Sized가 된다 즉 컴파일 시점에 크기를 알수없는 타입들이다


얘네는 직접 사용할수는 없고 참조의 형태로 사용한다 그래서 참조로만 다루는 Box AsRef등의 인자는 될수있다




ZSTs는 크기가 0인 타입들이다


빈 구조체, 빈 열거형, 빈 튜플, 빈 유니온 등등 그리고 ZST로만 이루어진 구조체, 튜플, 유니온이 ZSTs가 된다

(열거형은 케이스가 2개이상이면 태그가 붙어서 ZST 케이스 딱 하나만 있을때만 ZST다)


safe에선 따로 신경써줄 필요는 없지만 unsafe에선 항상 ZSTs를 생각해줘야한다


얘를들어 ZSTs에선 pointer의 offset이 no-op고 allocator가 null을 반환할수 있는등이 있다