함수형 프로그래머한테 닉스 패키지 매니저의 derivation 소개하는 글

lionhairdino @lionhairdino@hackers.pub

닉스의 derivation은 코드 모양으로만 보면, 단순히 빌드에 필요한 속성의 집합이다. 별 거 아닌 것 같지만, 이 개념이 닉스의 핵심 아이디어다. 패키지를 빌드할 때 개입하는 널리고 널린 이펙트들을 깡그리 무시하고, 순수한 척 하는 derivation만으로 의존 관계를 표현한다. 만일, 패키지A가 패키지B에 의존한다면, A의 derivation이 B의 derivation에 의존한다고 표시해 둔다. 이렇게 derivation만 엮어서 패키지 빌드 명세서를 완성해 두고, 진짜 패키지가 필요한 순간이 오면, 그때서야 realize란 동작으로, 미뤄 놨던 이펙트들의 영향을 받게 된다. 모나드들의 runner처럼 말이다.

진짜 귀찮게 굴러야 하는 이펙트들은 나몰라라 하고, 고귀한 척 동작의 선언적인 명세서derivation만 조합해서 최종 결과 패키지를 위한 명세서를 작성하니 선언형 패키지 매니저라 부른다.

어떤 이펙트가 방해할지는 나중 문제고, 최종 패키지 명세서 자체는 순수한 derivation 조합으로만 구성해 놓고, 이들 이름에, 내용을 기반으로 계산한 해시까지 붙여 놓으니 절대 같은 이름, 다른 내용의 derivation이 생기지 않는다. 그래서 이들을 캐싱하기에도 좋고, 재현성도 올라간다고 한다.

다만, derivation이 점하나만 달라져도 해시값이 달라지니 다른 패키지가 되어버려, 디스크 용량이 좀 과하게 필요하고, 빌드 시간이 좀 과하게 걸리는 단점이 있다. 덕분에 쉴 시간이 자주 생긴다!

(닉스 공부한지 몇 달 안된 사람의 노트입니다. 생각이 틀렸다면 알려주세요. 저는 혼자 공부한 내용들을 요약해서 블로그 혹은 닉스 NixOS.kr 디코에 올리고 제대로 길을 가고 있는지 검증 받곤 합니다.)

Read more →

Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub!

Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다.

FedifyHolloBotKit、そしてこのサイト、Hackers' Pubを作っています。

嗨,我是 FedifyHolloBotKit 以及這個網站 Hackers' Pub 的開發者!

λ(☕) → 💻

  • Languages: Korean(개잘함), English(a little bit), Japanese(まま), Esperanto(tre iomete)
  • Interests: server, concurrency, functional programming, keyboard(the input system), guitar

슈티를 함께 만들 팀을 만들고 있습니다. 관심 있으신 분, 또는 잘 모르겠지만 이야기를 나눠보고 싶은 분도 bgl@gwyng.com으로 편하게 연락주세요.