mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-24 12:35:05 +02:00
Update CHANGELOG.md
This commit is contained in:
parent
75e608b77f
commit
aeeecabe75
1 changed files with 7 additions and 5 deletions
12
CHANGELOG.md
12
CHANGELOG.md
|
@ -2,14 +2,16 @@
|
||||||
|
|
||||||
## 0.14 - TBD
|
## 0.14 - TBD
|
||||||
|
|
||||||
This release fixes a long-standing issue where a mutation (via `set-car!`, `vector-set!`, `set!`, etc) could allow a global object on the heap to reference objects on a thread's local stack. This is problematic because threads periodically relocate objects from their stack, and for performance reasons these objects are moved without any coordination between threads. Thus it is critical that objects on the stack are only used by the thread that owns them.
|
Cyclone now automatically relocates any stack objects when performing a mutation. This prevents a whole range of race conditions that had previously been possible in multithreaded application code. And, since this work is done by the Cyclone runtime, no special code needs to be added to your applications.
|
||||||
|
|
||||||
In the past we provided functions such as `make-shared` that could be called from application code to guarantee safety. However, this approach is error-prone and asks too much of anyone using Cyclone for multithreaded development. The proper solution is for Cyclone to avoid this situation in the first place.
|
|
||||||
|
|
||||||
To that end Cyclone now automatically relocates any stack objects when performing a mutation. This prevents a whole range of race conditions that had previously been possible in application code. And since this work is being done by the Cyclone runtime, no special code needs to be added to your applications.
|
|
||||||
|
|
||||||
Special thanks to Daniel Mendler, whose discussions were the inspiration for these changes.
|
Special thanks to Daniel Mendler, whose discussions were the inspiration for these changes.
|
||||||
|
|
||||||
|
Some background:
|
||||||
|
|
||||||
|
There was a long-standing issue where a mutation (via `set-car!`, `vector-set!`, `set!`, etc) could allow a global object on the heap to reference objects on a thread's local stack. This is problematic because threads periodically relocate objects from their stack, and for performance reasons these objects are moved without any coordination between threads. Thus it is critical that objects on the stack are only used by the thread that owns them.
|
||||||
|
|
||||||
|
In the past we provided functions such as `make-shared` that could be called from application code to guarantee safety. However, this approach is error-prone and asks too much of anyone using Cyclone for multithreaded development. The proper solution is for Cyclone to avoid this situation in the first place.
|
||||||
|
|
||||||
Other Features
|
Other Features
|
||||||
|
|
||||||
- Added `CYC_HIGH_RES_TIMERS` to the runtime code to allow logging of timer information for the GC. Note this can be passed to the C compiler via the `-D` option.
|
- Added `CYC_HIGH_RES_TIMERS` to the runtime code to allow logging of timer information for the GC. Note this can be passed to the C compiler via the `-D` option.
|
||||||
|
|
Loading…
Add table
Reference in a new issue