memory and CPU time for certain input. Provide a variable
(CLANG_NO_VALUE_PROPAGATION_PASS) for selectively disabling it in those
places known to trigger it.
This changes the buildlink3.mk files to use an include guard for the
recursive include. The use of BUILDLINK_DEPTH, BUILDLINK_DEPENDS,
BUILDLINK_PACKAGES and BUILDLINK_ORDER is handled by a single new
variable BUILDLINK_TREE. Each buildlink3.mk file adds a pair of
enter/exit marker, which can be used to reconstruct the tree and
to determine first level includes. Avoiding := for large variables
(BUILDLINK_ORDER) speeds up parse time as += has linear complexity.
The include guard reduces system time by avoiding reading files over and
over again. For complex packages this reduces both %user and %sys time to
half of the former time.
- Fixed infinite loop when a character is output to a port
whose character encoding does not support the character (e.g. (display
(integer->char 1000)) when character encoding is ISO-8859-1).
- Added procedures to extract the threads and thread
groups contained in a thread group (thread-group->thread-list,
thread-group->thread-vector, thread-group->thread-group-list,
thread-group->thread-group-vector).
- Renamed open-process' show-window: setting to the more
reasonable show-console: since it controls the visibility of the
console.
- Added readtable-max-unescaped-char and
readtable-max-unescaped-char-set which control the external syntax of
characters in symbol, string and character objects written with the
write and pretty-print procedures.
- Added tcp-server-socket-info to get the IP address and
port-number of a tcp-server-port (useful when the server port was
created with a kernel assigned port-number, i.e. setting port-number:
0).
- Fixed incorrect calls to ___P macro in lib/*.c, and added
lib/check___P script to automatically detect such calls (script
contributed by Derek Peschel).
- Added a "terminate" interrupt which terminates the Gambit
process cleanly (all the exit jobs are executed before exiting). On
Unix this interrupt is raised by the SIGTERM signal so a "kill 1234"
where 1234 is the pid of the Gambit process will terminate the process.
On Windows the interrupt occurs when the console window is closed or
the system is shutting down (however currently the system hangs while
executing the exit jobs).
- Fixed handling of incomplete characters at end-of-file,
which are now handled like illegal characters (error signaled unless
char-encoding-errors setting is set to #f).
- Fixed recently introduced bug in handling of end-of-line
encoding.
- Added escaping of non-graphical characters in symbols:
(string->symbol (string (integer->char 255))) gives |\377| .
- Protect gcc extension _builtin_expect with GCC version >= 3
because old gcc versions (up to 2.95.3 it seems) did not have that
extension.
- Added char-encoding-errors: setting to open-file to
enable/disable character encoding error checking, and -:fr and -:fR
runtime options to select the default setting for file I/O (on/off).
- Removed non-ASCII characters from lib/_num.scm .
- Fixed error introduced with end-of-line encoding of the history
file.
- Changed end-of-line encoding from lf to cr-lf when reading
source code. This makes the load procedure and the compiler more lenient
when reading source code with non-Unix-style end-of-line encoding. This
means that source code with a string containing a CR/LF sequence will
construct a string with a single #\newline character (previously both$
#\return and #\newline were put in the string).
- Fixed compiler crash when compiling files containing the forms
#123, #, ##, etc (file location information was not properly attached to
expression)
- Improve error messages produced by the C compiler when it
compiles a file generated by a different version of the Gambit compiler.
Blurb:
Gambit-C includes a Scheme interpreter and a Scheme compiler which can
be used to build standalone executables. Because the compiler generates
portable C code it is fairly easy to port to any platform with a decent
C compiler.
The Gambit-C system conforms to the R4RS, R5RS and IEEE Scheme standards.
The full numeric tower is implemented, including: infinite precision
integers (bignums), rationals, inexact reals (floating point numbers),
and complex numbers. Gambit-C supports a number of extensions to the
standards including (non-exhaustively):
- an optimizing compiler
- with several powerful transformations (automatic function inlining,
partial evaluation, etc)
- that generates properly tail-recursive portable C code
- a scalable thread system that can handle millions of concurrent threads
- an I/O system fully integrated with the thread system that supports
regular files, ttys, sockets (client and server, with TCP or UDP),
directories, processes, and pipes
- an infix syntax extension (SIX) that allows mixing code in the
standard prefix syntax with code in a C-like syntax
- SRFIs 0, 4, 6, 8, 9, 18, 21, 22, 23, 27, 39
- a REPL/debugger with
- a continuation inspection facility (i.e. "backtrace")
- a single-stepping mode
- error messages with location of error (file, line, and column number)
- emacs compatible line-editing with history
- very efficient bignum implementation
- a foreign function interface for C
- a memory management system that grows and shrinks the heap based on
the program's needs
- a linker that builds standalone executables and shared libraries
- dynamic loading of compiled modules and libraries (supported on many
platforms)
- Unicode support for characters, strings, I/O and source code
- object finalization, pretty printing, keyword objects optional and
keyword parameters (with the syntax and semantics of DSSSL)
- configurable reader with control over case sensitivity
- write/read invariance of symbols, e.g. (string->symbol "B;123") => |B;123|
- write/read invariance of floating point numbers
- unhygienic macros and more!