mini_racer 0.17.0.pre13 → 0.18.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +3 -0
- data/README.md +3 -33
- data/ext/mini_racer_extension/extconf.rb +1 -23
- data/ext/mini_racer_extension/mini_racer_extension.c +0 -16
- data/ext/mini_racer_extension/mini_racer_v8.cc +0 -20
- data/ext/mini_racer_extension/mini_racer_v8.h +0 -1
- data/lib/mini_racer/truffleruby.rb +0 -4
- data/lib/mini_racer/version.rb +2 -2
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09b6f546f3eb690b77a080fc028417c8790ad3c9874928b18c09c9a6d8442af4'
|
4
|
+
data.tar.gz: 94ef993434f499d638f55a030af21329c30acf2b12724d9931b4976f7284f247
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2799a356598f7f85b1ed831497bee8ce1957148a91ddf4615420c18b4de869f5a1cbaeca9b4d8d4c141ef5f4535e1bb3d1e9f5845458d7c1842bb78c570911ac
|
7
|
+
data.tar.gz: 6a9d199e7cd6e00513cbd75879be61e33b707f422d777f8421764ba14c0e5cabb321a04128eef94cfc8a13c79f3d276f1698e73306b0432662660785d82f14e3
|
data/CHANGELOG
CHANGED
data/README.md
CHANGED
@@ -97,19 +97,6 @@ context.eval("var a = new Array(10000); while(true) {a = a.concat(new Array(1000
|
|
97
97
|
# => V8OutOfMemoryError is raised
|
98
98
|
```
|
99
99
|
|
100
|
-
### Object marshal max Stack Ddepth Support
|
101
|
-
|
102
|
-
Contexts can specify a stack depth limit for object marshalling. Max depth is unbounded by default.
|
103
|
-
|
104
|
-
```ruby
|
105
|
-
# terminates script if stack depth exceeds max during marshal
|
106
|
-
context = MiniRacer::Context.new(marshal_stack_depth: 500)
|
107
|
-
context.attach("a", proc{|a| a})
|
108
|
-
|
109
|
-
context.eval("let arr = []; arr.push(arr); a(arr)")
|
110
|
-
# => RuntimeError is raised
|
111
|
-
```
|
112
|
-
|
113
100
|
### Rich Debugging with File Name in Stack Trace Support
|
114
101
|
|
115
102
|
You can provide `filename:` to `#eval` which will be used in stack traces produced by V8:
|
@@ -208,25 +195,7 @@ context.eval("counter")
|
|
208
195
|
|
209
196
|
### Garbage collection
|
210
197
|
|
211
|
-
|
212
|
-
|
213
|
-
```ruby
|
214
|
-
context = MiniRacer::Context.new
|
215
|
-
|
216
|
-
# do stuff with that context...
|
217
|
-
|
218
|
-
# give up to 100ms for V8 garbage collection
|
219
|
-
context.idle_notification(100)
|
220
|
-
|
221
|
-
# force V8 to perform a full GC
|
222
|
-
context.low_memory_notification
|
223
|
-
```
|
224
|
-
|
225
|
-
This can come in handy to force V8 GC runs for example in between requests if you use MiniRacer on a web application.
|
226
|
-
|
227
|
-
Note that this method maps directly to [`v8::Isolate::IdleNotification`](http://bespin.cz/~ondras/html/classv8_1_1Isolate.html#aea16cbb2e351de9a3ae7be2b7cb48297), and that in particular its return value is the same (true if there is no further garbage to collect, false otherwise) and the same caveats apply, in particular that `there is no guarantee that the [call will return] within the time limit.`
|
228
|
-
|
229
|
-
Additionally you may automate this process on a context by defining it with `MiniRacer::Context.new(ensure_gc_after_idle: 1000)`. Using this will ensure V8 will run a full GC using `context.low_memory_notification` 1 second after the last eval on the context. Low memory notification is both slower and more aggressive than an idle_notification and will ensure long living contexts use minimal amounts of memory.
|
198
|
+
You can make the garbage collector more aggressive by defining the context with `MiniRacer::Context.new(ensure_gc_after_idle: 1000)`. Using this will ensure V8 will run a full GC using `context.low_memory_notification` 1 second after the last eval on the context. Low memory notifications ensure long living contexts use minimal amounts of memory.
|
230
199
|
|
231
200
|
### V8 Runtime flags
|
232
201
|
|
@@ -395,7 +364,8 @@ Or install it yourself as:
|
|
395
364
|
$ gem install mini_racer
|
396
365
|
```
|
397
366
|
|
398
|
-
**Note** using v8.h and compiling MiniRacer requires a C++
|
367
|
+
**Note** using v8.h and compiling MiniRacer requires a C++20 capable compiler.
|
368
|
+
gcc >= 12.2 and Xcode >= 13 are, at the time of writing, known to work.
|
399
369
|
|
400
370
|
## Similar Projects
|
401
371
|
|
@@ -19,7 +19,7 @@ $CXXFLAGS += " -Wall" unless $CXXFLAGS.split.include? "-Wall"
|
|
19
19
|
$CXXFLAGS += " -g" unless $CXXFLAGS.split.include? "-g"
|
20
20
|
$CXXFLAGS += " -rdynamic" unless $CXXFLAGS.split.include? "-rdynamic"
|
21
21
|
$CXXFLAGS += " -fPIC" unless $CXXFLAGS.split.include? "-rdynamic" or IS_DARWIN
|
22
|
-
$CXXFLAGS += " -std=c++
|
22
|
+
$CXXFLAGS += " -std=c++20"
|
23
23
|
$CXXFLAGS += " -fpermissive"
|
24
24
|
$CXXFLAGS += " -fno-rtti"
|
25
25
|
$CXXFLAGS += " -fno-exceptions"
|
@@ -47,28 +47,6 @@ if ENV['CXX']
|
|
47
47
|
CONFIG['CXX'] = ENV['CXX']
|
48
48
|
end
|
49
49
|
|
50
|
-
CXX11_TEST = <<EOS
|
51
|
-
#if __cplusplus <= 199711L
|
52
|
-
# error A compiler that supports at least C++11 is required in order to compile this project.
|
53
|
-
#endif
|
54
|
-
EOS
|
55
|
-
|
56
|
-
`echo "#{CXX11_TEST}" | #{CONFIG['CXX']} -std=c++0x -x c++ -E -`
|
57
|
-
unless $?.success?
|
58
|
-
warn <<EOS
|
59
|
-
|
60
|
-
|
61
|
-
WARNING: C++11 support is required for compiling mini_racer. Please make sure
|
62
|
-
you are using a compiler that supports at least C++11. Examples of such
|
63
|
-
compilers are GCC 4.7+ and Clang 3.2+.
|
64
|
-
|
65
|
-
If you are using Travis, consider either migrating your build to Ubuntu Trusty or
|
66
|
-
installing GCC 4.8. See mini_racer's README.md for more information.
|
67
|
-
|
68
|
-
|
69
|
-
EOS
|
70
|
-
end
|
71
|
-
|
72
50
|
CONFIG['LDSHARED'] = '$(CXX) -shared' unless IS_DARWIN
|
73
51
|
if CONFIG['warnflags']
|
74
52
|
CONFIG['warnflags'].gsub!('-Wdeclaration-after-statement', '')
|
@@ -703,7 +703,6 @@ static void dispatch1(Context *c, const uint8_t *p, size_t n)
|
|
703
703
|
case 'C': return v8_timedwait(c, p+1, n-1, v8_call);
|
704
704
|
case 'E': return v8_timedwait(c, p+1, n-1, v8_eval);
|
705
705
|
case 'H': return v8_heap_snapshot(c->pst);
|
706
|
-
case 'I': return v8_idle_notification(c->pst, p+1, n-1);
|
707
706
|
case 'P': return v8_pump_message_loop(c->pst);
|
708
707
|
case 'S': return v8_heap_stats(c->pst);
|
709
708
|
case 'T': return v8_snapshot(c->pst, p+1, n-1);
|
@@ -1301,20 +1300,6 @@ static VALUE context_pump_message_loop(VALUE self)
|
|
1301
1300
|
return rendezvous(c, &b); // takes ownership of |b|
|
1302
1301
|
}
|
1303
1302
|
|
1304
|
-
static VALUE context_idle_notification(VALUE self, VALUE arg)
|
1305
|
-
{
|
1306
|
-
Context *c;
|
1307
|
-
Ser s;
|
1308
|
-
|
1309
|
-
Check_Type(arg, T_FIXNUM);
|
1310
|
-
TypedData_Get_Struct(self, Context, &context_type, c);
|
1311
|
-
// request is (I)dle notification, idle_time_in_seconds
|
1312
|
-
ser_init1(&s, 'I');
|
1313
|
-
ser_num(&s, LONG2FIX(arg) / 1e3);
|
1314
|
-
// response is |undefined|
|
1315
|
-
return rendezvous(c, &s.b); // takes ownership of |s.b|
|
1316
|
-
}
|
1317
|
-
|
1318
1303
|
static VALUE context_low_memory_notification(VALUE self)
|
1319
1304
|
{
|
1320
1305
|
Buf req, res;
|
@@ -1638,7 +1623,6 @@ void Init_mini_racer_extension(void)
|
|
1638
1623
|
rb_define_method(c, "heap_stats", context_heap_stats, 0);
|
1639
1624
|
rb_define_method(c, "heap_snapshot", context_heap_snapshot, 0);
|
1640
1625
|
rb_define_method(c, "pump_message_loop", context_pump_message_loop, 0);
|
1641
|
-
rb_define_method(c, "idle_notification", context_idle_notification, 1);
|
1642
1626
|
rb_define_method(c, "low_memory_notification", context_low_memory_notification, 0);
|
1643
1627
|
rb_define_alloc_func(c, context_alloc);
|
1644
1628
|
|
@@ -834,26 +834,6 @@ fail:
|
|
834
834
|
}
|
835
835
|
}
|
836
836
|
|
837
|
-
extern "C" void v8_idle_notification(State *pst, const uint8_t *p, size_t n)
|
838
|
-
{
|
839
|
-
State& st = *pst;
|
840
|
-
v8::TryCatch try_catch(st.isolate);
|
841
|
-
v8::HandleScope handle_scope(st.isolate);
|
842
|
-
v8::ValueDeserializer des(st.isolate, p, n);
|
843
|
-
des.ReadHeader(st.context).Check();
|
844
|
-
double idle_time_in_seconds = .01;
|
845
|
-
{
|
846
|
-
v8::Local<v8::Value> idle_time_in_seconds_v;
|
847
|
-
if (!des.ReadValue(st.context).ToLocal(&idle_time_in_seconds_v)) goto fail;
|
848
|
-
if (!idle_time_in_seconds_v->NumberValue(st.context).To(&idle_time_in_seconds)) goto fail;
|
849
|
-
}
|
850
|
-
fail:
|
851
|
-
double now = platform->MonotonicallyIncreasingTime();
|
852
|
-
bool stop = st.isolate->IdleNotificationDeadline(now + idle_time_in_seconds);
|
853
|
-
auto result = v8::Boolean::New(st.isolate, stop);
|
854
|
-
if (!reply(st, result)) abort();
|
855
|
-
}
|
856
|
-
|
857
837
|
extern "C" void v8_low_memory_notification(State *pst)
|
858
838
|
{
|
859
839
|
pst->isolate->LowMemoryNotification();
|
@@ -45,7 +45,6 @@ void v8_heap_snapshot(struct State *pst);
|
|
45
45
|
void v8_pump_message_loop(struct State *pst);
|
46
46
|
void v8_snapshot(struct State *pst, const uint8_t *p, size_t n);
|
47
47
|
void v8_warmup(struct State *pst, const uint8_t *p, size_t n);
|
48
|
-
void v8_idle_notification(struct State *pst, const uint8_t *p, size_t n);
|
49
48
|
void v8_low_memory_notification(struct State *pst);
|
50
49
|
void v8_terminate_execution(struct State *pst); // called from ruby or watchdog thread
|
51
50
|
void v8_single_threaded_enter(struct State *pst, struct Context *c, void (*f)(struct Context *c));
|
data/lib/mini_racer/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_racer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.0.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-02-
|
11
|
+
date: 2025-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 23.6.1.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 23.6.1.0
|
97
97
|
description: Minimal embedded v8 engine for Ruby
|
98
98
|
email:
|
99
99
|
- sam.saffron@gmail.com
|
@@ -123,9 +123,9 @@ licenses:
|
|
123
123
|
- MIT
|
124
124
|
metadata:
|
125
125
|
bug_tracker_uri: https://github.com/discourse/mini_racer/issues
|
126
|
-
changelog_uri: https://github.com/discourse/mini_racer/blob/v0.
|
127
|
-
documentation_uri: https://www.rubydoc.info/gems/mini_racer/0.
|
128
|
-
source_code_uri: https://github.com/discourse/mini_racer/tree/v0.
|
126
|
+
changelog_uri: https://github.com/discourse/mini_racer/blob/v0.18.0.pre1/CHANGELOG
|
127
|
+
documentation_uri: https://www.rubydoc.info/gems/mini_racer/0.18.0.pre1
|
128
|
+
source_code_uri: https://github.com/discourse/mini_racer/tree/v0.18.0.pre1
|
129
129
|
post_install_message:
|
130
130
|
rdoc_options: []
|
131
131
|
require_paths:
|