unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
* GNU Guile 2.2.3 released.
@ 2017-12-01 16:35 Andy Wingo
  2017-12-02 19:50 ` Matt Wette
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Andy Wingo @ 2017-12-01 16:35 UTC (permalink / raw)
  To: guile-user, guile-devel, guile-sources, info-gnu

We are delighted to announce GNU Guile release 2.2.3, the third bug-fix
release in the 2.2 stable release series.

Besides the usual pile of bug fixes, this release has two notable
improvements that we hope you will enjoy.  The first is that the
compiler is faster, especially on large Scheme files.  The second is
that when you paste a multi-lined expression into the REPL, it now takes
up only one history entry, and any tabs in that pasted entry no longer
trigger bogus and annoying auto-complete attempts.

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.3 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.3 (since 2.2.2):

* New interfaces and functionality

** (web uri) module has better support for RFC 3986

The URI standard, RFC 3986, defines additional "relative-ref" and
"URI-reference" data types.  Thanks to Daniel Hartwig, Guile's support
for these URI subtypes has been improved.  See "Universal Resource
Identifiers" in the manual, for more.

** `struct-ref/unboxed' and `struct-set!/unboxed'

These procedures should be used when accessing struct fields with type
`u' (unboxed).  See "Structure Basics" in the manual, for full details.

** Improved support for arrays with non-zero lower bounds

Thanks to work by Daniel Llorens, Guile no longer exhibits buggy
behavior in "sort" or "sort!" on arrays with non-zero lower dimension
bounds.  Arrays with non-zero lower dimension bounds are now allowed for
array-slice-for-each, and truncated-print now supports bitvectors and
arrays with non-zero lower bounds.  General arrays are now supported as
well for random:hollow-sphere!.

** Add `uintptr_t' and `intptr_t' FFI types.

See "Foreign Types" in the manual for full details.

* Compiler improvements

** Improve speed of compiler backend for functions without loops

This is a marginal speed improvement, especially for code compiled with
optimization level "-O1" or below.

** Disable slot pre-coloring for optimization level "-O1" or below

This improves the speed of the compiler backend.

** Improve complexity of constant subexpression elimination pass

This is a large speed improvement when compiling large files with the
default "-O2" pass.

** CPS conversion avoids generating return arity adapters if possible

In Guile, the expression in (define a EXP) may return 1 or more values.
This value elision in "value" context is implicit earlier in the Guile
compiler, in Tree-IL, but is made explicit in the CPS middle-end
language by the addition of the equivalent of explicit call-with-values
continuations that ignore additional values.  However in many cases we
can avoid generating these extra continuations if we know that EXP is
single-valued, as is the case for example for constants or variable
references or the like.

Although these "arity-adapting continuations" would be removed by dead
code elimination at optimization level "-O2" or above, they were still
being needlessly generated in the first place.  Guile now avoids
generating them, speeding up not only the optimizer at -O2 but also the
entire compiler pipeline at -O1 or below, as well as improving the
residual code at -O1 or below.

* New deprecations

** Using `uri?' as a predicate on relative-refs deprecated

If you don't care whether the URI is a relative-ref or not, use
`uri-reference?'.  If you do, use `uri-reference?' and `relative-ref?'.
In the future `uri?' will return a true value only for URIs that specify
a scheme.

** Struct tail arrays deprecated

Guile's structures used to have a facility whereby each instance of a
vtable can contain a variable-length tail array of values.  The length
of the tail array was stored in the structure.  This facility was
originally intended to allow C code to expose raw C structures with
word-sized tail arrays to Scheme.

However, the tail array facility was confusing and doesn't work very
well.  It was very rarely used, but it insinuates itself into all
invocations of `make-struct'.  For this reason the clumsily-named
`make-struct/no-tail' procedure can actually be more elegant in actual
use, because it doesn't have a random `0' argument stuck in the middle.

Tail arrays also inhibit optimization by allowing instances to affect
their shapes.  In the absence of tail arrays, all instances of a given
vtable have the same number and kinds of fields.  This uniformity can be
exploited by the runtime and the optimizer.  The presence of tail arrays
make some of these optimizations more difficult.

