-
Notifications
You must be signed in to change notification settings - Fork 100
Expand file tree
/
Copy pathCHANGELOG
More file actions
367 lines (220 loc) · 13.1 KB
/
Copy pathCHANGELOG
File metadata and controls
367 lines (220 loc) · 13.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
- 0.22.1 - 27-08-2026
- Fix building with Clang 22+ and big-endian bigint serialization by making bigint serialization byte-oriented instead of relying on native `uint64_t`/`unsigned long` representations
- Fix Ruby integers at or above 512 bits being silently truncated when passed to JavaScript, and large JavaScript bigints producing an invalid internal value when returned to Ruby
- Support Ruby and JavaScript bigints up to a 16 MiB magnitude, using allocation-free conversion for common sizes and bounded dynamic storage for larger values
- 0.22.0 - 12-08-2026
- Add `Context#call_await` and `Context#eval_await`: like `call`/`eval` but block until a returned Promise settles and return the settled value; rejections raise `MiniRacer::RuntimeError`
- Fix a `call` or `eval` made from a Ruby callback taking the timeout or `stop` meant for the evaluation around it, which then kept running
- Fix a timeout that fires just after its own evaluation ends, where it would stop the next evaluation instead
- Fix a race introduced in 0.21.4 where a request sent right after a nested dispatch (e.g. `perform_microtask_checkpoint` or a nested `call` from an attached callback) could be dropped, deadlocking the context
- 0.21.4 - 24-06-2026
- Fix stale V8 termination state after interrupts/timeouts so contexts remain usable after cancelled evaluations
- Let Ruby interrupts wake MiniRacer calls without immediately terminating V8, allowing signal traps and nested callbacks to unwind safely
- Add benchmark suite covering eval, serialization/deserialization, and transpilation workloads
- 0.21.3 - 18-06-2026
- Fix `:single_threaded` contexts inherited across `fork` by recovering idle reusable native runners in the child process without falling back to per-dispatch native thread spawning
- Avoid intermittent heap corruption during `:single_threaded` context finalization, especially when forked children exit normally after touching inherited contexts
- Avoid finalizer hangs when a forked child garbage-collects a non-idle inherited `:single_threaded` context
- Allow Ruby thread interrupts, process shutdown, and cross-thread `Context#dispose` to terminate busy `:single_threaded` JavaScript execution instead of hanging
- Make `Context#dispose` while an attached Ruby callback is active either terminate safely or raise instead of deadlocking
- 0.21.2 - 11-06-2026
- Add `Context#perform_microtask_checkpoint` to synchronously drain the V8 microtask queue, useful for spec-compliant `dispatchEvent` sequencing inside Ruby callbacks
- Fix native memory leaks in `Context#heap_snapshot`/`Context#write_heap_snapshot`; thanks to Pranjali Thakur from depthfirst.com
- Fix large integral JavaScript numbers wrapping to negative Ruby integers; thanks to Pranjali Thakur from depthfirst.com
- Fix Ruby callback exceptions with embedded NUL bytes permanently deadlocking a context; thanks to Pranjali Thakur from depthfirst.com
- Preserve embedded NUL bytes in JavaScript exception messages and attached function names, and reject unsafe V8 flags containing NUL bytes or overly long values
- 0.21.1 - 25-05-2026
- Run `:single_threaded` V8 dispatches on a reusable mini_racer-owned native thread so V8 does not execute on Ruby-owned threads
- Stop and join the reusable `:single_threaded` runner when contexts are disposed
- Document `:single_threaded` fork-safety requirements for pre-fork contexts
- 0.21.0 - 16-04-2026
- Add MiniRacer::Binary for returning Uint8Array to JavaScript from attached Ruby callbacks
- 0.20.0 - 24-02-2026
- Add Snapshot.load to restore snapshots from binary data, enabling disk persistence
- 0.19.2 - 24-12-2025
- upgrade to node 24.12.0
- 0.19.1 - 20-10-2025
- JS code can now catch ruby exceptions - Ben Noordhuis
- Retain string encoding when raising exceptions - Ben Noordhuis
- Fix object identity bug with Ruby to JS conversion - Benjamin Wood
- 0.19.0 - 24-06-2025
- upgrade to node 24.1.0
- 0.18.1 - 03-04-2025
- Convert round doubles to fixnum for very big floats - this has better parity with JavaScript - Ben Noorhuis
- 0.18.0 - 05-03-2025
- Time for a major release
- Handle ActiveSupport TimeWithZone objects during serialization - Sam Saffron
- 0.18.0.pre1 - 06-02-2025
- Updated to node 23.6.1.0
- 0.17.0.pre13 - 04-02-2025
- Only issue idle GC once post dispatch - reduces CPU usage for auto cleanup - Sam Saffron
- 0.17.0.pre12 - 23-01-2025
- Corrected off-by-one error with object serialization - Ben Noordhuis
- 0.17.0.pre11 - 21-01-2025
- Corrected encoding bug with deserialization of strings - Ben Noordhuis
- 0.17.0.pre10 - 20-01-2025
- Added back support for partially deserialized objects (objects that do not translate across boundaries are returned as Error properties) - Ben Noordhuis
- 0.17.0.pre9 - 13-01-2025
- For backwards compatibility convert v8 return values to UTF-8 (invalidly encoded string still get returned using V8 encoding)
- 0.17.0.pre8 - 11-01-2025
- Fix handling of UTF 32 LE and Ascii encoding strings - Ben Noordhuis
- Handle rare edge case in V8 serialization - Ben Noordhuis
- 0.17.0.pre7 - 10-01-2025
- Objects containing non serializable properties will return an Error object vs raising an exception. Ben Noordhuis
- Truffle support was added back Eregon
- 0.17.0.pre6 - 08-01-2025
- Moved all mini_racer interaction with v8 to a dedicated native thread to avoid cross VM stack contamination. Ben Noordhuis
- 0.17.0.pre5 - 30-09-2024
- Handle segfault from JSON.stringify
- Fix segfaults around symbol conversion
- Fix crash on invalid date object
- 0.17.0.pre4 - 18-09-2024
- Attempt to change compilation flags to disable strict aliasing to see if it resolves stability issues
- 0.17.0.pre3 - 15-09-2024
- Text clang based Linux v8 build, in case there is an edge case with GCC compilation
- 0.17.0.pre2 - 09-09-2024
- Test build to see if disabling Maglev optimisations resolves segfault issues
- 0.17.0.pre - 05-09-2024
- Test build to see if disabling concurrent GC marking resolves segfault
- 0.16.0 - 05-09-2024
- Sadly still seeing segfaults, reverted back 18.19.0.0
- 0.15.0 - 05-09-2024
- Use libv8-node 22.7.0 - this corrects issues with multithreaded behavior and forking in single threaded mode.
- 0.14.1 - 14-08-2024
- No longer use mini_racer_loader if LD_PRELOAD is defined and adds a malloc provider. This resolves segfaults when people LD_PRELOAD jemalloc or tcmalloc.
- 0.14.0 - 06-08-2024
- Node 22.5.1.0 is not stable in production, reverting to last known good build
- 0.13.0 - 29-07-2024
- Target Node to 22.5.1.0 0 - corrects segfault in earlier release
- Remove Ruby 3.0 which is EOL (use ealier version of gem if needed)
- 0.9.0 - 25-03-2024
- Target Node to 18.19.0.0
- 0.8.0 - 29-05-2023
- Target Node to 18.16.0.0
- Drop supporting EOL'd Ruby 2.7
- 0.7.0 - 26-05-2023
- Target Node to 17.9.1.0
- 0.6.4 - 25-05-2022
- Target Node 16.19.0.0
- 0.6.3 - 16-08-2022
- Truffle ruby support! Thanks to Brandon Fish and the truffle team
- Hide libv8 symbols on ELF targets
- Slightly shrunk binary size
- Simplified timeout implementation
- Some stability fixes
- 17-01-2022 - 0.6.2
- Fix support for compilation on 2.6, llvm compiles
- Stability patches to handle rare memory leaks
- Corrected re-raising of exceptions to support strings
- During early termination of context under certain conditions MiniRacer could crash
- 0.6.1 - 31-12-2021
- Added support for single threaded platform: `MiniRacer::Platform.set_flags! :single_threaded`
must be called prior to booting ANY MiniRacer::Context
- 0.6.0 - 11-04-2021
- Ruby 3.1 support
- Fixes memory leak in heap snapshotting
- Improved compilation ergonomics in clang
- Migrated internal storage in c extension to TypedData
- 0.5.0
- Fixes issues on aarch (Apple M1)
- Update to use libv8-node 16.x (#210) [Loic Nageleisen]
- FEATURE: Configurable max marshal stack depth (#202) [seanmakesgames]
- Ruby 2.3 and 2.4 are EOL, we no longer support them
- 0.4.0 - 08-04-2021
- FEATURE: upgrade to libv8 node 15.14.0 (v8 8.6.395.17)
- Promote 0.4.0.beta1 to release, using libv8-node release path
- 0.4.0.beta1 - 23-07-2020
- FIX: on downgrade mkmf was picking the wrong version of libv8, this fix will correct future issues
- FEATURE: upgraded libv8 to use node libv8 build which supports M1 and various ARM builds v8 moved to (8.6.395.17)
- 0.3.1 - 22-07-2020
- FIX: specify that libv8 must be larger than 8.4.255 but smaller than 8.5, this avoids issues going forward
- 0.3.0 - 29-06-2020
- FEATURE: upgraded to libv8 version 8.4.255.0
- 0.2.15 - 15-05-2020
- FEATURE: basic wasm support via pump_message_loop
- 0.2.14 - 15-05-2020
- FIX: ensure_gc_after_idle should take in milliseconds like the rest of the APIs not seconds
- FEATURE: strict params on MiniRacer::Context.new
- 0.2.13 - 15-05-2020
- FIX: edge case around ensure_gc_after_idle possibly firing when context is not idle
- 0.2.12 - 14-05-2020
- FEATURE: isolate.low_memory_notification which can force a full GC
- FEATURE: MiniRacer::Context.new(ensure_gc_after_idle: 2) - to force full GC 2 seconds after context is idle, this allows you to conserve memory on isolates
- 0.2.11
- FIX: dumping heap snapshots was not flushing the file leading to corrupt snapshots
- FIX: a use-after-free shutdown crash
- 0.2.10 - 22-04-2020
- FEATURE: memory softlimit support for nogvl_context_call
- 0.2.9 - 09-01-2020
- FIX: correct segfault when JS returns a Symbol and properly cast to ruby symbol
- 0.2.8 - 11-11-2019
- FIX: ensure thread live cycle is properly accounter for following file descriptor fix
- 0.2.7 - 11-11-2019
- FIX: release the file descriptor for timeout pipe earlier (this avoids holding too many files open in Ruby 2.7)
- 0.2.6 - 14-05-2019
- FEATURE: add support for write_heap_snapshot which helps you analyze memory
- 0.2.5 - 25-04-2019
- FIX: Compatibility fixes for V8 7 and above @ignisf
- FIX: Memory leak in gc_callback @messense
- IMPROVEMENT: Added example of sourcemap support @ianks
- URGENT: you will need this release for latest version of libv8 to work
- 0.2.4 - 02-11-2018
- FIX: deadlock releasing context when shared isolates are used
- FEATURE: include js backtrace when snapshots do not compile
- 0.2.3 - 28-09-2018
- Drop all conditional logic from Mini Racer compilation for clang, always
rely on MacOS being High Sierra or up
- 0.2.2 - 26-09-2018
- WORKAROUND: RUBY_PLATFORM is hardcoded on Ruby compile and can not be
trusted for feature detection, use a different technique when checking for
macOS Mojave
- 0.2.1 - 25-09-2018
- FEATURE: Mojave macOS support
- 0.2.0 - 06-07-2018
- FEATURE: context#call to allow for cheaper invocation of functions
- FIX: rare memory leak when terminating a long running attached function
- FIX: rare segfault when terminating a long running attached function
- FIX: Reimplement Isolate#idle_notification using idle_notification_deadline, API remains the same @ignisf
- Account for changes in the upstream V8 API @ignisf
- Support for libv8 6.7
- 0.1.15 - 23-08-2017
- bump dependency of libv8 to 6.3
- 0.1.14 - 23-08-2017
- libv8 erroneously bumped to beta, reverted change
- 0.1.13 - 23-08-2017
- Fix: amend array buffer allocator to use v8 6.0 compatible allocator @ignisf
- 0.1.12 - 18-07-2017
- Feature: upgrade libv8 to 5.9
- Fix: warning when running with ruby warnings enabled (missed @disposed initialize)
- 0.1.11 - 18-07-2017
- Feature: upgrade libv8 to 5.7
- 0.1.10 - 13-07-2017
- Fix leak: memory leak when disposing a context (20 bytes per context)
- Feature: added #heap_stats so you can get visibility from context to actual memory usage of isolate
- Feature: added #dispose so you reclaim all v8 memory right away as opposed to waiting for GC
- Feature: you can now specify filename in an eval eg: eval('a = 1', filename: 'my_awesome.js')
- 0.1.9 - 09-03-2017
- Perf: speed up ruby/node boundary performance when moving large objects
- 0.1.8 - 06-02-2017
- Fix: Include math.h to fix use of undeclared identifier floor with rbx. See #51
- 0.1.7 - 02-11-2016
- Fix: if for some reason an isolate was forked don't free it and raise a warning instead to avoid hanging process
- 0.1.6 - 25-10-2016
- Fix: timeout behavior was incorrect, in some cases stop could be called on already stopped contexts
- 0.1.5 - 10-10-2016
- Support for snapshots, shared isolates, runtime flags thanks to @wk8
- Fix timeout behavior when it occurs in an attached Ruby method
- 0.1.4 - 19-05-2016
- Set upper bound for libv8 inclusion @ignisf
- Support conversion of Date, Time and DateTime from Ruby to JS @seanmakesgames
- Support conversion of large numbers back from Ruby to JS @seanmakesgames
- 0.1.3 - 17-05-2016
- Support more conversions from Ruby back to JS (Hash, Symbol, Array)
- Support attaching nested objects
- 0.1.2 - 17-05-2016
- Gemspec specifies minimal version of Ruby (2.0)
- Implement #load on Context to load files
- 0.1.1
- Added unblock function so SIGINT does not lead to a crash
- 0.1.1.beta.1 - 14-05-2016
- First release