unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
* GNU Guile 3.0.8 released
@ 2022-02-11  7:47 Andy Wingo
  2022-02-11 11:05 ` Maxime Devos
  2022-02-11 14:34 ` [PP?] " Olivier Dion via Developers list for Guile, the GNU extensibility library
  0 siblings, 2 replies; 11+ messages in thread
From: Andy Wingo @ 2022-02-11  7:47 UTC (permalink / raw)
  To: guile-user, guile-sources, guile-devel, info-gnu

We are delighted to announce GNU Guile release 3.0.8, the latest in the
3.0 stable release series.

The Guile 3.0.8 release mixes maintenance and optimizations that were
landed since the previous 3.0.7 stable release in May 2021.  See the
NEWS extract at the end of the mail for full details.

Compared to the previous stable series (2.2.x), Guile 3.0 adds support
for just-in-time native code generation, speeding up all Guile programs.


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

Guile is an implementation of the Scheme programming language, packaged
for use in a wide variety of environments.  In addition to implementing
the R5RS, R6RS, and R7RS Scheme standards, Guile includes full access to
POSIX system calls, networking support, multiple threads, dynamic
linking, a foreign function call interface, powerful string processing,
and HTTP client and server implementations.

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 3.0.8 can be installed in parallel with Guile 2.2.x; see
http://www.gnu.org/software/guile/manual/html_node/Parallel-Installations.html.

A more detailed NEWS summary follows these details on how to get the
Guile sources.

Here are the compressed sources:
  http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.lz   (6MB)
  http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.xz   (6MB)
  http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.gz   (10MB)

Here are the GPG detached signatures[*]:
  http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.lz.sig
  http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.xz.sig
  http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.gz.sig

Use a mirror for higher download bandwidth:
  http://www.gnu.org/order/ftp.html

Here are the SHA256 checksums:

  96f5263f89dda2d757fe1129e489e672f5a0b7540ee6710ec7ef352120d8af52  guile-3.0.8.tar.lz
  daa7060a56f2804e9b74c8d7e7fe8beed12b43aab2789a38585183fcc17b8a13  guile-3.0.8.tar.xz
  f25ae0c26e911af1b5005292d4f56621879f74d6958b30741cf67d8b6feb2016  guile-3.0.8.tar.gz

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify guile-3.0.8.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys 4FD4D288D445934E0A14F9A5A8803732E4436885

and rerun the 'gpg --verify' command.

This release was bootstrapped with the following tools:
  Autoconf 2.71
  Automake 1.16.2
  Libtool 2.4.6
  Gnulib v0.1-4855-g8f4538a53d
  Makeinfo 6.7

An extract from NEWS follows.


Changes in 3.0.8 (since 3.0.7):

* Notable changes

** Cross-module inlining

Although historically Guile has treated modules as glorified hash
tables, most modules are actually _declarative_ -- they just define
functions and variables and provide them for other modules to use, and
don't manipulate modules as first-class objects.  See "Declarative
Modules" in the manual, for more discussion.

Since version 3.0.0, Guile has taken advantage of declarative semantics
to allow a top-level definition to be inlined within its uses in the
same compilation unit, provided the binding is never assigned and
defined exactly once.  Guile 3.0.8 extends this to allow some
exported declarative definitions to be inlined into other modules.

This facility is mostly transparent to the user and is enabled at the
default -O2 optimization level.  "Small" definitions are available for
cross-module inlining (-Oinlinable-exports, included at -O2).  The
actual inlining decision is performed by Guile's partial evaluation pass
(the -Ocross-module-inlining modifier to -Opeval, included at -O2 also),
subject to effort and size growth counters.

Note however that as with macros, when a definition changes in module A,
a separately compiled module B that uses that definition doesn't
automatically get recompiled.  This is a limitation in Guile that we
would like to fix.

As another limitation, cross-module inlining is only available for
imports from modules which have already been compiled at -O2 (or
otherwise with -Oinlinable-exports).

When determining whether to enable this facility by default, we weighed
the usability problems of stale inlined bindings against the benefit of
allowing module boundaries to no longer be optimization boundaries, we
ended up on the "let's do it!" side of the equation.  However we welcome
feedback from users as to what should be the default behavior, until
such a time as we have a proper notion of when a compiled file is stale
or not.

** Avoid the need for a custom GMP allocator

In Guile 3.0.6, we fixed a longstanding bug in Guile's use of the
library that Guile uses to implement bignums (large integers), GMP
(https://gmplib.org).  See the Guile 3.0.6 release notes.  However this
left us with a suboptimal Guile, in which each large integer had to have
a finalizer to free the memory allocated by GMP.  Finalizers take time
and space, and so they limit allocation rate, causing bignum performance
to drop.  Though you could set an environment variable to go back to the
older, faster behavior, it wasn't the default.

In Guile 3.0.8 we fix this problem comprehensively by avoiding embedding
GMP's mpz_t values in Guile bignums.  Instead we embed the bignum digits
directly, avoiding the need for finalizers or custom allocators.  This
removes the need for the GUILE_INSTALL_GMP_MEMORY_FUNCTIONS environment
variable mentioned in the Guile 3.0.6 release notes.  We also deprecate
the scm_install_gmp_memory_functions variable.

* New interfaces and functionality

** Typed vector copy functions in (srfi srfi-4 gnu)

The functions `u8vector-copy' `s8vector-copy' `u16vector-copy'
`s16vector-copy' `u32vector-copy' `s32vector-copy' `u64vector-copy'
`s64vector-copy' `f32vector-copy' `f64vector-copy' `c32vector-copy'
`c64vector-copy' `u8vector-copy!'  `s8vector-copy!'  `u16vector-copy!'
`s16vector-copy!'  `u32vector-copy!'  `s32vector-copy!'
`u64vector-copy!'  `s64vector-copy!'  `f32vector-copy!'
`f64vector-copy!'  `c32vector-copy!'  `c64vector-copy!' have been
added. See SRFI-4 - Guile extensions" in the manual.

** New function srfi-4-vector-type-size in (srfi srfi-4 gnu)

See SRFI-4 - Guile extensions" in the manual.

** `bytevector-fill!' supports partial fill through optional arguments

This is an extension to the r6rs procedure. See "Manipulating
Bytevectors" in the manual.

** `vector-copy!' and `vector-copy' from (rnrs base) included in core

Compared to the previous versions, these accept range arguments. See
"Accessing and Modifying Vector Contents" in the manual.

** New function bitvector-copy

See "Bit vectors" in the manual.

** (system foreign) supports C99 complex types

The types `complex-float' and `complex-double' stand for C99 `float
_Complex' and `double _Complex` respectively.

* Other new optimizations

** Better optimization of "let" in right-hand-side of "letrec"

** Allow constant-folding for calls to "expt"

Thanks to Maxime Devos.

** Add ,optimize-cps REPL meta-command
    
This meta-command is like ,optimize, but at a lower level.

** Improve alias analysis in common subexpression elimination

** Avoid argument-count checks for well-typed calls to known procedures

This speeds up calls to lexically bound procedures.

** Avoid return-value-count checks for calls to known-return-arity procedures

This new optimization, enabled at -O2, speeds up returns from calls to
lexically bound procedures.

* Build system changes

** Update Gnulib (bugs.gnu.org/49930)

Update gnulib to 8f4538a53d64054ae2fc8b86c0f87c418c6176e6.
    
** Compile libguile with -flto if available

By default, if the compiler supports link-time optimization via the
-flto flag, Guile will add it to CFLAGS.  This results in a libguile
that is approximately 15% smaller.  Pass --disable-lto to configure to
inhibit this behavior.

** Trim set of prebuilt .go files shipped in the tarball

Guile includes built Scheme files in its tarball to speed up the build,
for casual builders that are less concerned with reproducibility.
However they took a lot of space and we have now trimmed these down to a
more minimal set.  As always, you can remove them and build entirely
from source via a `make -C prebuilt clean`.

* New deprecations

** Vector functions require vector arguments

Passing arrays that are not vectors (arrays for which `(vector? array)'
returns false) to functions `vector-move-left!', `vector-move-right!',
`vector->list', and `vector-copy' is deprecated. Use `array-copy!',
`array-copy', and `array->list' for such arguments.

** `scm_from_contiguous_typed_array' is deprecated

This function was added during the Guile 2.x series and was not
documented and is no longer used in Guile itself.

** Deprecate the "simple vector" concept, `scm_is_simple_vector'

This concept meant to indicate "vectors which aren't array slices".  Use
scm_is_vector.

** Deprecate internal contiguous array flag

We still reserve space for the flag to preserve ABI but it has no
effect.  As such we also remove the internal SCM_I_ARRAY_CONTIGUOUS,
SCM_SET_ARRAY_CONTIGUOUS_FLAG, SCM_CLR_ARRAY_CONTIGUOUS_FLAG,
SCM_I_ARRAY_CONTP preprocessor interfaces, as they were internal and
there is no longer a sensible way of using them.

** Deprecate symbol properties

Symbols used to have a "function slot" and a "property slot", inherited
from Emacs Lisp and early Lisps, which one would access with
'symbol-pref', 'symbol-fref', 'symbol-pset!', and 'symbol-fset!'.  These
procedures have been discouraged in favor of object properties; they are
now deprecated.  This saves a few words of memory per symbol.

* Bug fixes

** Fix compilation of (ash x N), where N is a literal, at -O1 and below
** Texinfo and XML parsers are now thread-safe (bugs.gnu.org/51264)
** Fix `filename-completion-function' in (ice-9 readline)
** Fix trace-calls-to-procedure (bugs.gnu.org/43102, bugs.gnu.org/48412)
** Fix bug in nftw function (bugs.gnu.org/44182)
** Fix optimization bug in CSE in eq-constant? if both branches same
** Fix readline initialization with invalid keymaps
** Fix crash when reading #nil (bugs.gnu.org/49305)
** Fix read error when reading #{}}#.
** Fix Darwin host detection in foreign-library facility.
** Fix unification of (x ...) patterns in `match'
** Fix scaling floats with leading zeroes in `format'
** Improve support for r7rs-style `(srfi N)' and r6rs-style `(srfi :N)
   module names (bugs.gnu.org/39601, bugs.gnu.org/40371)
** Add support for the ARC architecture (bugs.gnu.org/48816)
** Build fix for const strerror result (bugs.gnu.org/43987)
** Fix typos in SRFI documentation (bugs.gnu.org/50127)
** Fix bounds check in `recvfrom!' (bugs.gnu.org/45595)
** Add support for riscv32
** Limit `ash' to left-shift by 2^32 bits (bugs.gnu.org/48150)
** Fix type confusion in heap-numbers-equal? calls from VM
    
Hearty thanks to Jakub Wojciech, Robin Green, Daniel Llorens, Matija
Obid, RhodiumToad, Rob Browning, Maxime Devos, Aleix Conchillo Flaqué,
Timothy Sample, d4ryus, Fabrice Fontaine, Taylan Kammer, Vineet Gupta,
Philipp Klaus Krause, Arun Isaac, and Alex Shinn.



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: GNU Guile 3.0.8 released
  2022-02-11  7:47 GNU Guile 3.0.8 released Andy Wingo
@ 2022-02-11 11:05 ` Maxime Devos
  2022-02-11 17:14   ` Aleix Conchillo Flaqué
  2022-02-11 14:34 ` [PP?] " Olivier Dion via Developers list for Guile, the GNU extensibility library
  1 sibling, 1 reply; 11+ messages in thread
From: Maxime Devos @ 2022-02-11 11:05 UTC (permalink / raw)
  To: Andy Wingo, guile-user, guile-sources, guile-devel

[-- Attachment #1: Type: text/plain, Size: 554 bytes --]

Andy Wingo schreef op vr 11-02-2022 om 08:47 [+0100]:
> We are delighted to announce GNU Guile release 3.0.8, the latest in the [...]
> The Guile 3.0.8 release mixes maintenance and optimizations [...]

Is there any reason the fix
<https://debbugs.gnu.org/cgi/bugreport.cgi?bug=43521#11> was not
applied?

In the future, could it be announced in advance that a new version will
be released? Then people could test the new proposed version and remind
maintainers of forgotten fixes before the version has been finalised.

Greetings,
Maxime.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 260 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PP?] GNU Guile 3.0.8 released
  2022-02-11  7:47 GNU Guile 3.0.8 released Andy Wingo
  2022-02-11 11:05 ` Maxime Devos
@ 2022-02-11 14:34 ` Olivier Dion via Developers list for Guile, the GNU extensibility library
  1 sibling, 0 replies; 11+ messages in thread
From: Olivier Dion via Developers list for Guile, the GNU extensibility library @ 2022-02-11 14:34 UTC (permalink / raw)
  To: Andy Wingo, Andy Wingo, guile-user, guile-sources, guile-devel,
	info-gnu

On Fri, 11 Feb 2022, Andy Wingo <wingo@pobox.com> wrote:

> Note however that as with macros, when a definition changes in module
> A, a separately compiled module B that uses that definition doesn't
> automatically get recompiled.  This is a limitation in Guile that we
> would like to fix.

I find this to be critical.  It's a real pain to not have dependencies
tracking in a build system.  

How could this be fixed?  Does generating *.d files like GCC does for C
would work?

-- 
Olivier Dion
Polymtl



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: GNU Guile 3.0.8 released
  2022-02-11 11:05 ` Maxime Devos
@ 2022-02-11 17:14   ` Aleix Conchillo Flaqué
  2022-02-11 18:03     ` Ricardo Wurmus
  2022-02-12  1:28     ` Greg Troxel
  0 siblings, 2 replies; 11+ messages in thread
From: Aleix Conchillo Flaqué @ 2022-02-11 17:14 UTC (permalink / raw)
  To: Maxime Devos; +Cc: Andy Wingo, guile-user, guile-sources, guile-devel

[-- Attachment #1: Type: text/plain, Size: 356 bytes --]

On Fri, Feb 11, 2022 at 3:05 AM Maxime Devos <maximedevos@telenet.be> wrote:

> Andy Wingo schreef op vr 11-02-2022 om 08:47 [+0100]:
> > We are delighted to announce GNU Guile release 3.0.8, the latest in the
> [...]
> > The Guile 3.0.8 release mixes maintenance and optimizations [...]
>
>
Am I the only one who has not received the announcement?

Aleix

[-- Attachment #2: Type: text/html, Size: 1024 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: GNU Guile 3.0.8 released
  2022-02-11 17:14   ` Aleix Conchillo Flaqué
@ 2022-02-11 18:03     ` Ricardo Wurmus
  2022-02-11 18:51       ` Chris Vine
  2022-02-12  1:28     ` Greg Troxel
  1 sibling, 1 reply; 11+ messages in thread
From: Ricardo Wurmus @ 2022-02-11 18:03 UTC (permalink / raw)
  To: Aleix Conchillo Flaqué
  Cc: Andy Wingo, guile-sources, guile-user, Maxime Devos, guile-devel


Aleix Conchillo Flaqué <aconchillo@gmail.com> writes:

> On Fri, Feb 11, 2022 at 3:05 AM Maxime Devos <maximedevos@telenet.be> wrote:
>
>> Andy Wingo schreef op vr 11-02-2022 om 08:47 [+0100]:
>> > We are delighted to announce GNU Guile release 3.0.8, the latest in the
>> [...]
>> > The Guile 3.0.8 release mixes maintenance and optimizations [...]
>>
>>
> Am I the only one who has not received the announcement?

No.  I also haven’t received it.

-- 
Ricardo



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: GNU Guile 3.0.8 released
  2022-02-11 18:03     ` Ricardo Wurmus
@ 2022-02-11 18:51       ` Chris Vine
  2022-02-12  8:01         ` tomas
  0 siblings, 1 reply; 11+ messages in thread
From: Chris Vine @ 2022-02-11 18:51 UTC (permalink / raw)
  To: guile-devel

On Fri, 11 Feb 2022 19:03:17 +0100
Ricardo Wurmus <rekado@elephly.net> wrote:
> Aleix Conchillo Flaqué <aconchillo@gmail.com> writes:
> > On Fri, Feb 11, 2022 at 3:05 AM Maxime Devos <maximedevos@telenet.be> wrote:
> >
> >> Andy Wingo schreef op vr 11-02-2022 om 08:47 [+0100]:
> >> > We are delighted to announce GNU Guile release 3.0.8, the latest in the
> >> [...]
> >> > The Guile 3.0.8 release mixes maintenance and optimizations [...]
> >>
> >>
> > Am I the only one who has not received the announcement?
> 
> No.  I also haven’t received it.

I didn't receive it either, on either guile-user or guile-devel.  It
looks as if something may be amiss with the mailing list servers.



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: GNU Guile 3.0.8 released
  2022-02-11 17:14   ` Aleix Conchillo Flaqué
  2022-02-11 18:03     ` Ricardo Wurmus
@ 2022-02-12  1:28     ` Greg Troxel
  2022-02-12  2:04       ` Aleix Conchillo Flaqué
  1 sibling, 1 reply; 11+ messages in thread
From: Greg Troxel @ 2022-02-12  1:28 UTC (permalink / raw)
  To: Aleix Conchillo Flaqué
  Cc: Andy Wingo, guile-sources, guile-user, Maxime Devos, guile-devel

[-- Attachment #1: Type: text/plain, Size: 684 bytes --]


Aleix Conchillo Flaqué <aconchillo@gmail.com> writes:

> On Fri, Feb 11, 2022 at 3:05 AM Maxime Devos <maximedevos@telenet.be> wrote:
>
>> Andy Wingo schreef op vr 11-02-2022 om 08:47 [+0100]:
>> > We are delighted to announce GNU Guile release 3.0.8, the latest in the
>> [...]
>> > The Guile 3.0.8 release mixes maintenance and optimizations [...]
>>
>>
> Am I the only one who has not received the announcement?

I got the announcement but it was filed to spam because of a rule
KAM_MAILSPLOIT (KAM ruleset for spamassassin), because there were two
From: headers.  I have reported this ruleset false positive.

Andy: Perhaps resend, with only one From: header.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 194 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: GNU Guile 3.0.8 released
  2022-02-12  1:28     ` Greg Troxel
@ 2022-02-12  2:04       ` Aleix Conchillo Flaqué
  0 siblings, 0 replies; 11+ messages in thread
From: Aleix Conchillo Flaqué @ 2022-02-12  2:04 UTC (permalink / raw)
  To: Greg Troxel; +Cc: Andy Wingo, guile-sources, guile-user, guile-devel

On Fri, Feb 11, 2022 at 5:28 PM Greg Troxel <gdt@lexort.com> wrote:

>
> Aleix Conchillo Flaqué <aconchillo@gmail.com> writes:
>
> > On Fri, Feb 11, 2022 at 3:05 AM Maxime Devos <maximedevos@telenet.be>
> wrote:
> >
> >> Andy Wingo schreef op vr 11-02-2022 om 08:47 [+0100]:
> >> > We are delighted to announce GNU Guile release 3.0.8, the latest in
> the
> >> [...]
> >> > The Guile 3.0.8 release mixes maintenance and optimizations [...]
> >>
> >>
> > Am I the only one who has not received the announcement?
>
> I got the announcement but it was filed to spam because of a rule
> KAM_MAILSPLOIT (KAM ruleset for spamassassin), because there were two
> From: headers.  I have reported this ruleset false positive.
>
>
It didn't even get into GMail spam... Oh well.

> Andy: Perhaps resend, with only one From: header.
>

I'll ping him.

Thanks!

Aleix


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: GNU Guile 3.0.8 released
  2022-02-11 18:51       ` Chris Vine
@ 2022-02-12  8:01         ` tomas
  2022-02-12 10:15           ` Alexey Abramov
  0 siblings, 1 reply; 11+ messages in thread
From: tomas @ 2022-02-12  8:01 UTC (permalink / raw)
  To: guile-devel

[-- Attachment #1: Type: text/plain, Size: 1716 bytes --]

On Fri, Feb 11, 2022 at 06:51:50PM +0000, Chris Vine wrote:
> On Fri, 11 Feb 2022 19:03:17 +0100
> Ricardo Wurmus <rekado@elephly.net> wrote:
> > Aleix Conchillo Flaqué <aconchillo@gmail.com> writes:
> > > On Fri, Feb 11, 2022 at 3:05 AM Maxime Devos <maximedevos@telenet.be> wrote:
> > >
> > >> Andy Wingo schreef op vr 11-02-2022 om 08:47 [+0100]:
> > >> > We are delighted to announce GNU Guile release 3.0.8, the latest in the
> > >> [...]
> > >> > The Guile 3.0.8 release mixes maintenance and optimizations [...]
> > >>
> > >>
> > > Am I the only one who has not received the announcement?
> > 
> > No.  I also haven’t received it.
> 
> I didn't receive it either, on either guile-user or guile-devel.  It
> looks as if something may be amiss with the mailing list servers.

FWIW, I did receive it, and the To: header field looks innocent enough:

  To: guile-user@gnu.org, guile-sources@gnu.org, guile-devel@gnu.org, info-gnu@gnu.org

Here are the more envelope-ish headers:

  From guile-devel-bounces+tomas=tuxteam.de@gnu.org Fri Feb 11 08:48:40 2022
  Return-path: <guile-devel-bounces+tomas=tuxteam.de@gnu.org>
  Envelope-to: tomas@tuxteam.de
  Delivery-date: Fri, 11 Feb 2022 08:48:40 +0100
  Received: from lists.gnu.org ([209.51.188.17])
          by mail.tuxteam.de with esmtps  (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
          (Exim 4.94.2)
          (envelope-from <guile-devel-bounces+tomas=tuxteam.de@gnu.org>)
          id 1nIQfY-0000rR-Jv
          for tomas@tuxteam.de; Fri, 11 Feb 2022 08:48:40 +0100

...so it seems it came through guile-devel@

I haven't checked whether the DKIM signature is good, though. So maybe...

Cheers
-- 
t

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: GNU Guile 3.0.8 released
  2022-02-12  8:01         ` tomas
@ 2022-02-12 10:15           ` Alexey Abramov
  0 siblings, 0 replies; 11+ messages in thread
From: Alexey Abramov @ 2022-02-12 10:15 UTC (permalink / raw)
  To: guile-devel

Hi,

Rspamd rejected the message in my case

2022-02-11 08:51:10 #260(normal) <975ccb>; task; rspamd_task_write_log:
id: <87zgmxn8t7.fsf@pobox.com>, qid: <5108717e>, ip: 209.51.188.17,
from: <guile-devel-bounces@gnu.org>, (default: T (reject): [16.49/15.00]
[
MULTIPLE_FROM(9.00){wingo@pobox.com,wingo@pobox.com;},
MULTIPLE_UNIQUE_HEADERS(7.00){From;},
R_DKIM_REJECT(1.00){igalia.com:s=20170329;},
MAILLIST(-0.20){mailman;},
R_SPF_ALLOW(-0.20){+ip4:209.51.188.0/24;},
MIME_GOOD(-0.10){text/plain;},
HAS_LIST_UNSUB(-0.01){},
ARC_NA(0.00){}, ASN(0.00){asn:22989, ipnet:209.51.188.0/24, country:US;},
DKIM_TRACE(0.00){igalia.com:-;},
DMARC_NA(0.00){Duplicate From header;},
FORGED_RECIPIENTS_MAILLIST(0.00){},
FORGED_SENDER_MAILLIST(0.00){},
FROM_HAS_DN(0.00){},
FROM_NEQ_ENVFROM(0.00){wingo@pobox.com;guile-devel-bounces@gnu.org;},
MID_RHS_MATCH_FROM(0.00){},
MIME_TRACE(0.00){0:+;},
RCPT_COUNT_THREE(0.00){4;},
RCVD_COUNT_FIVE(0.00){5;},
RCVD_TLS_LAST(0.00){},
RCVD_VIA_SMTP_AUTH(0.00){},
TAGGED_FROM(0.00){levenson=mmer.org;},
TO_DN_NONE(0.00){}
]), len: 15386, time: 1146.445ms, dns req: 57, digest: <37c4e97a8a92f0704f4bb46badae2427>, rcpts: <levenson@mmer.org>, mime_rcpts: <guile-user@gnu.org,guile-sources@gnu.org,guile-devel@gnu.org,info-gnu@gnu.org...>

-- 
Alexey



^ permalink raw reply	[flat|nested] 11+ messages in thread

* GNU Guile 3.0.8 released
@ 2022-02-12 13:54 Andy Wingo
  0 siblings, 0 replies; 11+ messages in thread
From: Andy Wingo @ 2022-02-12 13:54 UTC (permalink / raw)
  To: guile-user, guile-sources, guile-devel, info-gnu

[A resend, as original mail accidentally had two From headers; apologies
for any duplicates!]

We are delighted to announce GNU Guile release 3.0.8, the latest in the
3.0 stable release series.

The Guile 3.0.8 release mixes maintenance and optimizations that were
landed since the previous 3.0.7 stable release in May 2021.  See the
NEWS extract at the end of the mail for full details.

Compared to the previous stable series (2.2.x), Guile 3.0 adds support
for just-in-time native code generation, speeding up all Guile programs.


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

Guile is an implementation of the Scheme programming language, packaged
for use in a wide variety of environments.  In addition to implementing
the R5RS, R6RS, and R7RS Scheme standards, Guile includes full access to
POSIX system calls, networking support, multiple threads, dynamic
linking, a foreign function call interface, powerful string processing,
and HTTP client and server implementations.

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 3.0.8 can be installed in parallel with Guile 2.2.x; see
http://www.gnu.org/software/guile/manual/html_node/Parallel-Installations.html.

A more detailed NEWS summary follows these details on how to get the
Guile sources.

Here are the compressed sources:
  http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.lz   (6MB)
  http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.xz   (6MB)
  http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.gz   (10MB)

Here are the GPG detached signatures[*]:
  http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.lz.sig
  http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.xz.sig
  http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.gz.sig

Use a mirror for higher download bandwidth:
  http://www.gnu.org/order/ftp.html

Here are the SHA256 checksums:

  96f5263f89dda2d757fe1129e489e672f5a0b7540ee6710ec7ef352120d8af52  guile-3.0.8.tar.lz
  daa7060a56f2804e9b74c8d7e7fe8beed12b43aab2789a38585183fcc17b8a13  guile-3.0.8.tar.xz
  f25ae0c26e911af1b5005292d4f56621879f74d6958b30741cf67d8b6feb2016  guile-3.0.8.tar.gz

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify guile-3.0.8.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys 4FD4D288D445934E0A14F9A5A8803732E4436885

and rerun the 'gpg --verify' command.

This release was bootstrapped with the following tools:
  Autoconf 2.71
  Automake 1.16.2
  Libtool 2.4.6
  Gnulib v0.1-4855-g8f4538a53d
  Makeinfo 6.7

An extract from NEWS follows.


Changes in 3.0.8 (since 3.0.7):

* Notable changes

** Cross-module inlining

Although historically Guile has treated modules as glorified hash
tables, most modules are actually _declarative_ -- they just define
functions and variables and provide them for other modules to use, and
don't manipulate modules as first-class objects.  See "Declarative
Modules" in the manual, for more discussion.

Since version 3.0.0, Guile has taken advantage of declarative semantics
to allow a top-level definition to be inlined within its uses in the
same compilation unit, provided the binding is never assigned and
defined exactly once.  Guile 3.0.8 extends this to allow some
exported declarative definitions to be inlined into other modules.

This facility is mostly transparent to the user and is enabled at the
default -O2 optimization level.  "Small" definitions are available for
cross-module inlining (-Oinlinable-exports, included at -O2).  The
actual inlining decision is performed by Guile's partial evaluation pass
(the -Ocross-module-inlining modifier to -Opeval, included at -O2 also),
subject to effort and size growth counters.

Note however that as with macros, when a definition changes in module A,
a separately compiled module B that uses that definition doesn't
automatically get recompiled.  This is a limitation in Guile that we
would like to fix.

As another limitation, cross-module inlining is only available for
imports from modules which have already been compiled at -O2 (or
otherwise with -Oinlinable-exports).

When determining whether to enable this facility by default, we weighed
the usability problems of stale inlined bindings against the benefit of
allowing module boundaries to no longer be optimization boundaries, we
ended up on the "let's do it!" side of the equation.  However we welcome
feedback from users as to what should be the default behavior, until
such a time as we have a proper notion of when a compiled file is stale
or not.

** Avoid the need for a custom GMP allocator

In Guile 3.0.6, we fixed a longstanding bug in Guile's use of the
library that Guile uses to implement bignums (large integers), GMP
(https://gmplib.org).  See the Guile 3.0.6 release notes.  However this
left us with a suboptimal Guile, in which each large integer had to have
a finalizer to free the memory allocated by GMP.  Finalizers take time
and space, and so they limit allocation rate, causing bignum performance
to drop.  Though you could set an environment variable to go back to the
older, faster behavior, it wasn't the default.

In Guile 3.0.8 we fix this problem comprehensively by avoiding embedding
GMP's mpz_t values in Guile bignums.  Instead we embed the bignum digits
directly, avoiding the need for finalizers or custom allocators.  This
removes the need for the GUILE_INSTALL_GMP_MEMORY_FUNCTIONS environment
variable mentioned in the Guile 3.0.6 release notes.  We also deprecate
the scm_install_gmp_memory_functions variable.

* New interfaces and functionality

** Typed vector copy functions in (srfi srfi-4 gnu)

The functions `u8vector-copy' `s8vector-copy' `u16vector-copy'
`s16vector-copy' `u32vector-copy' `s32vector-copy' `u64vector-copy'
`s64vector-copy' `f32vector-copy' `f64vector-copy' `c32vector-copy'
`c64vector-copy' `u8vector-copy!'  `s8vector-copy!'  `u16vector-copy!'
`s16vector-copy!'  `u32vector-copy!'  `s32vector-copy!'
`u64vector-copy!'  `s64vector-copy!'  `f32vector-copy!'
`f64vector-copy!'  `c32vector-copy!'  `c64vector-copy!' have been
added. See SRFI-4 - Guile extensions" in the manual.

** New function srfi-4-vector-type-size in (srfi srfi-4 gnu)

See SRFI-4 - Guile extensions" in the manual.

** `bytevector-fill!' supports partial fill through optional arguments

This is an extension to the r6rs procedure. See "Manipulating
Bytevectors" in the manual.

** `vector-copy!' and `vector-copy' from (rnrs base) included in core

Compared to the previous versions, these accept range arguments. See
"Accessing and Modifying Vector Contents" in the manual.

** New function bitvector-copy

See "Bit vectors" in the manual.

** (system foreign) supports C99 complex types

The types `complex-float' and `complex-double' stand for C99 `float
_Complex' and `double _Complex` respectively.

* Other new optimizations

** Better optimization of "let" in right-hand-side of "letrec"

** Allow constant-folding for calls to "expt"

Thanks to Maxime Devos.

** Add ,optimize-cps REPL meta-command
    
This meta-command is like ,optimize, but at a lower level.

** Improve alias analysis in common subexpression elimination

** Avoid argument-count checks for well-typed calls to known procedures

This speeds up calls to lexically bound procedures.

** Avoid return-value-count checks for calls to known-return-arity procedures

This new optimization, enabled at -O2, speeds up returns from calls to
lexically bound procedures.

* Build system changes

** Update Gnulib (bugs.gnu.org/49930)

Update gnulib to 8f4538a53d64054ae2fc8b86c0f87c418c6176e6.
    
** Compile libguile with -flto if available

By default, if the compiler supports link-time optimization via the
-flto flag, Guile will add it to CFLAGS.  This results in a libguile
that is approximately 15% smaller.  Pass --disable-lto to configure to
inhibit this behavior.

** Trim set of prebuilt .go files shipped in the tarball

Guile includes built Scheme files in its tarball to speed up the build,
for casual builders that are less concerned with reproducibility.
However they took a lot of space and we have now trimmed these down to a
more minimal set.  As always, you can remove them and build entirely
from source via a `make -C prebuilt clean`.

* New deprecations

** Vector functions require vector arguments

Passing arrays that are not vectors (arrays for which `(vector? array)'
returns false) to functions `vector-move-left!', `vector-move-right!',
`vector->list', and `vector-copy' is deprecated. Use `array-copy!',
`array-copy', and `array->list' for such arguments.

** `scm_from_contiguous_typed_array' is deprecated

This function was added during the Guile 2.x series and was not
documented and is no longer used in Guile itself.

** Deprecate the "simple vector" concept, `scm_is_simple_vector'

This concept meant to indicate "vectors which aren't array slices".  Use
scm_is_vector.

** Deprecate internal contiguous array flag

We still reserve space for the flag to preserve ABI but it has no
effect.  As such we also remove the internal SCM_I_ARRAY_CONTIGUOUS,
SCM_SET_ARRAY_CONTIGUOUS_FLAG, SCM_CLR_ARRAY_CONTIGUOUS_FLAG,
SCM_I_ARRAY_CONTP preprocessor interfaces, as they were internal and
there is no longer a sensible way of using them.

** Deprecate symbol properties

Symbols used to have a "function slot" and a "property slot", inherited
from Emacs Lisp and early Lisps, which one would access with
'symbol-pref', 'symbol-fref', 'symbol-pset!', and 'symbol-fset!'.  These
procedures have been discouraged in favor of object properties; they are
now deprecated.  This saves a few words of memory per symbol.

* Bug fixes

** Fix compilation of (ash x N), where N is a literal, at -O1 and below
** Texinfo and XML parsers are now thread-safe (bugs.gnu.org/51264)
** Fix `filename-completion-function' in (ice-9 readline)
** Fix trace-calls-to-procedure (bugs.gnu.org/43102, bugs.gnu.org/48412)
** Fix bug in nftw function (bugs.gnu.org/44182)
** Fix optimization bug in CSE in eq-constant? if both branches same
** Fix readline initialization with invalid keymaps
** Fix crash when reading #nil (bugs.gnu.org/49305)
** Fix read error when reading #{}}#.
** Fix Darwin host detection in foreign-library facility.
** Fix unification of (x ...) patterns in `match'
** Fix scaling floats with leading zeroes in `format'
** Improve support for r7rs-style `(srfi N)' and r6rs-style `(srfi :N)
   module names (bugs.gnu.org/39601, bugs.gnu.org/40371)
** Add support for the ARC architecture (bugs.gnu.org/48816)
** Build fix for const strerror result (bugs.gnu.org/43987)
** Fix typos in SRFI documentation (bugs.gnu.org/50127)
** Fix bounds check in `recvfrom!' (bugs.gnu.org/45595)
** Add support for riscv32
** Limit `ash' to left-shift by 2^32 bits (bugs.gnu.org/48150)
** Fix type confusion in heap-numbers-equal? calls from VM
    
Hearty thanks to Jakub Wojciech, Robin Green, Daniel Llorens, Matija
Obid, RhodiumToad, Rob Browning, Maxime Devos, Aleix Conchillo Flaqué,
Timothy Sample, d4ryus, Fabrice Fontaine, Taylan Kammer, Vineet Gupta,
Philipp Klaus Krause, Arun Isaac, and Alex Shinn.



^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2022-02-12 13:54 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-11  7:47 GNU Guile 3.0.8 released Andy Wingo
2022-02-11 11:05 ` Maxime Devos
2022-02-11 17:14   ` Aleix Conchillo Flaqué
2022-02-11 18:03     ` Ricardo Wurmus
2022-02-11 18:51       ` Chris Vine
2022-02-12  8:01         ` tomas
2022-02-12 10:15           ` Alexey Abramov
2022-02-12  1:28     ` Greg Troxel
2022-02-12  2:04       ` Aleix Conchillo Flaqué
2022-02-11 14:34 ` [PP?] " Olivier Dion via Developers list for Guile, the GNU extensibility library
  -- strict thread matches above, loose matches on Subject: below --
2022-02-12 13:54 Andy Wingo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).