Verified Interpreters for Dynamic Languages with Applications to the Nix Expression Language
This program is tentative and subject to change.
<p>To study the semantics of a programming language, it is useful to consider different specification forms—<em>e.g.</em>, a substitution-based small-step operational semantics and an environment-based interpreter—because they have mutually exclusive benefits. Developing these specifications and proving correspondences is challenging for ‘dynamic’/‘scripting’ languages such as JavaScript, PHP and Bash. We study this challenge in the context of the Nix expression language, a dynamic language used in the eponymous package manager and operating system. Nix is a Turing-complete, untyped functional language designed for the manipulation of JSON-style attribute sets, with tricky features such as overloaded use of variables for lambda bindings and attribute members, subtle shadowing rules, a mixture of evaluation strategies, and tricky mechanisms for recursion.</p>
<p>We show that our techniques are applicable beyond Nix by starting from the call-by-name lambda calculus, which we extend to a core lambda calculus with dynamically computed variable names and dynamic binder names, and finally to Nix. Our key novelty is the use of a form of <em>deferred substitutions</em>, which enables us to give a concise substitution-based semantics for dynamic variable binding. We develop corresponding environment-based interpreters, which we prove to be sound and complete (for terminating, faulty and diverging programs) w.r.t. our operational semantics based on deferred substitutions.</p>
<p>We mechanize all our results in the Rocq prover and showcase a new feature of the Rocq-std++ library for representing syntax with maps in recursive positions. We use Rocq’s extraction mechanism to turn our Nix interpreter into executable OCaml code, which we apply to the official Nix language tests.
Altogether this gives rise to the most comprehensive formal semantics for the Nix expression language to date.</p>
This program is tentative and subject to change.
Wed 15 OctDisplayed time zone: Perth change
13:40 - 15:20 | |||
13:40 25mTalk | Formal Semantics and Program Logics for a Fragment of OCaml ICFP Papers DOI | ||
14:05 25mTalk | Verified Interpreters for Dynamic Languages with Applications to the Nix Expression Language ICFP Papers DOI Pre-print | ||
14:30 25mTalk | Verifying Graph Algorithms in Separation Logic: A Case for an Algebraic Approach ICFP Papers Marcos Grandury IMDEA Software Institute; Universidad Politécnica de Madrid, Aleksandar Nanevski IMDEA Software Institute, Alexander Gryzlov IMDEA Software Institute DOI | ||
14:55 25mTalk | Reasoning about Weak Isolation Levels in Separation Logic ICFP Papers Anders Alnor Mathiasen Aarhus University, Léon Gondelman Aalborg University, Léon Ducruet Aarhus University, Amin Timany Aarhus University, Lars Birkedal Aarhus University DOI |