Finally, the tail array facility is ad-hoc and does not compose with the
rest of Guile.  If a Guile user wants an array with user-specified
length, it's best to use a vector.  It is more clear in the code, and
the standard optimization techniques will do a good job with it.

For all of these reasons, tail arrays are deprecated in Guile 2.2 and
will be removed from Guile 3.0.  Likewise, `make-struct' /
`scm_make_struct' is deprecated in favor of `make-struct/no-tail' /
`scm_make_struct_no_tail'.  Perhaps one day we will be able to reclaim
the `make-struct' name!

** Struct "self" slots deprecated

It used to be that you could make a structure vtable that had "self"
slots.  Instances of that vtable would have those slots initialized to
the instance itself.  This can be useful in C code where you might have
a pointer to the data array, and want to get the `SCM' handle for the
structure.  However this was a little used complication without any use
in Scheme code.  To replace it, just use "p" slots and initialize the
slot values manually on initialization.

** Struct fields with opaque ("o") protection deprecated

Struct fields are declared with a "protection", meaning read-only ('r'),
read-write ('w'), or opaque ('o').  There is also "hidden" ('h') which
is read-write but which isn't initialized by arguments passed to
`make-struct/no-tail', but that's a detail.  Opaque struct fields were
used to allocate storage in a struct that could only be accessed by C.
This facility was very rarely used (unused in Guile itself) but now that
we are implementing more and more in Scheme, it is completely useless.

To enforce permissions on struct fields, instead layer on an abstraction
at a higher level, in the same way that immutable record fields are
simply those which don't have an accessor.

** Using `struct-ref' and `struct-set!' on unboxed fields is deprecated

Use the new `struct-ref/unboxed' and `struct-set!/unboxed' instead.

* Bug fixes

** guile.m4 now checks for Guile 2.2 by default

Before, it was still preferring Guile 2.0.  It now also supports the
Guile 3.0 prereleases.

** Fix setting breakpoints from the REPL

** Allow GDB support to be used with GDB linked against Guile 2.0.

** Fix deadlock in `readdir' on error.

** Fix crash on ia64 during thread switches.

** Fix bug inferring range of `logand' computations with negative numbers

** Fix bug when issuing HTTP requests through proxies.

** Refactor weak hash table implementation to be more robust

Guile 2.2's weak hash table implementation had three big problems.  The
first was a bug causing these tables to leak memory when they would be
resized.  The second was that the implementation was designed so that
tables should be visited by the mark phase of the garbage collector in
one big piece.  This could cause the garbage collector to see too many
newly marked objects at once, causing inefficies in garbage collection.
Finally, the way in which lost weak references were ultimately removed
from weak tables caused a race between the finalizer threads and the
mutator threads, leading to unbounded excess space retention in
pathological cases.  All of this problems have been fixed.

** Allow garbage collection of revealed file ports

Guile can mark a file port as "revealed" if Scheme has been given access
to the file descriptor.  In that case, the file descriptor will not be
closed when the port is garbage-collected.  However we had a bug that
for revealed ports prevented the port from ever being garbage-collected,
leading to memory leaks of Guile's internal port buffers.  This is now
fixed.

** Fix put-bytevector, unget-bytevector with start == bytevector length

** Enable GNU Readline 7.0's support for "bracketed paste".

Before, when pasting an expression that contained TAB characters into
Guile's REPL with GNU Readline support enabled, the pasted TAB
characters would trigger autocompletion in Readline.  This was never
what you wanted.  Guile now sets the new "bracketed-paste" option in GNU
Readline 7.0 to on by default, making readline treat pastes into the
terminal as atomic units without control characters.  See "Readline
Options" in the manual for full details.

** Fix time-monotonic from SRFI-19; broken in 2.2.1.

                             *  *  *

