A Выражение Nix - это набор инструкций, описывающих, как создавать программный компонент (пакет, проект, приложение и т. Д.), Используя чисто функциональный язык Nix.
Цитируя Габриэля Гонсалеса : " Вы можете думать о деривации как о не зависящем от языка рецепте того, как создать что-то (например, пакет на Haskell). "
Выражения Nix также обычно называют деривациями (как в Выражениях Nix ), но
*------------------------------------------------------*
| |
| STORE DERIVATION =/= NIX EXPRESSION |
| |
*------------------------------------------------------*
| |
| NIX EXPRESSION == function |
| |
| ( Describes how to build a component. That is, how ) |
| ( to compose its input parameters, which can be ) |
| ( other components as well. ) |
| |
| STORE DERIVATION == function application |
| |
| ( Call a Nix expression with concrete arguments. ) |
| ( Corollary: a single Nix expression can produce ) |
| ( different derivations depending on the inputs. ) |
| |
*------------------------------------------------------*
Цель выражений Nix состоит в том, чтобысоздать хранилище деривации , которое можно встроить в компонент (исполняемый файл, библиотека и т. д.).
Для контекста:
![Two-stage building of Nix expressions. nix-instantiate translates Nix expressions into store derivations, and nix-store --realize builds the derivation into a software component.](https://i.stack.imgur.com/NqxsO.png)
Изображение взято с Докторская диссертация Eelco Dolstra , раздел "2.4 Магазин дериваций".
Extra
Нормальная форма выражения Nix
Согласно разделу «5.4 Перевод выражений Nix для сохранения производныхtions "в Докторская диссертация Eelco Dolstra :
Нормальная форма [выражения Nix] должна быть
В любом случае эти деривацииВпоследствии выражения Nix переводятся в производные хранилища.
Что такое программный компонент?
Пакет, приложение, среда разработки, библиотека программного обеспечения и т. Д.
Подробнееформально из "3.1 Что такое компонент?"в Докторская диссертация Eelco Dolstra :
A software component is
*-------------------------------------*
1. | a software artifact that is subject |
| to automatic composition |
*-------------------------------------*
It can require, and be required by,
other components.
*----------------------*
2. | a unit of deployment |
*----------------------*
(Весь этот раздел стоит прочитать.)