Then a bug report:

I find that there seems to be some kind of racing condition such that the
guile-2.9.1 timing line below sometimes gives segmentation fault. I'm sorry
that I don't have time to look further into that right now, and hope that
someone else also can reproduce it.

Best regards,
Mikael

On Thu, Oct 11, 2018 at 12:49 AM Mikael Djurfeldt <mik...@djurfeldt.com>
wrote:

> Congratulations to fantastic work!
>
> I wonder if your evaluator speed estimates aren't too humble?
>
> With this email, I attach scheme and python versions of a (maybe
> buggy---just wrote it) algorithm for finding Ramanujan numbers. It's
> essentially the same algorithm for both languages, although Scheme invites
> you to write in a more functional style (which involves more function
> calls, which shouldn't give Guile any advantage over Python performance
> wise).
>
> I did the following 5 times and took the median of the real time used:
>
> time guile -l ramanujan.scm -c '(ramanujan 20)'
> time python3 -c 'from ramanujan import *; ramanujan(20)'
>
> Results (s):
>
> guile-1.8: 7.03
> guile-2.9.1: 0.91
> python-3.5.3: 3.78
>
> Best regards,
> Mikael D.
>
> On Wed, Oct 10, 2018 at 11:32 AM Andy Wingo <wi...@pobox.com> wrote:
>
>> We are pleased to announce GNU Guile release 2.9.1.  This is the first
>> pre-release of what will eventually become the 3.0 release series.
>>
>> Compared to the current stable series (2.2.x), Guile 2.9.1 adds support
>> for just-in-time native code generation, speeding up all Guile programs.
>> See the NEWS extract at the end of the mail for full details.
>>
>> We encourage you to test this release and provide feedback to
>> guile-devel@gnu.org, and to file bugs by sending mail to
>> bug-gu...@gnu.org.
>>
>> 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, with
>> support for many SRFIs, packaged for use in a wide variety of
>> environments.  In addition to implementing the R5RS Scheme standard,
>> Guile includes a module system, full access to POSIX system calls,
>> networking support, multiple threads, dynamic linking, a foreign
>> function call interface, and powerful string processing.
>>
>> 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 2.9.1 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://alpha.gnu.org/gnu/guile/guile-2.9.1.tar.lz   (10.3MB)
>>   http://alpha.gnu.org/gnu/guile/guile-2.9.1.tar.xz   (12.3MB)
>>   http://alpha.gnu.org/gnu/guile/guile-2.9.1.tar.gz   (20.8MB)
>>
>> Here are the GPG detached signatures[*]:
>>   http://alpha.gnu.org/gnu/guile/guile-2.9.1.tar.lz.sig
>>   http://alpha.gnu.org/gnu/guile/guile-2.9.1.tar.xz.sig
>>   http://alpha.gnu.org/gnu/guile/guile-2.9.1.tar.gz.sig
>>
>> Use a mirror for higher download bandwidth:
>>   http://www.gnu.org/order/ftp.html
>>
>> Here are the SHA256 checksums:
>>
>>   9e1dc7ed34a5581e47dafb920276fbb12c9c318ba432d19cb970c01aa1ab3a09
>> guile-2.9.1.tar.gz
>>   f24e6778e3e45ea0691b591ad7e74fdd0040689915b09ae0e52bd2a80f8e2b33
>> guile-2.9.1.tar.lz
>>   01be24335d4208af3bbd0d3354d3bb66545f157959bb0c5a7cbb1a8bfd486a45
>> guile-2.9.1.tar.xz
>>
>> [*] 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.9.1.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.16.1
>>   Libtool 2.4.6
>>   Gnulib v0.1-1157-gb03f418
>>   Makeinfo 6.5
>>
>>
>> Changes in alpha 2.9.1 (since the stable 2.2 series):
>>
>> * Notable changes
>>
>> ** Just-in-time code generation
>>
>> Guile programs now run up to 4 times faster, relative to Guile 2.2,
>> thanks to just-in-time (JIT) native code generation.  Notably, this
>> brings the performance of "eval" as written in Scheme back to the level
>> of "eval" written in C, as in the days of Guile 1.8.
>>
>> See "Just-In-Time Native Code" in the manual, for more information.  JIT
>> compilation will be enabled automatically and transparently.  To disable
>> JIT compilation, configure Guile with `--enable-jit=no' or
>> `--disable-jit'.  The default is `--enable-jit=auto', which enables the
>> JIT if it is available.  See `./configure --help' for more.
>>
>> In this release, JIT compilation is enabled only on x86-64.  In future
>> prereleases support will be added for all architectures supported by GNU
>> lightning.  Intrepid users on other platforms can try passing
>> `--enable-jit=yes' to see the state of JIT on their platform.
>>
>> ** Lower-level bytecode
>>
>> Relative to the virtual machine in Guile 2.2, Guile's VM instruction set
>> is now more low-level.  This allows it to express more advanced
>> optimizations, for example type check elision or integer
>> devirtualization, and makes the task of JIT code generation easier.
>>
>> Note that this change can mean that for a given function, the
>> corresponding number of instructions in Guile 3.0 may be higher than
>> Guile 2.2, which can lead to slowdowns when the function is interpreted.
>> We hope that JIT compilation more than makes up for this slight
>> slowdown.
>>
>> ** By default, GOOPS classes are not redefinable
>>
>> It used to be that all GOOPS classes were redefinable, at least in
>> theory.  This facility was supported by an indirection in all "struct"
>> instances, even though only a subset of structs would need redefinition.
>> We wanted to remove this indirection, in order to speed up Guile
>> records, allow immutable Guile records to eventually be described by
>> classes, and allow for some optimizations in core GOOPS classes that
>> shouldn't be redefined anyway.
>>
>> Thus in GOOPS now there are classes that are redefinable and classes
>> that aren't.  By default, classes created with GOOPS are not
>> redefinable.  To make a class redefinable, it should be an instance of
>> `<redefinable-class>'.  See "Redefining a Class" in the manual for more
>> information.
>>
>> * New deprecations
>>
>> ** scm_t_uint8, etc deprecated in favor of C99 stdint.h
>>
>> It used to be that Guile defined its own `scm_t_uint8' because C99
>> `uint8_t' wasn't widely enough available.  Now Guile finally made the
>> change to use C99 types, both internally and in Guile's public headers.
>>
>> Note that this also applies to SCM_T_UINT8_MAX, SCM_T_INT8_MIN, for intN
>> and uintN for N in 8, 16, 32, and 64.  Guile also now uses ptrdiff_t
>> instead of scm_t_ptrdiff, and similarly for intmax_t, uintmax_t,
>> intptr_t, and uintptr_t.
>>
>> * Incompatible changes
>>
>> ** All deprecated code removed
>>
>> All code deprecated in Guile 2.2 has been removed.  See older NEWS, and
>> check that your programs can compile without linker warnings and run
>> without runtime warnings.  See "Deprecation" in the manual.
>>
>> In particular, the function `scm_generalized_vector_get_handle' which
>> was deprecated in 2.0.9 but remained in 2.2, has now finally been
>> removed. As a replacement, use `scm_array_get_handle' to get a handle
>> and `scm_array_handle_rank' to check the rank.
>>
>> ** Remove "self" field from vtables and "redefined" field from classes
>>
>> These fields were used as part of the machinery for class redefinition
>> and is no longer needed.
>>
>> ** VM hook manipulation simplified
>>
>> The low-level mechanism to instrument a running virtual machine for
>> debugging and tracing has been simplified.  See "VM Hooks" in the
>> manual, for more.
>>
>> * Changes to the distribution
>>
>> ** New effective version
>>
>> The "effective version" of Guile is now 3.0, which allows parallel
>> installation with other effective versions (for example, the older Guile
>> 2.2).  See "Parallel Installations" in the manual for full details.
>> Notably, the `pkg-config' file is now `guile-3.0'.
>>
>

Reply via email to