Nix
#パッケージマネージャ
純粋関数型DSL Nix Expression で宣言的にパッケージが書けるパッケージマネージャ
開発環境を構築することもできる
direnvと組み合わせればディレクトリに入って最初の1回 direnv allow を叩くだけで完璧な開発環境がセットアップされ、後はディレクトリを行き来するだけで自動的にPATHなどが切り替えられてしまう
依存関係はバージョン違い等別々に保存しパッケージごとに逐一使い分ける (ストレージで殴る) ことで互換性が崩壊することを防ぐ
「AとBがCに依存しててAをアップグレードしたらCに破壊的変更が入ってBが死ぬ」ということは起きない。AとBの依存するCは全く同じでない限り別々に管理される
パッケージはNix Storeに一意なディレクトリ名で保存される
Nix Storeはふつう /nix
依存関係をハッシュ関数にぶち込んだやつがディレクトリになる (したがって一意)
Dockerに押され気味かもしれないがNixでDockerコンテナも書けるらしい
Nixをデフォルトパッケージマネージャに使うNixOSというLinuxディストリビューションがある
言語既存のパッケージマネージャとどう共存していくのかが気になる
C言語 みたいにすべてをシステムに任せるみたいな言語はそうない
Node.jsではnode2nixみたいなツールを使って通常の依存関係からNixファイルを生成する
コードが謎の呪文になりがち
動的型付けなのが最悪
どんな引数を取ってどんな型の値を返す関数なのかがわからない
ヒアドキュメントもない
開発者が全体的に腕力ありすぎてドキュメントをちゃんと書いてくれない