We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

An overview of language support in Nix

Formal Metadata

Title
An overview of language support in Nix
Title of Series
Number of Parts
19
Author
License
CC Attribution 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
Abstract
Most mainstream programming languages have several build platforms available. Which one should you use? Which one will your mugle coworker hate you for? Build platforms generally strike a balance between "usability" (will nix-build succeed if npm build succeed?) and "incrementality" (will nix-build finish in the next hour after I tweaked a comment?). In this talk we look at the support for various languages and the nuances in their builds, from "fixed-output" builds (where the developer must update a hash on every code change) to "fully incremental" builds (where Nix rebuilds only as much as the language's own build tools). We will compare the different approaches used in the Nix community today, point out the general features of mainstream languages' build tools, and briefly talk about how "recursive Nix" can solve some of today's problems. In particular we will look at the some approaches in the Nix community today: Fixed-output derivation: any language Fixed-output derivation for dependencies: rustPlatform, python Code generation: carnix, yarn2nix, stack2nix, bundix, pypi2nix Package-set (snapshots) with upstream checksum database: haskellPackages Pure, lockfile-based: napalm, naersk File-level incremental: snack For each we'll look at the following metrics: * Is the platform consistent with the developer's workflow (and does it Just Work) * What level of incrementality does the platform provide * Does the platform work within the Nix sandbox * Does the platform use "Import From Derivation" * How much does the platform stress the Nix evaluator