Published release GNU Guile 3.0.10a free implementation of a functional programming language Scheme, which supports the ability to embed code into applications in other programming languages. Guile can be used as a language to develop application extensions, define configuration, or develop components to connect the various primitives provided by the application. Guile is the official extension development language for the GNU operating system.
Guile is based on a virtual machine that executes a portable set of instructions generated by a special optimizing compiler. The Guile virtual machine easily integrates with application code in C and C++. In addition to the Scheme language, for which specification support is implemented R5RS, R6RS And R7RS, the Guile project has developed compilers for other languages, such as ECMAScript, Emacs Lisp and Lua (under development). The package includes a library of modules that implement standard service functions, such as working with the HTTP protocol, XML parsing and the use of object-oriented programming methods.
Among the changes in the new release:
- An experimental interface for using third-party backends has been implemented. Developers are given the opportunity to use the existing frontend, which converts source code into internal representation, and the Guile optimizer along with other backends that perform code generation.
- External backend introduced hoot to generate WebAssembly intermediate code that can be executed in the browser. In the future, it is possible that WebAssembly will be included among the main supported compilation targets in Guile.
- The use of “define” in the context of “when”, “unless”, “cond”, “case”, “and-let*” and “with-fluids” expressions is permitted.
- Added mechanism support custom portsdescribed in the dialect of the Scheme language R6RS and allowing you to connect handlers to transform data (for example, compression/decompression or changing character encoding) processed in functions such as read, write and display. Guile also offers a module “(ice-9 soft-ports)”, which provides a “soft port” interface, which is positioned as a simpler analogue of “custom ports”.
- Added support for simplified syntax wispallowing you to write more readable code, for example:
define : factorial n if : zero? n . 1 * n : factorial (- n 1) display : factorial 5 newline вместо (define (factorial n) (if (zero? n) 1 (* n (factorial (- n 1))))) (display (factorial 5)) (newline)
- The compiler has implemented a new warning that is issued when modules whose functions are not used are imported into the code.
- Added a new annotation “maybe-unused” that suppresses warnings about unused procedures.
- Call stack trace output is now clipped at 500 characters rather than 80 (can be changed via default-frame-width).
- The “#:copy-on-write” parameter has been added to the “copy-file” procedure, allowing the use of the copy-on-write on file systems that support it.
- Added optimization to ensure inline expansion of procedure calls with keyword arguments.
Thanks for reading: