在 Nix 中,Nix 表达式只是您可以用 Nix 语言编写的任何类型值的通用术语。Nix 表达式可以是集合、列表、数字、字符串、函数、名称、算术运算、函数调用等等。
Nix 表达式可以包含其他 Nix 表达式:例如,表达式1 + 2内部包含两个表达式:1和2。
人们通常喜欢编写复杂的 Nix 表达式来表示如何构建一个软件。这些表达式实际上只是具有一些特殊属性的集合。Nix 软件可以计算这样的表达式并将其转换为文件.drv(一种描述如何构建某些软件的非常简单、紧凑的方式),然后可以构建该文件。
您可以使用 Nix 语言和 Nix 表达式做很多不涉及派生或构建软件的事情。该nix eval命令允许您计算 Nix 表达式。运行nix eval --help以查看其帮助屏幕,或运行以下命令来计算一些简单的表达式:
nix eval '(1 + 2)' # gives 3
nix eval '({ a = 1; b = 2; }.a)' # gives 1
Run Code Online (Sandbox Code Playgroud)
(出于某种原因,此命令似乎要求在其计算的大多数 Nix 表达式周围添加括号,但这似乎是一个错误或奇怪的设计选择,并且括号并不是每个 Nix 表达式的重要组成部分。)
Nix 表达式 是一组指令,描述如何使用 Nix 纯函数式语言构建软件组件(包、项目、应用程序等)。
引用 Gabriel Gonzalez 的话:“你可以将派生视为与语言无关的如何构建某些东西(例如 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. ) |
| |
*------------------------------------------------------*
Run Code Online (Sandbox Code Playgroud)
Nix 表达式的目的是生成 可以构建到组件(可执行文件、库等)中的存储派生。
对于上下文:
图片取自Eelco Dolstra 的博士论文,“2.4 Store derivations”部分。
根据Eelco Dolstra 博士论文中的“5.4 Translated Nix statements to store derivations”一节:
[Nix 表达式] 的正常形式应该是
致电
derivation, 或包含对 的调用的列表和属性集的嵌套结构
derivation。无论如何,这些派生 Nix 表达式随后会被翻译为存储派生。
软件包、应用程序、开发环境、软件库等。
更正式地来自“3.1 什么是组件?” 在Eelco Dolstra 的博士论文中:
Run Code Online (Sandbox Code Playgroud)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 | *----------------------*
(整个部分都值得阅读。)
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |