mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-24 04:25:06 +02:00
When allocating vectors directly on the heap, use write barrier to ensure fill is moved to heap. This prevents the possibility of fill being corrupted.
183 lines
9.1 KiB
Markdown
183 lines
9.1 KiB
Markdown
# Changelog
|
|
|
|
## 0.5.1 - TBD
|
|
|
|
- Prevent potential memory corruption when working with large vectors that cannot be allocated on the stack.
|
|
|
|
## 0.5 - April 14, 2017
|
|
|
|
Features
|
|
|
|
- Cyclone now has support in the interpreter for loading libraries via `import`. This is probably the most important change in this release and allows `icyc` to be used to its full potential.
|
|
- Store parameter objects in such a way that changes to a parameter object do not affect other threads that use the same parameter object.
|
|
|
|
The specific requirement from R<sup>7</sup>RS is:
|
|
|
|
> `parameterize` must not change the associated values of any parameters in any thread other than the current thread and threads created inside the `parameterize` body.
|
|
|
|
- Added bignum support to SRFI 60 - integers as bits.
|
|
- Normalize the result of `string->number` such that bignums are only returned if the result truly is a bignum.
|
|
- Allow Cyclone to find `(cyclone)` prefixed libraries installed in Cyclone's system folder.
|
|
- Allow a library to export identifiers that are exported by another library. Previously a library could only export identifiers that it defined directly.
|
|
- Raise an error if an unknown identifier is found in a library's `export` list.
|
|
- Aric Belsito removed a hardcoded call to `cyclone` from the Makefile when building `generate-c`. Thanks!
|
|
- Allow `cyclone` to inline character comparison functions (`char=?`, etc) when only two arguments are present, for a significant speed improvement.
|
|
|
|
Bug Fixes
|
|
|
|
- Prevent exception handlers from being accidentally collected when the collector cooperates on behalf of a mutator.
|
|
- Fixed a regression where `string->number` returns `0` on bad input instead of `#f`.
|
|
|
|
## 0.4 - March 9, 2017
|
|
|
|
- Added a new bignum type to support exact integers of practically unlimited size.
|
|
- As part of the bignum changes, modified the code for exact integer arithmetic to detect overflow.
|
|
- Added documentation for the [C API](http://justinethier.github.io/cyclone/c-api/modules.html).
|
|
|
|
## 0.3.4 - February 10, 2017
|
|
|
|
Features
|
|
|
|
- Koz Ross added implementations of the following SRFI's:
|
|
|
|
- SRFI 28 - Basic format strings
|
|
- SRFI 60 - Integers as bits
|
|
- SRFI 121 - Generators
|
|
|
|
- Allow a program to have more than one `import` declaration. A program can now also use `cond-expand` to selectively expand `import` declarations.
|
|
- Added the `-A` and `-I` compiler options from SRFI 138 to `cyclone`:
|
|
|
|
> `-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.
|
|
|
|
- Added the `-CP`, `-CE`, and `-CL` compiler options to allow passing arbitrary flags to the C compiler:
|
|
|
|
> `-CP cc-commands`
|
|
>
|
|
> Specify a custom command line for the C compiler to compile a program module. See Makefile.config for an example of how to construct such a command line.
|
|
>
|
|
> `-CE cc-commands`
|
|
>
|
|
> Specify a custom command line for the C compiler to compile an executable.
|
|
>
|
|
> `-CL cc-commands`
|
|
>
|
|
> Specify a custom command line for the C compiler to compile a library module.
|
|
|
|
- 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` and `write`.
|
|
- Removed the `make_int` C macro which was deprecated and could cause problems when used in FFI functions.
|
|
- Added a `with-handler` exception handler form based on the syntax from Bigloo.
|
|
|
|
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 via `write`.
|
|
- Thanks to Seth Alves, removed unnecessary include of `ck_string.h` which is not provided in older versions of `libck`.
|
|
|
|
## 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` and `include-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` and `AI_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`, and `memv` back to primitives for improved performance. In addition the compiler was modified to allow for more efficient compilation of `assoc` and `member`.
|
|
- Improved library support to recognize all of the import set forms: `only`, `except`, `prefix`, and `rename`.
|
|
- Allow explicit renaming macros to be declared interactively. This is the first limited support for calling `define-syntax` from `eval`.
|
|
- 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 using `write` 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` and ` let*-values` to `(scheme base)`.
|
|
- Added `infinite?`, `finite?`, and `nan?` to `(scheme inexact)`.
|
|
- Added string ports to `(scheme base)` - `open-input-string`, `open-output-string`, and `get-output-string`.
|
|
- Added bytevector ports to `(scheme base)` - `get-output-bytevector`, `open-input-bytevector`, and `open-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` and `display`.
|
|
- 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` and `member` 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`, and `export` sections.
|