6.5 KiB
Next Release (Tentatively 0.3.4) - TBD
Features
-
Koz Ross added implementations of SRFI 28 and 60.
-
Allow a program to have more than one
import
declaration. A program can now also usecond-expand
to selectively expandimport
declarations. -
Added the
-A
and-I
compiler options from SRFI 138 tocyclone
:-A directory
Append directory to the list of directories that are searched in order to locate imported libraries.
-I directory
Prepend directory to the list of directories that are searched in order to locate imported libraries.
-
Updated the garbage collector to enhance performance for programs with a high allocation rate, and to scale better to multiple concurrent threads.
-
Improved error handling by
display
andwrite
. -
Removed the
make_int
C macro which was deprecated and could cause problems when used in FFI functions.
Bug Fixes
- Thanks to Koz Ross,
equal?
has been updated to check bytevectors for deep equality. - Prevent crashes when allocating large bytevectors.
- Display characters such as
#\space
correctly when output viawrite
. - Thanks to Seth Alves, removed unnecessary include of
ck_string.h
which is not provided in older versions oflibck
.
0.3.3 - December 19, 2016
Features:
- Added SRFI 113 - sets and bags.
- Improved performance by more aggressively inlining primitives that work with immutable objects, such as the numeric arithmetic and comparison functions.
- Allow the reader to recognize
#true
and#false
.
Bug Fixes
- Prevent C compilation errors when compiling strings with special characters in them such as
#\tab
,#\alarm
, and#\return
. - Do not generate invalid C code when compiling
+
or*
without any arguments. - Handle compilation of variable-argument anonymous lambdas. For example:
((lambda x x) 3 5)
.
0.3.2 - November 22, 2016
Features:
- Recognize escaped vertical line and hex scalar value characters when reading a string.
- Added
current-thread
to SRFI 18. - Added the
include
andinclude-ci
macros.
Bug Fixes
- Fixed a crash when running
cyclone
on 32-bit platforms.
0.3.1 - November 20, 2016
Features:
- Thanks to ecraven, added R7RS function
exact-integer-sqrt
to(scheme base)
. - Allow the reader to recognize
+inf.0
,-inf.0
,+nan.0
, and-nan.0
. - Allow
cond-expand
to test for whether a library exists using the form(library {library name})
. - Added command line option
-O
to set the optimization level. For now there is-O0
to disable optimizations and the default setting to enable them. Going forward there will be more fine-grained control. - Reduce size of compiled code by inlining constant values. This reduced the code size of various cyclone libraries by approximately 33%. Added other inlining as well to slightly improve performance.
- Increased allocation speed when objects are moved to the heap during a major GC.
Bug Fixes
- Only throw a divide by zero error for integer division. Floating point divide by zero is allowed and evaluates to
nan
. - Modified SRFI 106 to be smarter about compiling
AI_V4MAPPED
andAI_ALL
, which are not defined on OpenBSD. - Fixed the
member
functions to always return the list when a value is found, instead of#t
. - Fixed
string->number
to return#f
if the string cannot be converted. - Fixed a bug where the optimizer would sometimes generate incorrect code when a mutating primitive (EG:
set-car!
) was passed an expression rather than an identifier as the variable argument. - Prevent the runtime from crashing when a non-numeric value type is passed to a numeric function.
0.3 - October 22, 2016
Features:
-
Improve performance by inlining numeric arithmetic and comparison operations.
-
Reverted
assq
,assv
,memq
, andmemv
back to primitives for improved performance. In addition the compiler was modified to allow for more efficient compilation ofassoc
andmember
. -
Improved library support to recognize all of the import set forms:
only
,except
,prefix
, andrename
. -
Allow explicit renaming macros to be declared interactively. This is the first limited support for calling
define-syntax
fromeval
. -
Added the
get-environment-variables
function from R7RS. -
Added support for the following SRFI's:
- SRFI 106: A basic socket interface
- SRFI 128: Comparators
Bug Fixes
- Improved macro hygiene support to properly rename temporary variables in the
let-values
macro. - Improve output of
error
by usingwrite
to output objects as they are represented in memory. - Check for duplicate lambda parameters during compilation.
- Fixed an error that was being raised when calling
(random-source-randomize! default-random-source)
when using SRFI 27. - Raise an error if
list->string
encounters a list element that is not a character.
0.2 - September 7, 2016
Features:
- Added the following libraries from R7RS-large red edition (data structures):
- SRFI 1 list library
- SRFI 133 vector library
- SRFI 111 boxes
- SRFI 117 mutable queues
- SRFI 132 sorting library
- Added SRFI 2,
and-let*
- Added
parameterize
from section 4.2.6 of R7RS to the(scheme base)
library. - Added
let-values
andlet*-values
to(scheme base)
. - Added
infinite?
,finite?
, andnan?
to(scheme inexact)
. - Added string ports to
(scheme base)
-open-input-string
,open-output-string
, andget-output-string
. - Added bytevector ports to
(scheme base)
-get-output-bytevector
,open-input-bytevector
, andopen-output-bytevector
. - Modified
cyclone
to also search the current working directory for built-in headers and libraries.
Bug Fixes:
-
Thanks to Mark Meyer, identified and fixed several segfaults in
write
anddisplay
. -
Updated
write
to display escaped character sequences (EG:\t
) instead of literal characters. -
Prevent C compilation errors when building a program that only contains basic primitives or a constant at the top level.
-
Fixed the compiler to allow application of a function that can take any number of arguments. For example:
((lambda test (write test)) 1 2 3 4)
-
Updated
eval
to handle functions that take an optional number of arguments. -
Updated
number->string
to omit leading zeros for binary conversions. -
Fixed
apply
to use the proper semantics when receiving more than one data argument. -
Changed the
assoc
andmember
functions to accept an optional comparison function, and modified both families of functions to be native Scheme functions instead of C primitives. -
Allow libraries to contain multiple
import
,begin
, andexport
sections.