Here are the compressed sources:
  https://ftp.gnu.org/gnu/guile/guile-2.2.3.tar.gz   (16MB)
  https://ftp.gnu.org/gnu/guile/guile-2.2.3.tar.xz   (9.8MB)
  https://ftp.gnu.org/gnu/guile/guile-2.2.3.tar.lz   (8.4MB)

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

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

Here are the SHA256 checksums:

  87ee07caef33c97ddc74bf3c29ce7628cfac12061f573e4a29a3a1176754610a  guile-2.2.3.tar.gz
  8353a8849cd7aa77be66af04bd6bf7a6207440d2f8722e46672232bb9f0a4086  guile-2.2.3.tar.xz
  0f3a6cf3e40bf4603e0479c5df4babb9617bf25d5d3ec7419ceca0545d275d04  guile-2.2.3.tar.lz

[*] 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-2.2.3.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.69
  Automake 1.15.1
  Libtool 2.4.6
  Gnulib v0.1-1157-gb03f418
  Makeinfo 6.5

Thanks to Arun Isaac, Daniel Hartwig, Daniel Llorens, Manolis Ragkousis,
Matt Wette, Maxim Cournoyer, Sergei Trofimovich, and Zefram, who all
contributed to this release.

Happy hacking with Guile,

Andy, Ludovic, and Mark



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

* Re: GNU Guile 2.2.3 released.
  2017-12-01 16:35 GNU Guile 2.2.3 released Andy Wingo
@ 2017-12-02 19:50 ` Matt Wette
  2017-12-02 19:51   ` Matt Wette
  2017-12-03  2:52 ` Matt Wette
  2019-10-09  6:28 ` Andy, here is kind question to provide facts on your statements about RMS Jean Louis
  2 siblings, 1 reply; 5+ messages in thread
From: Matt Wette @ 2017-12-02 19:50 UTC (permalink / raw)
  To: Andy Wingo; +Cc: guile-devel


> On Dec 1, 2017, at 8:35 AM, Andy Wingo <wingo@pobox.com> wrote:
> 
> We are delighted to announce GNU Guile release 2.2.3, the third bug-fix
> release in the 2.2 stable release series.

Builds fine (`make' and `make check') on MacOS 10.12.6.

Builds fine (`configure --with-bdw-gc=bdw-gc-threaded', `gmake' and `gmake check') on FreeBSD 11.1.

Note the instructions for FreeBSD in README are a little off.
1) always install package `pkgconf'   (README implies needed only for threaded)
2) always install package `gmake'    (README implies needed only for threaded)
3) for threads, install package `boehm-gc-threaded' and `./configure --with-bdw-gc=bdw-gc-threaded'
   else
4) for no threads,install package `boehm-gc' and  `./configure --without-threads'

Matt


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

* Re: GNU Guile 2.2.3 released.
  2017-12-02 19:50 ` Matt Wette
@ 2017-12-02 19:51   ` Matt Wette
  0 siblings, 0 replies; 5+ messages in thread
From: Matt Wette @ 2017-12-02 19:51 UTC (permalink / raw)
  To: Matt Wette; +Cc: Andy Wingo, guile-devel


> On Dec 2, 2017, at 11:50 AM, Matt Wette <matt.wette@gmail.com> wrote:
> 
> 
>> On Dec 1, 2017, at 8:35 AM, Andy Wingo <wingo@pobox.com> wrote:
>> 
>> We are delighted to announce GNU Guile release 2.2.3, the third bug-fix
>> release in the 2.2 stable release series.
> 
> Builds fine (`make' and `make check') on MacOS 10.12.6.
> 
> Builds fine (`configure --with-bdw-gc=bdw-gc-threaded', `gmake' and `gmake check') on FreeBSD 11.1.
> 
> Note the instructions for FreeBSD in README are a little off.
> 1) always install package `pkgconf'   (README implies needed only for threaded)
> 2) always install package `gmake'    (README implies needed only for threaded)
> 3) for threads, install package `boehm-gc-threaded' and `./configure --with-bdw-gc=bdw-gc-threaded'
>   else
> 4) for no threads,install package `boehm-gc' and  `./configure --without-threads'
> 
> Matt

