diff options
author | Florian Klink <flokli@flokli.de> | 2024-03-01T08·56+0200 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2024-03-03T16·52+0000 |
commit | 65a810fc0b12e754af47864ab3b9d4b5756cde15 (patch) | |
tree | ec69ccf0de3dcd53dc47748f8f2a6a649a85ad48 /tvix/docs/language-spec.md | |
parent | 6bdaebcb55eef5663f93dbbc8de6a48b459a10c0 (diff) |
feat(tvix/docs): switch to mdbook r/7645
Some of the docs are still outdated (like architecture and drv path inconsistencies). Change-Id: I7a6afceb008ef4cd19a764dd6c637b39fa842a2e Reviewed-on: https://cl.tvl.fyi/c/depot/+/11072 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: edef <edef@edef.eu>
Diffstat (limited to 'tvix/docs/language-spec.md')
-rw-r--r-- | tvix/docs/language-spec.md | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/tvix/docs/language-spec.md b/tvix/docs/language-spec.md deleted file mode 100644 index a71437493307..000000000000 --- a/tvix/docs/language-spec.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: "Specification of the Nix language" -numbersections: true -author: -- tazjin -email: -- tazjin@tvl.su -lang: en-GB ---- - -The Nix Language -================ - -WARNING: This document is a work in progress. Please keep an eye on -[`topic:nix-spec`](https://cl.tvl.fyi/q/topic:nix-spec) for ongoing -CLs. - -Nix is a general-purpose, functional programming language which this -document aims to describe. - -## Background - -Nix was designed and implemented as part of the [Nix package -manager](https://nixos.org/nix). It is primarily used for generating -so-called [*derivations*](#derivations), which are data structures -describing how to build a package. - -The language has been described in the -[thesis](https://edolstra.github.io/pubs/phd-thesis.pdf) introducing -the package manager, but only on a high-level. At the time of writing, -Nix is informally specified (via its only complete implementation in -the package manager) and there is no complete overview over its - -sometimes surprising - semantics. - -The primary project written in Nix is -[nixpkgs](https://github.com/NixOS/nixpkgs/). Uncertainties in the -process of writing this specification are resolved by investigating -patterns in nixpkgs, which we consider canonical. The code in nixpkgs -uses a reasonable subset of the features exposed by the current -implementation, some of which are *accidental*, and is thus more -useful for specifying how the language should work. - -## Introduction to Nix - -Nix is a general-purpose, partially lazy, functional programming -language which provides higher-order functions, type reflection, -primitive data types such as integers, strings and floats, and -compound data structures such as lists and attribute sets. - -Nix has syntactic sugar for common operations, such as those for -attribute sets, and also provides a wide range of built-in functions -which have organically accumulated over time. - -Nix has a variety of legacy features that are not in practical use, -but are documented in sections of this specification for the sake of -completeness. - -This document describes the syntax and abstract semantics of the Nix -language, but leaves out implementation details about how Nix can be -interpreted/compiled/analysed etc. - -### Program structure - -This section describes the semantic structure of Nix, and how it -relates to the rest of the specification. - -Each Nix program is a single [*expression*](#expressions) denoting a -[*value*](#values) (commonly a [*function*](#functions)). Each value -has a [*type*](#types), however this type is not statically known. - -Nix code is modularised through the use of the -[*import*](#builtins-import) built-in function. No separate module -system exists. - -In addition to chapters describing the building blocks mentioned -above, this specificiation also describes the [*syntax*](#syntax), the -available [built-in functions](#builtins), [*error handling*](#errors) -and known [*deficiencies*](#deficiencies) in the language. |