GNU bug report logs - #10327
Please document include and include-from-path

Previous Next

Package: guile;

Reported by: Ian Hulin <ian <at> hulin.org.uk>

Date: Mon, 19 Dec 2011 15:16:01 UTC

Severity: normal

Done: Andy Wingo <wingo <at> pobox.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Ian Hulin <ian <at> hulin.org.uk>
Subject: bug#10327: closed (Re: bug#10327: Please document include and
 include-from-path)
Date: Fri, 27 Jan 2012 15:33:03 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#10327: Please document include and include-from-path

which was filed against the guile package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 10327 <at> debbugs.gnu.org.

-- 
10327: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=10327
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Andy Wingo <wingo <at> pobox.com>
To: Ian Price <ianprice90 <at> googlemail.com>
Cc: Ian Hulin <ian <at> hulin.org.uk>, 10327-done <at> debbugs.gnu.org
Subject: Re: bug#10327: Please document include and include-from-path
Date: Fri, 27 Jan 2012 16:31:31 +0100
Hello Ian & Ian :)

Thanks for the report.  I added some extensive docs.

    6.17.11 Local Inclusion
    -----------------------

    This section has discussed various means of linking Scheme code
    together: fundamentally, loading up files at run-time using `load' and
    `load-compiled'.  Guile provides another option to compose parts of
    programs together at expansion-time instead of at run-time.

     -- Scheme Syntax: include file-name
         Open FILE-NAME, at expansion-time, and read the Scheme forms that
         it contains, splicing them into the location of the `include',
         within a `begin'.

       If you are a C programmer, if `load' in Scheme is like `dlopen' in
    C, consider `include' to be like the C preprocessor's `#include'.  When
    you use `include', it is as if the contents of the included file were
    typed in instead of the `include' form.

       Because the code is included at compile-time, it is available to the
    macroexpander.  Syntax definitions in the included file are available to
    later code in the form in which the `include' appears, without the need
    for `eval-when'.  (*Note Eval When::.)

       For the same reason, compiling a form that uses `include' results in
    one compilation unit, composed of multiple files.  Loading the compiled
    file is one `stat' operation for the compilation unit, instead of `2*N'
    in the case of `load' (once for each loaded source file, and once each
    corresponding compiled file, in the best case).

       Unlike `load', `include' also works within nested lexical contexts.
    It so happens that the optimizer works best within a lexical context,
    because all of the uses of bindings in a lexical context are visible,
    so composing files by including them within a `(let () ...)' can
    sometimes lead to important speed improvements.

       On the other hand, `include' does have all the disadvantages of
    early binding: once the code with the `include' is compiled, no change
    to the included file is reflected in the future behavior of the
    including form.

       Also, the particular form of `include', which requires an absolute
    path, or a path relative to the current directory at compile-time, is
    not very amenable to compiling the source in one place, but then
    installing the source to another place.  For this reason, Guile provides
    another form, `include-from-path', which looks for the source file to
    include within a load path.

     -- Scheme Syntax: include-from-path file-name
         Like `include', but instead of expecting `file-name' to be an
         absolute file name, it is expected to be a relative path to search
         in the `%load-path'.

       `include-from-path' is more useful when you want to install all of
    the source files for a package (as you should!).  It makes it possible
    to evaluate an installed file from source, instead of relying on the
    `.go' file being up to date.


On Sat 24 Dec 2011 00:53, Ian Price <ianprice90 <at> googlemail.com> writes:

> Or am I being ever so slightly patronising?

"Recursion and condescension"? :-)

  http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html

Cheers,

Andy
-- 
http://wingolog.org/

[Message part 3 (message/rfc822, inline)]
From: Ian Hulin <ian <at> hulin.org.uk>
To: bug-guile <at> gnu.org
Subject: Please document include and include-from-path
Date: Mon, 19 Dec 2011 15:12:22 +0000
I think I know what these do, but could you include them in the docs,
and point out how differ from load and load-from-path.

Documentation something like this?

— Scheme Procedure: include filename

    Load filename and add its contents to a file currently being
compiled. Unlike /load/ its contents are not evaluated immediately.
The load paths are not searched.

— Scheme Procedure: include-from-path filename

    Locate /filename/ in the load paths, load /filename/ and add its
contents to a file currently being compiled. Unlike
/load-from-path/ its contents are not evaluated immediately.




This bug report was last modified 13 years and 117 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.