Oh, and one more thing:  On FreeBSD, there were warnings about sys/timeb.h being deprecated.




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

* Re: GNU Guile 2.2.3 released.
  2017-12-01 16:35 GNU Guile 2.2.3 released Andy Wingo
  2017-12-02 19:50 ` Matt Wette
@ 2017-12-03  2:52 ` Matt Wette
  2019-10-09  6:28 ` Andy, here is kind question to provide facts on your statements about RMS Jean Louis
  2 siblings, 0 replies; 5+ messages in thread
From: Matt Wette @ 2017-12-03  2:52 UTC (permalink / raw)
  To: Andy Wingo; +Cc: guile-devel


> On Dec 1, 2017, at 8:35 AM, Andy Wingo <wingo@pobox.com> wrote:
> 
> We are delighted to announce GNU Guile release 2.2.3, the third bug-fix
> release in the 2.2 stable release series.

One change from 2.2.2 to 2.2.3 I notice is that the ChangeLog has been zeroed out.  Accident or what?





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

* Andy, here is kind question to provide facts on your statements about RMS
  2017-12-01 16:35 GNU Guile 2.2.3 released Andy Wingo
  2017-12-02 19:50 ` Matt Wette
  2017-12-03  2:52 ` Matt Wette
@ 2019-10-09  6:28 ` Jean Louis
  2 siblings, 0 replies; 5+ messages in thread
From: Jean Louis @ 2019-10-09  6:28 UTC (permalink / raw)
  To: Andy Wingo; +Cc: guile-user, info-gnu, guile-sources, guile-devel

From:
Mr. Jean Louis
Nagpur, India
Day 3 of week 41 of 2019


Hello there,

I have seen your signature here:
https://guix.gnu.org/blog/2019/joint-statement-on-the-gnu-project/

My opinion on your signing of that defamatory, harassing, biased and
fact-less statement is here:
https://gnu.support/richard-stallman/Ludovic-Court%C3%A8s-Guix-is-accusing-Stallman-of-Thoughtcrime-on-his-own-domain-GNU-org.html

Hereby I would like to ask you:

- why are you publishing such hatred on GNU.ORG domain? Why don't you
  publish it on your own personal domain? RMS is not doing that to
  GNU. You are doing it together with others. I find it grossly
  inappropriate!

- which facts do you consider that can support your statement "that
  Stallman’s behavior over the years has undermined a core value of
  the GNU project: the empowerment of all computer users. GNU is not
  fulfilling its mission when the behavior of its leader alienates a
  large part of those we want to reach out to."?

It would be nice of you, if you could send me your opinion in as fast
manner as you have given a signature to Ludovic Courtès to publish it
on GUIX.GNU.ORG

I am entitling you to your opinion. I could not care less what people
write about each other, whatever rumours or facts would be. I don't
mind. 

But I do not approve on publishing that on GUIX website or GNU.ORG
website. Neither I approve of publishing such statements without
commenting possibility.

That is why I am asking you to speak out your mind now. I will publish
your opinion or lack of opinion. I will publish facts you provide me
or lack of those facts.

You have contact form on my opposing view:
https://gnu.support/richard-stallman/Ludovic-Court%C3%A8s-Guix-is-accusing-Stallman-of-Thoughtcrime-on-his-own-domain-GNU-org.html
and you can test me if I will publish your comments or not.

But give me facts that support your statement!

Ludovic Courtès is forbidding comments on his personal blog which he
is mixing with GUIX project on GNU.ORG website.

So what is your opinion? What are the facts?

Jean



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

end of thread, other threads:[~2019-10-09  6:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-01 16:35 GNU Guile 2.2.3 released Andy Wingo
2017-12-02 19:50 ` Matt Wette
2017-12-02 19:51   ` Matt Wette
2017-12-03  2:52 ` Matt Wette
2019-10-09  6:28 ` Andy, here is kind question to provide facts on your statements about RMS Jean Louis

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).