News

GNU Guile 2.9.1 beta released JIT native code generation to speed up all Guile programs

2 min read

GNU released Guile 2.9.1 beta of the extension language for the GNU project. It is the first pre-release leading up to the 3.0 release series.

In comparison to the current stable series, 2.2.x, Guile 2.9.1 brings support for just-in-time native code generation to speed up all Guile programs.

Just-in-time code generation in Guile 2.9

Relative to Guile 2.2, Guile programs now run up to 4 times faster. This is due to just-in-time (JIT) native code generation.

JIT compilation is enabled automatically in this release. To disable it, configure Guile with either `–enable-jit=no’ or `–disable-jit’. The default is `–enable-jit=auto’, which enables the JIT. JIT support is limited to x86-64 platforms currently. Eventually, it will expand to all architectures supported by GNU Lightning. Users on other platforms can try passing `–enable-jit=yes’ to see if JIT is available 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 expressing advanced optimizations, like type check elision or integer devirtualization, and makes JIT code generation easier.

This low-level change can mean that for a given function, the corresponding number of instructions in Guile 3.0 may be higher than Guile 2.2. This can lead to slowdowns when the function is interpreted.

GOOPS classes are not redefinable by default

All GOOPS classes were redefinable in theory if not practically. This was supported by an indirection (or dereference operator) in all “struct” instances. Even though only a subset of structs would need redefinition the indirection is removed to speed up Guile records. It also allows immutable Guile records to eventually be described by classes, and enables some optimizations in core GOOPS classes that shouldn’t be redefined.

In GOOPS, now there are classes that are both redefinable and not redefinable. The classes created with GOOPS by default are not redefinable. In order to make a class redefinable, it should be an instance of `<redefinable-class>’.

Also, scm_t_uint8, etc are deprecated in favor of C99 stdint.h.

This release does not offer any API or ABI stability guarantees. Stick to the stable 2.2 release if you want a stable working version.

You can read more in the release notes on the GNU website.

Read next

GNU nano 3.0 released with faster file reads, new shortcuts and usability improvements

GIMP gets $100K of the $400K donation made to GNOME

Fedora 29 beta brings Modularity, GNOME 3.30 support and other changes

Prasad Ramesh

Data science enthusiast. Cycling, music, food, movies. Likes FPS and strategy games.

Share
Published by
Prasad Ramesh

Recent Posts

Top life hacks for prepping for your IT certification exam

I remember deciding to pursue my first IT certification, the CompTIA A+. I had signed…

3 years ago

Learn Transformers for Natural Language Processing with Denis Rothman

Key takeaways The transformer architecture has proved to be revolutionary in outperforming the classical RNN…

3 years ago

Learning Essential Linux Commands for Navigating the Shell Effectively

Once we learn how to deploy an Ubuntu server, how to manage users, and how…

3 years ago

Clean Coding in Python with Mariano Anaya

Key-takeaways:   Clean code isn’t just a nice thing to have or a luxury in software projects; it's a necessity. If we…

3 years ago

Exploring Forms in Angular – types, benefits and differences   

While developing a web application, or setting dynamic pages and meta tags we need to deal with…

3 years ago

Gain Practical Expertise with the Latest Edition of Software Architecture with C# 9 and .NET 5

Software architecture is one of the most discussed topics in the software industry today, and…

3 years ago