포인터 흑마법

1 min read

SWC 관련해서 최적화 목적으로 포인터 흑마법을 쓸 일이 생겼다. 근데 난 흑마법은 개뿔이고 포인터도 모른다. 포인터도 모르면서 컴파일러를 만들었다고하면 좀 이상하겠지만... 진짜 모른다.

그래서 (필요한만큼만) 공부하기로 했다. 일단 내가 하고 싶은 건

enum Atom {
  Inlined([u8; 7])
  Static(&'static str),
  Arc(Arc<str>),
}

이다. 그리고 Arc의 경우 인터닝이 가능해야한다. 여기까진 쉬운데... 사이즈가 8바이트면 좋겠어서 방법을 찾아봤다. 포인터의 64비트를 다 쓰는 게 아니니까 남는 비트로 어떻게 할 수 있지 않을까 싶었다. 근데 러스트 디스코드에서 질문하고 답변받은 게 &'static str이 16바이트라는 것이다.

아...

결론은 저런 API는 불가능하다는 것... 그리고 찾아보니까 48비트만 쓰는 것도 현재 구현 디테일이고 64비트까지 확장할 수 있다고 하더라.

이 문제는 좀 고민을 해봐야 할 것 같다