Nix 언어
Nix 패키지 빌드, 개발 환경, NixOS 구성 등을 정의하는 데 사용하는 언어입니다.
We recommend starting with the Nix quick start and consulting concept docs primarily for clarification. Feel free to click x to the right to disable this notification on all concept docs.
Nix는 Nix _패키징 시스템_을 구동하는 _프로그래밍 언어_입니다.
왜 프로그래밍 언어인가?
Nix에 프로그래밍 언어가 왜 필요한지 궁금할 수 있습니다. JSON, YAML 또는 TOML 스키마를 통해 패키지를 선언할 수 없는 이유는 무엇일까요? 문제는 Nix가 패키지를 구성하고 결합하는 방식의 동적 특성에 있습니다. _프로그래밍 언어_로서의 Nix는 일종의 “함수가 있는 JSON”으로 생각할 수 있습니다. 모든 문은 선언적이므로 Nix 패키지를 구성하는 순차적인 명령 흐름이 없습니다. 대신 함수가 호출되어 _속성 집합_의 필드에 값을 할당하고, 이는 다시 다른 값에 할당될 수 있습니다.
Nix는 어떻게 작동하는가?
Nix는 프로그래밍 언어 설계에서 몇 가지 중요한 특성을 사용하여 작동합니다. 이러한 용어 중 일부는 이미 의미와 서로 작동하는 방식을 잘 모르는 경우 어렵게 느껴질 수 있습니다. 따라서 먼저 이러한 원칙을 다루겠습니다.
_Nix_는 순수하고, 함수형이며, 지연 평가되고, 선언적이며, 재현 가능한 프로그래밍 언어입니다.
| 개념 | 설명 |
|---|---|
| 순수 | 함수가 _부작용_을 일으킬 수 없는 프로그래밍 언어 설계 개념입니다. 유일한 결과는 함수가 반환하는 것입니다. |
| 함수형 | _함수_를 함수 인수로 전달하고 결과로 반환할 수 있는 프로그래밍 언어 설계 개념입니다. |
| 지연 평가 | 함수와 데이터 컬렉션이 계산을 완료하는 데 필요할 때까지 평가되지 않는 프로그래밍 언어 설계 개념입니다. |
| 선언적 | 컴퓨터에 결과를 달성하는 _방법_을 지시하는 대신 시스템 결과를 설명합니다. |
| 재현 가능 | 두 번 수행된 작업은 동일한 결과를 산출합니다. 동일한 입력이 동일한 출력에 매핑됩니다. |
구문 기초
앞서 언급했듯이 Nix는 패키지, 모듈 및 기타 유틸리티에 대한 데이터를 계산하고 처리하기 위해 _할당_을 사용합니다.
예를 들어 아래 코드는 my_function이라는 함수를 매개변수 2와 3으로 호출하고 해당 출력을 my_value 필드에 할당합니다.
{ my_value = my_function 2 3;}함수는 다음 구문을 사용하여 정의되며, 여기서 x와 y는 함수에 전달되는 속성입니다.
{ my_function = x: y: x + y;}함수의 본문은 자동으로 함수의 결과를 반환합니다. 위 예에서 볼 수 있듯이 함수는 함수와 매개변수 사이의 공백으로 호출됩니다. 매개변수를 구분하는 데 쉼표가 필요하지 않습니다.
가장 일반적인 두 가지 데이터 구조는 _속성 집합_과 _목록_입니다. 속성 집합은 키-값 저장소입니다. 목록에는 다양한 유형의 값이 포함될 수 있으며 쉼표로 구분할 필요가 없습니다.
rec { number_key = 5; list_key = [ number_key true "Hello" ];}rec 키워드를 사용하면 속성 집합이 자신을 참조할 수 있습니다.
구문에 대한 자세한 내용은 Nix 언어 매뉴얼 섹션을 확인하십시오.
파생
Nix를 다른 프로그래밍 언어와 구별하고 단순한 구성 언어 이상으로 만드는 한 가지는 derivation 함수입니다.
이는 패키지의 빌드 프로세스를 정의하는 데 사용하는 기본 제공 함수입니다.
자세한 내용은 파생 개념 문서를 참조하십시오.