Re: Distributed verification of release tarballs using Guix? (was Re: Releasing 2.2.5?)

2019-06-20 Thread Mark H Weaver
Hi Ludovic,

Ludovic Courtès  writes:

> Mark H Weaver  skribis:
>
>> I've finished my updates to the NEWS file in preparation for the 2.2.5
>> release.  Feel free to reorganize, edit, or expand on the NEWS entries
>> as you think best.  I believe that all of the relevant changes are
>> listed, anyway.
>
> Thanks a *lot* for all the preparation work, that made things really
> easy for me.

Given the enormous amount of important work you've been doing on Guix,
and Andy's exciting work on the JIT compiler, it's entirely appropriate
for me to take care of most of the Guile stable release work.

>> If it all looks okay to you, feel free to run distcheck and upload the
>> release.
>
> Done!  :-)

Thanks very much for taking care of the part that I find uncomfortable.

> PS: This is the first release that I build and upload while on the
> train, crazy stuff.  ;-)

Heh, nice! :)

  Mark



Re: Distributed verification of release tarballs using Guix? (was Re: Releasing 2.2.5?)

2019-06-20 Thread Ludovic Courtès
Hi Mark,

Mark H Weaver  skribis:

> I've finished my updates to the NEWS file in preparation for the 2.2.5
> release.  Feel free to reorganize, edit, or expand on the NEWS entries
> as you think best.  I believe that all of the relevant changes are
> listed, anyway.

Thanks a *lot* for all the preparation work, that made things really
easy for me.

> Note that GUILE-VERSION still needs to be updated.  See below for the
> changes that I believe should be made to it.
>
> If it all looks okay to you, feel free to run distcheck and upload the
> release.

Done!  :-)

Thanks,
Ludo’.

PS: This is the first release that I build and upload while on the
train, crazy stuff.  ;-)



GNU Guile 2.2.5 released

2019-06-20 Thread Ludovic Courtès
We are delighted to announce GNU Guile release 2.2.5, the fifth bug-fix
release in the 2.2 stable release series.  See the NEWS excerpt that
follows for full details.

 *  *  *

Guile is an implementation of the Scheme programming language.

The Guile web page is located at https://gnu.org/software/guile/, and
among other things, it contains a copy of the Guile manual and pointers
to more resources.

Guile can run interactively, as a script interpreter, and as a Scheme
compiler to VM bytecode.  It is also packaged as a library so that
applications can easily incorporate a complete Scheme interpreter/VM.
An application can use Guile as an extension language, a clean and
powerful configuration language, or as multi-purpose "glue" to connect
primitives provided by the application.  It is easy to call Scheme code
from C code and vice versa.  Applications can add new functions, data
types, control structures, and even syntax to Guile, to create a
domain-specific language tailored to the task at hand.

Guile implements many common Scheme standards, including R5RS, R6RS, and
a number of SRFIs.  In addition, Guile includes its own module system,
full access to POSIX system calls, networking support, multiple threads,
dynamic linking, a foreign function call interface, and powerful string
processing.

Guile 2.2.5 can be installed in parallel with Guile 2.0.x; see
https://www.gnu.org/software/guile/manual/html_node/Parallel-Installations.html.

 *  *  *

Changes in 2.2.5 (since 2.2.4):

* Notable improvements

** Greatly improved performance of bidirectional pipes.

The performance of bidirectional pipes, as created using 'open-pipe' or
'open-pipe*' in OPEN_BOTH mode, has been greatly improved.  When reading
large blocks of binary data from a bidirectional pipe, the maximum
bandwidth has been increased by a factor of ~10^3 in some cases.

** New 'get-bytevector-some!' I/O primitive.

This new I/O primitive is similar to 'get-bytevector-some' from the
R6RS, except that it writes its data to a user-specified range of
indices in an existing bytevector.  As a corollary, it is also now
possible to specify a maximum number of bytes to read.  Note that
'get-bytevector-some', and now 'get-bytevector-some!', are unique among
Guile's I/O primitives in their support of efficient binary reads of
potentially large blocks while also allowing for short reads, to avoid
undesired blocking.  Now these operations can be performed while also
avoiding heap-allocation.

'get-bytevector-some!' is needed to efficiently implement the new
bidirectional pipes, which are built upon R6RS custom binary
input/output ports.

** get-bytevector-{n!,some,some!} now support suspendable I/O.

Scheme implementations of 'get-bytevector-n!', 'get-bytevector-some',
and 'get-bytevector-some!' have been added to (ice-9 suspendable-ports).
As a result, these I/O operations now support suspendable I/O.

* Compiler improvements

** guild compile: Add -Wshadowed-toplevel.

Top-level definitions that shadow previous top-level definitions from
the same compilation unit will now trigger a compile-time warning, if
-Wshadowed-toplevel is enabled.  It is enabled by default.

** guild compile: Add '-x' flag.

Passing "-x EXT" to 'guild compile' will now cause EXT to be recognized
as a valid source file name extension.  For example, to compile R6RS
code, you might want to pass "-x .sls" so that files ending in ".sls"
can be found.

* Miscellaneous improvements

** Bootstrap optimization
  
eval.go and psyntax-pp.go are now built before the rest of the .go files
so that they are processed by a fast macro expander.  This saves time
when using parallel builds.

** put-u8 now always writes a single byte, regardless of the port encoding.

Previously, (put-u8 PORT OCTET) worked as expected only when writing to
binary ports, i.e. those with port encoding "ISO-8859-1" a.k.a. Latin-1.
Strictly speaking, this meets the requirements of the R6RS 'put-u8',
which need only support binary ports.  However, Guile in fact allows
binary I/O to be performed on any port, and yet 'put-u8' behaved in a
surprising way with other port encodings: it would perform a _textual_
I/O operation, writing the character with Unicode scalar value OCTET.
Now, 'put-u8' always writes a single byte with value OCTET, regardless
of the port encoding.

** Optimize fixnum exact integer square roots.

'exact-integer-sqrt' now avoids heap allocation when applied to a
fixnum.  'sqrt' now avoids heap allocation when applied to a fixnum
that's a perfect square.  Fewer heap allocations are now required when
applying 'sqrt' to a square of an exact rational whose numerator or
denominator are fixnums.

** scm_mkstrport: Optimize the POS -> BYTE_POS conversion.

scm_mkstrport now avoids an unnecessary heap allocation and conversion
to UTF-8, when STR is provided and POS is non-zero.

** SRFI-19: Support ~N in string->date.

Support for the ~N escape, which allows frac