[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
- branch master updated (036cd84 -> fb91f64), Ludovic Courtès, 2017/09/01
- 11/14: gpce-2017: Enable hyphenation at hyphens., Ludovic Courtès, 2017/09/01
- 10/14: gpce-2017: Adjust as suggested by the reviewers., Ludovic Courtès, 2017/09/01
- 14/14: gpce-2017: Adjust ACM boilerplate., Ludovic Courtès, 2017/09/01
- 05/14: gpce-2017: Shrink.,
Ludovic Courtès <=
- 01/14: doc: Add GPCE paper., Ludovic Courtès, 2017/09/01
- 08/14: gpce-2017: Add an explicit license., Ludovic Courtès, 2017/09/01
- 09/14: gpce-2017: Fix typo., Ludovic Courtès, 2017/09/01
- 03/14: gpce-2017: Write some more., Ludovic Courtès, 2017/09/01
- 04/14: gpce-2017: Fixlets., Ludovic Courtès, 2017/09/01
- 07/14: gpce-2017: Deanonymize., Ludovic Courtès, 2017/09/01
- 13/14: gpce-2017: Shrink to 7 pages (10pt font)., Ludovic Courtès, 2017/09/01
- 06/14: gpce-2017: Tweak some more., Ludovic Courtès, 2017/09/01
- 02/14: gpce-2017: Write, write, write., Ludovic Courtès, 2017/09/01
- 12/14: gpce-2017: Use acmart v1.47., Ludovic Courtès, 2017/09/01