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