를 확인해 보세요. 에서 제공하는 Nix 플레이크를 발견하고 게시할 수 있는 최고의 장소입니다.

We use a single, first-party analytics cookie to focus our limited time and energy on the most important documentation. Check out our privacy policy .

Nix 언어

Nix 패키지 빌드, 개발 환경, NixOS 구성 등을 정의하는 데 사용하는 언어입니다.

Concepts / Nix 언어

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이라는 함수를 매개변수 23으로 호출하고 해당 출력을 my_value 필드에 할당합니다.

할당
{
my_value = my_function 2 3;
}

함수는 다음 구문을 사용하여 정의되며, 여기서 xy는 함수에 전달되는 속성입니다.

함수
{
my_function = x: y: x + y;
}

함수의 본문은 자동으로 함수의 결과를 반환합니다. 위 예에서 볼 수 있듯이 함수는 함수와 매개변수 사이의 공백으로 호출됩니다. 매개변수를 구분하는 데 쉼표가 필요하지 않습니다.

가장 일반적인 두 가지 데이터 구조는 _속성 집합_과 _목록_입니다. 속성 집합은 키-값 저장소입니다. 목록에는 다양한 유형의 값이 포함될 수 있으며 쉼표로 구분할 필요가 없습니다.

재귀 속성
rec {
number_key = 5;
list_key = [ number_key true "Hello" ];
}

rec 키워드를 사용하면 속성 집합이 자신을 참조할 수 있습니다.

구문에 대한 자세한 내용은 Nix 언어 매뉴얼 섹션을 확인하십시오.

파생

Nix를 다른 프로그래밍 언어와 구별하고 단순한 구성 언어 이상으로 만드는 한 가지는 derivation 함수입니다. 이는 패키지의 빌드 프로세스를 정의하는 데 사용하는 기본 제공 함수입니다. 자세한 내용은 파생 개념 문서를 참조하십시오.


Was this page helpful?