guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

05/14: gpce-2017: Shrink.


From: Ludovic Courtès
Subject: 05/14: gpce-2017: Shrink.
Date: Fri, 1 Sep 2017 11:57:54 -0400 (EDT)

civodul pushed a commit to branch master
in repository maintenance.

commit 995bb0914536322e9802babbcc8cca3015d96d2d
Author: Ludovic Courtès <address@hidden>
Date:   Fri Jul 7 00:35:54 2017 +0200

    gpce-2017: Shrink.
---
 doc/gpce-2017/gpce.skb | 28 ++++++----------------------
 1 file changed, 6 insertions(+), 22 deletions(-)

diff --git a/doc/gpce-2017/gpce.skb b/doc/gpce-2017/gpce.skb
index 29afd69..bbbbb14 100644
--- a/doc/gpce-2017/gpce.skb
+++ b/doc/gpce-2017/gpce.skb
@@ -218,14 +218,7 @@ general-purpose language Scheme.  This simplifies
 the development of user interfaces and tools dealing with
 packages, and allows users to benefit from everything a
 general-purpose language brings: compiler, debugger, REPL, editor
-support, libraries, and so on.  Four years later, Guix has indeed
-gained rich tooling that would have been harder to develop for an
-external DSL like Nix: ,(tt [guix lint]) checks style conformance and
-mistakes in package definition, ,(tt [guix refresh]) updates package
-definitions to the latest version of a package, user interfaces in
-Emacs and in Web browsers have been developed, tools to rewrite a
-package’s dependency graph are available from the command line and
-through the API, and so on.])
+support, libraries, and so on.])
 
      (figure :legend [A package definition using the high-level
 interface.]
@@ -273,12 +266,7 @@ definitions in Nix can embed Bash or Perl snippets to 
refine build
 steps, Guix package definitions instead embed Scheme code.
 Consequently, we have two strata of Scheme code: the ,(emph [host code]),
 which provides the package definition, and the ,(emph [build code]), which is
-staged for later execution by the build daemon.  Our thesis is that
-this single-language, “multi-tier†approach facilitates code reuse and
-code sharing among the several tiers, and that it can avoid a whole
-class of errors in the staged code—as opposed to generation of code in
-a “foreign†language, which is treated a mere strings where syntactic
-and semantic errors cannot be detected by the host code.])
+staged for later execution by the build daemon.)
       (p [This paper focuses on code staging in Guix.  Our contribution
 is twofold: we present G-expressions (or “gexpsâ€), a new code staging
 mechanism implemented through mere syntactic extensions of the Scheme
@@ -334,7 +322,7 @@ add the file ,(tt [GuixSD.png]) to ,(tt [/gnu/store]).  The 
variable
 ,(tt [build]) contains our build program as an sexp (the
 apostrophe is equivalent to ,(tt [quote]); it introduces unevaluated
 code).  Finally, ,(tt
-[build-expression->derivation]) takes the build program and computes
+[build,(!latex "\\")-expression->derivation]) takes the build program and 
computes
 the corresponding derivation without building it.  The user can then
 make an RPC to the build daemon asking it to build this derivation;
 only then will the daemon create an isolated environment and run our
@@ -881,9 +869,7 @@ of user-defined binding constructs (macros).  This strategy 
is
 appropriate in a macro-less language with a fixed set of binding
 constructs like OCaml, but we have seen that languages such as Scheme
 that support user-defined binding constructs create additional
-challenges.  MetaScheme supports cross-stage persistence (CSP) but the
-implementation provided assumes that an array of cross-stage values is
-shared among stages, which is hard to transpose to concrete settings.
+challenges.
 Rhiger’s work ,(ref :bib 'rhiger2012:hygienic) follows a similar
 approach but chooses to redefine Scheme’s quasiquotation rather than
 introduce new constructs.])
@@ -891,10 +877,8 @@ introduce new constructs.])
 quasiquotations by providing bracket, escape, and lift forms separate
 from ,(tt [quasiquote]) and ,(tt [unquote]) ,(ref :bib 'wang2002:s2).
 Therefore, as with ,(tt [syntax-case]) and gexps, quoted code has a
-disjoint type as opposed to being a list.  S,(sup [2]) supports CSP,
-whereby staged code can seemlessly refer to variables of the previous
-stage that are in scope; the article does not explain the
-implementation strategy.  S,(sup [2])’s focus is on programs with
+disjoint type as opposed to being a list.
+S,(sup [2])’s focus is on programs with
 possibly more than two stages, whereas gexp are, in practice, used for
 two-stage programs.  The article discusses ,(emph [code regeneration])
 at run time; gexps have a similar requirement here: at run time a



reply via email to

[Prev in Thread] Current Thread [Next in Thread]