[gambit-list] A proto-changelog in markdown format for the 4.9.3 -> 4.9.4 transition

Bradley Lucier lucier at math.purdue.edu
Tue Feb 8 20:44:30 EST 2022


It's the first time I've done something like this, so just consider it 
as a start, something to add to and reorganize. There were many things 
added to Gambit between 4.9.3 and 4.9.4 that I did not understand, and 
probably a lot of those things didn't get added to my proto-changelog.

Brad
-------------- next part --------------
# 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 


More information about the Gambit-list mailing list