# Gambit 4.9.3 => 4.9.4 Incomplete Changelog ## New Features ### Build Features - Update build script to autonf 2.69 - Updated config.{guess,sub} from automake 1.16.1 - Make little-endian the default - Add --enable-pic (default) and --disable-pic - Add ~~instlin - A lot if git Continuous Integration fixes - Improve makefile parallelism - Allow building without bignum/ratnum/cpxnum support (your mileage may vary) - Allow building with only u8- and u64 uniform vectors - Add --enable-march= and --enable-dynamic-clib configuration options - Enable the js target by default - Allow running unit tests with interpreter other than C target ### Systems Features - Add executable-path function - Use Unicode file names on Windows - Enable long path names - Add delete-file-or-directory - Add cond-expand support to define-library - Add replace? parameter to rename-file and add file-exists-exception - Fix incorrect space allocation report by time special form - Add read-file-as-string and read-file-as-u8vector - Add write-file-string, write-file-string-list, and write-file-u8vector ### Front end - Expand SIX notation - Allow c-declare and c-initialize wherever a define is permitted - Fix optimize-dead-local-variables declaration that was ignored in tail procedure call parameters - Add SIX operators async, await, instanceof, typeof, and yield - Add warning for definitions of global variables that are standardly bound ### Numerics - Give exact answers for (log (expt 2 k) (expt 2 m)) - Support -nan.0 syntax. - Have pow and atan2 follow IEEE standard - Improve log1p implementation when no C library implementation - Add flhypot, hypot to runtime system. - Inline flsinh, flcosh, flasinh, flacosh in C backend - Improve expansion of / on fixnums - Implement fl+* from SRFI 144 - Improve performance of fxlength and fxfirst-bit-set by 2x-4x using the C __builtin_ffs and __builtin_clrsb functions - Allow Karatsuba multiplication even when user-fast-bignum-allgorithms is #f - Add fast path for string->number for simple small decimal numbers - Add fast paths for int + ratnum and int * ratnum - More exact-int/ratnum operation fast paths, change 0/flonum - Add fast path for sqrt of simple ratnums with inexact result; add tests for correct rounding - Avoid some copies in bignum GCD - Add fast path for ##ratnum->flonum with fixnum numerator and denominator - Avoid modulo and quotient of power-of-two bignum digit sizes ### Non-numeric data structures - Implement char-foldcase, string-foldcase, digit-value - Update to Uniode 11.0 - Add fold-case and no-fold-case options to read environments. - Add optional separator parameter to append-strings, append-vectors, etc - Add string-upcase, string-downcase - Upgrade to Unicode 13.0 - Add append-reverse and list-sort - Upgrade character data to Unicode 14.0.0 and make string-upcase and string-downcase support full casing ### Interpreter - Add let-values, let*-values, letrec-values, letrec*-values, guard, r7rs-guard, define-values - Alias parameterize, reieve, cond-expand, this-source-file to system procedures. - Add -test and -no-test options - Autoloading of define-library, import, define-syntax, and syntax-rules - Add long option names min-heap=, max-heap=, live-ratio=, gambit, r5rs, r7rs, debug= - Reverse the search order so that ~~lib is searched before ~~userlib - Add ,h and ,(help) options - Add apropos procedure - Improve handling of character encoding runtime options and adopt UTF-8 as default ### Modules - Add HAMT module - Add make modules target - Add hamt-length, hamt-search - Add digest module - Add zlib module. - Add gambit/test module for writing tests - Add gambit/match pattern-matching module - Add Geiser module - Add git and pkg modules - Add modules gambit/http, gambit/uri and gambit/termite - Add scheme/r5rs module - Support versionned local modules - In a define-library, allow macros to be reexported - Create gambit/list, gambit/char and gambit/string libraries - Add gambit/random module - Use inline allocations for HAMT nodes - Finalize Modules chapter of documentation and improve module whitelist integration ### SRFIs - Add SRFIs 23 and 28 - Add SRFIs 0, 4, 6, 8, 9 - Fix SRFI 132 - Better conformance to SRFI 33 - Add SRFI 27 - Update SRFI 69 - Add SRFI 41 - Add SRFI 158 - Add SRFI 179 - Add soee SRFI 1 procedures - Add SRI 193 - Add SRFI 2 - Add SRFI 31 - Add SRFI 219 - Support SRFI 62 - Add SRFI 124 (Ephemerons) - Add reference implementations for SRFIs 1, 13, and 14 - Add SRFI 33 - Add SRFI 45 - Add SRFI 111 - Add SRFI 5 - Add bits, list->bits, bits->list, vector->bits, bits->vector from SRFI 151 - Add SRFI 19, 115, and 151 (last is incomplete) ### Universal back end - Many improvements - Universal backend: add -compactness gsc option to control compactness of generated code - Universal backend: implement delete-file, delete-directory, rename-file, directory-files, create-directory - Universal backend: implement a base92 compression of Unicode tables and other integer arrays - Universal backend: implement conversion between flonums and IEEE-754 representation ### Back ends (mainly C) - Add go target to universal backend - Add x86/x64 backend - Add arm/arn64 backend - Improve RISC-V backend - Universal backend: make generated JS work in nodejs and browser - Use gcc __builtin_setjmp when available - Add arm64 CPU type to support Apple M1 build type. - Use C tail calls to implement a distributed trampoline, possibly eliminating the centralized trampoline when the C compiler garantees tail calls, such as with clang 13 "musttail" attribute - Improve speed of fxquotient, fxremainder, and fxmodulo when arguments fit in 32 bits - Add --enable-trust-c-tco to speed up intermodule jumps when C compilers does TCO properly (autodetected for clang, need >= version 10 for gcc) - Improve write-substring and handling of newline by C inlined read-char and write-char - Optionally avoid C compiler builtins - Avoid _GNU_SOURCE redefinition in C backend - Inline allocation of string- and vector-like objects - Add safe inlining of symbol->string - Safe inlining of write-char, read-char and peek-char - Safe inlining of make-vector, make-string, make-u8vector, etc ### Internal changes - Add lib/_prim#.scm that maps + to ##+, sqrt to ##sqrt, etc for all predefined procedures with a ## unsafe variant that accepts the same number of arguments - Improve expansion of primitives in compiler - Add define-procedure, define-primitive, define-prim&proc, primitive, and declare-safe-define-procedure special forms to simplify writing procedures that correctly process their parameters (auto-forcing, type checking, tail calling when exceptions raised) - Precompute (- ##min-fixnum) - Improve readtable chartable representation ###Fixes - Fix implementation of equal? - Fix IPV6 support ### Miacellaneous changes - Implement and improve contrib/try for try.scheme.org - Make macro-exact-int-dispatch known to gambit.el - Disable block comment handling in misc/gambit.el