@quenk/potoo 4.0.12 → 4.1.2
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.
- package/lib/actor/address.d.ts +5 -1
- package/lib/actor/address.js +7 -2
- package/lib/actor/address.js.map +1 -1
- package/lib/actor/system/vm/allocator/index.d.ts +9 -2
- package/lib/actor/system/vm/allocator/map.d.ts +2 -1
- package/lib/actor/system/vm/allocator/map.js +30 -23
- package/lib/actor/system/vm/allocator/map.js.map +1 -1
- package/lib/actor/system/vm/event/dispatcher.d.ts +4 -4
- package/lib/actor/system/vm/event/dispatcher.js +9 -9
- package/lib/actor/system/vm/event/dispatcher.js.map +1 -1
- package/lib/actor/system/vm/event/index.d.ts +1 -1
- package/lib/actor/system/vm/event/index.js +1 -1
- package/lib/actor/system/vm/index.d.ts +16 -9
- package/lib/actor/system/vm/index.js +17 -9
- package/lib/actor/system/vm/index.js.map +1 -1
- package/lib/actor/system/vm/runtime/error.d.ts +0 -42
- package/lib/actor/system/vm/runtime/error.js +1 -61
- package/lib/actor/system/vm/runtime/error.js.map +1 -1
- package/lib/actor/system/vm/thread/collector.d.ts +35 -0
- package/lib/actor/system/vm/thread/collector.js +52 -0
- package/lib/actor/system/vm/thread/collector.js.map +1 -0
- package/lib/actor/system/vm/thread/factory.js +2 -2
- package/lib/actor/system/vm/thread/factory.js.map +1 -1
- package/lib/actor/system/vm/thread/index.d.ts +5 -0
- package/lib/actor/system/vm/thread/index.js.map +1 -1
- package/lib/actor/system/vm/thread/process.d.ts +4 -2
- package/lib/actor/system/vm/thread/process.js +4 -3
- package/lib/actor/system/vm/thread/process.js.map +1 -1
- package/lib/actor/system/vm/thread/runner.d.ts +31 -0
- package/lib/actor/system/vm/thread/runner.js +60 -0
- package/lib/actor/system/vm/thread/runner.js.map +1 -0
- package/lib/actor/system/vm/thread/shared/js.d.ts +4 -3
- package/lib/actor/system/vm/thread/shared/js.js +18 -6
- package/lib/actor/system/vm/thread/shared/js.js.map +1 -1
- package/lib/actor/template.d.ts +0 -5
- package/lib/actor/template.js +1 -13
- package/lib/actor/template.js.map +1 -1
- package/package.json +1 -1
- package/lib/actor/system/vm/frame.d.ts +0 -228
- package/lib/actor/system/vm/frame.js +0 -233
- package/lib/actor/system/vm/frame.js.map +0 -1
- package/lib/actor/system/vm/object/foreign.d.ts +0 -9
- package/lib/actor/system/vm/object/foreign.js +0 -13
- package/lib/actor/system/vm/object/foreign.js.map +0 -1
- package/lib/actor/system/vm/object/index.d.ts +0 -5
- package/lib/actor/system/vm/object/index.js +0 -3
- package/lib/actor/system/vm/object/index.js.map +0 -1
- package/lib/actor/system/vm/object/list.d.ts +0 -8
- package/lib/actor/system/vm/object/list.js +0 -12
- package/lib/actor/system/vm/object/list.js.map +0 -1
- package/lib/actor/system/vm/op/actor.d.ts +0 -69
- package/lib/actor/system/vm/op/actor.js +0 -118
- package/lib/actor/system/vm/op/actor.js.map +0 -1
- package/lib/actor/system/vm/op/base.d.ts +0 -142
- package/lib/actor/system/vm/op/base.js +0 -242
- package/lib/actor/system/vm/op/base.js.map +0 -1
- package/lib/actor/system/vm/op/index.d.ts +0 -106
- package/lib/actor/system/vm/op/index.js +0 -232
- package/lib/actor/system/vm/op/index.js.map +0 -1
- package/lib/actor/system/vm/op/object.d.ts +0 -31
- package/lib/actor/system/vm/op/object.js +0 -78
- package/lib/actor/system/vm/op/object.js.map +0 -1
- package/lib/actor/system/vm/registry.d.ts +0 -126
- package/lib/actor/system/vm/registry.js +0 -191
- package/lib/actor/system/vm/registry.js.map +0 -1
- package/lib/actor/system/vm/script/index.d.ts +0 -49
- package/lib/actor/system/vm/script/index.js +0 -29
- package/lib/actor/system/vm/script/index.js.map +0 -1
- package/lib/actor/system/vm/script/info.d.ts +0 -279
- package/lib/actor/system/vm/script/info.js +0 -256
- package/lib/actor/system/vm/script/info.js.map +0 -1
- package/lib/actor/system/vm/type.d.ts +0 -90
- package/lib/actor/system/vm/type.js +0 -29
- package/lib/actor/system/vm/type.js.map +0 -1
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ActorTerminatedErr = exports.InvalidThreadErr = exports.UnknownFunErr = exports.UnknownInstanceErr = exports.InvalidFunctionErr = exports.
|
|
3
|
+
exports.ActorTerminatedErr = exports.InvalidThreadErr = exports.UnknownFunErr = exports.UnknownInstanceErr = exports.InvalidFunctionErr = exports.UnknownAddressErr = exports.EmptyMailboxErr = exports.NoMailboxErr = exports.NoReceiverErr = exports.IllegalStopErr = exports.UnexpectedDataType = exports.NullPointerErr = exports.JumpOutOfBoundsErr = exports.NullFunctionPointerErr = exports.NullTemplatePointerErr = exports.DuplicateAddressErr = exports.UnknownParentAddressErr = exports.InvalidIdErr = exports.ErrorClass = void 0;
|
|
4
4
|
const address_1 = require("../../../address");
|
|
5
|
-
const frame_1 = require("../frame");
|
|
6
5
|
/**
|
|
7
6
|
* ErrorClass
|
|
8
7
|
*/
|
|
@@ -146,65 +145,6 @@ class UnknownAddressErr extends ErrorClass {
|
|
|
146
145
|
}
|
|
147
146
|
}
|
|
148
147
|
exports.UnknownAddressErr = UnknownAddressErr;
|
|
149
|
-
/**
|
|
150
|
-
* MissingSymbolErr
|
|
151
|
-
*/
|
|
152
|
-
class MissingSymbolErr extends ErrorClass {
|
|
153
|
-
constructor(index) {
|
|
154
|
-
super(`Cannot locate symbol at index 0x${index.toString(16)}`);
|
|
155
|
-
this.index = index;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
exports.MissingSymbolErr = MissingSymbolErr;
|
|
159
|
-
/**
|
|
160
|
-
* IntegerOverflowErr
|
|
161
|
-
*/
|
|
162
|
-
class IntegerOverflowErr extends ErrorClass {
|
|
163
|
-
constructor() {
|
|
164
|
-
super(`DATA_MAX_SAFE_UINT32=${frame_1.DATA_MAX_SAFE_UINT32}`);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
exports.IntegerOverflowErr = IntegerOverflowErr;
|
|
168
|
-
/**
|
|
169
|
-
* StackEmptyErr
|
|
170
|
-
*/
|
|
171
|
-
class StackEmptyErr extends ErrorClass {
|
|
172
|
-
constructor() {
|
|
173
|
-
super('Stack is empty.');
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
exports.StackEmptyErr = StackEmptyErr;
|
|
177
|
-
/**
|
|
178
|
-
* InvalidPropertyIndex
|
|
179
|
-
*/
|
|
180
|
-
class InvalidPropertyIndex extends ErrorClass {
|
|
181
|
-
constructor(cons, idx) {
|
|
182
|
-
super(`Constructor: ${cons.name}, index: ${idx}`);
|
|
183
|
-
this.cons = cons;
|
|
184
|
-
this.idx = idx;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
exports.InvalidPropertyIndex = InvalidPropertyIndex;
|
|
188
|
-
/**
|
|
189
|
-
* MissingInfoErr
|
|
190
|
-
*/
|
|
191
|
-
class MissingInfoErr extends ErrorClass {
|
|
192
|
-
constructor(idx) {
|
|
193
|
-
super(`No info object index: ${idx}!`);
|
|
194
|
-
this.idx = idx;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
exports.MissingInfoErr = MissingInfoErr;
|
|
198
|
-
/**
|
|
199
|
-
* InvalidConstructorErr
|
|
200
|
-
*/
|
|
201
|
-
class InvalidConstructorErr extends ErrorClass {
|
|
202
|
-
constructor(name) {
|
|
203
|
-
super(`Named object "${name}" cannot be used as a constructor!`);
|
|
204
|
-
this.name = name;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
exports.InvalidConstructorErr = InvalidConstructorErr;
|
|
208
148
|
/**
|
|
209
149
|
* InvalidFunctionErr
|
|
210
150
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/runtime/error.ts"],"names":[],"mappings":";;;AAEA,8CAA+D;
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/runtime/error.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Lazy } from '@quenk/noni/lib/data/lazy';
|
|
2
|
+
import { PVM } from '..';
|
|
3
|
+
import { Thread } from '.';
|
|
4
|
+
/**
|
|
5
|
+
* ThreadCollector is used to automatically deallocate dead threads from the
|
|
6
|
+
* system.
|
|
7
|
+
*
|
|
8
|
+
* This applies to function actors which are deallocated automatically after t
|
|
9
|
+
* hey execute. However, this deallocation is delayed until all child threads
|
|
10
|
+
* have also been deallocated for the actor.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ThreadCollector {
|
|
13
|
+
vm: Lazy<PVM>;
|
|
14
|
+
threads: Set<Thread>;
|
|
15
|
+
constructor(vm: Lazy<PVM>, threads?: Set<Thread>);
|
|
16
|
+
/**
|
|
17
|
+
* mark a thread for collection.
|
|
18
|
+
*
|
|
19
|
+
* This assumes the thread is a function actor.
|
|
20
|
+
*/
|
|
21
|
+
mark(thread: Thread): void;
|
|
22
|
+
/**
|
|
23
|
+
* unmark a thread for collection.
|
|
24
|
+
*
|
|
25
|
+
* This must be called when a thread has been deallocated regardless of
|
|
26
|
+
* method to ensure it does not linger in the collector.
|
|
27
|
+
*/
|
|
28
|
+
unmark(thread: Thread): void;
|
|
29
|
+
/**
|
|
30
|
+
* collectr on a Thread.
|
|
31
|
+
*
|
|
32
|
+
* This deallocates the thread if it has no children.
|
|
33
|
+
*/
|
|
34
|
+
collect(thread: Thread): Promise<void>;
|
|
35
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ThreadCollector = void 0;
|
|
4
|
+
const array_1 = require("@quenk/noni/lib/data/array");
|
|
5
|
+
const lazy_1 = require("@quenk/noni/lib/data/lazy");
|
|
6
|
+
/**
|
|
7
|
+
* ThreadCollector is used to automatically deallocate dead threads from the
|
|
8
|
+
* system.
|
|
9
|
+
*
|
|
10
|
+
* This applies to function actors which are deallocated automatically after t
|
|
11
|
+
* hey execute. However, this deallocation is delayed until all child threads
|
|
12
|
+
* have also been deallocated for the actor.
|
|
13
|
+
*/
|
|
14
|
+
class ThreadCollector {
|
|
15
|
+
constructor(vm, threads = new Set()) {
|
|
16
|
+
this.vm = vm;
|
|
17
|
+
this.threads = threads;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* mark a thread for collection.
|
|
21
|
+
*
|
|
22
|
+
* This assumes the thread is a function actor.
|
|
23
|
+
*/
|
|
24
|
+
mark(thread) {
|
|
25
|
+
this.threads.add(thread);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* unmark a thread for collection.
|
|
29
|
+
*
|
|
30
|
+
* This must be called when a thread has been deallocated regardless of
|
|
31
|
+
* method to ensure it does not linger in the collector.
|
|
32
|
+
*/
|
|
33
|
+
unmark(thread) {
|
|
34
|
+
this.threads.delete(thread);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* collectr on a Thread.
|
|
38
|
+
*
|
|
39
|
+
* This deallocates the thread if it has no children.
|
|
40
|
+
*/
|
|
41
|
+
async collect(thread) {
|
|
42
|
+
if (!this.threads.has(thread))
|
|
43
|
+
return;
|
|
44
|
+
let { allocator } = (0, lazy_1.evaluate)(this.vm);
|
|
45
|
+
if ((0, array_1.empty)(allocator.getChildren(thread))) {
|
|
46
|
+
this.unmark(thread);
|
|
47
|
+
await allocator.deallocate(thread);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.ThreadCollector = ThreadCollector;
|
|
52
|
+
//# sourceMappingURL=collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/thread/collector.ts"],"names":[],"mappings":";;;AAAA,sDAAmD;AACnD,oDAA2D;AAK3D;;;;;;;GAOG;AACH,MAAa,eAAe;IACxB,YACW,EAAa,EACb,UAAuB,IAAI,GAAG,EAAE;QADhC,OAAE,GAAF,EAAE,CAAW;QACb,YAAO,GAAP,OAAO,CAAyB;IACxC,CAAC;IAEJ;;;;OAIG;IACH,IAAI,CAAC,MAAc;QACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAc;QACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO;QAEtC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEtC,IAAI,IAAA,aAAK,EAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpB,MAAM,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;CACJ;AAxCD,0CAwCC"}
|
|
@@ -14,8 +14,8 @@ class ThreadFactory {
|
|
|
14
14
|
*/
|
|
15
15
|
static create(vm, address, template) {
|
|
16
16
|
if ((0, template_1.isProcessTemplate)(template))
|
|
17
|
-
return process_1.ProcessThread.create(vm, address, template.script);
|
|
18
|
-
return new js_1.JSThread(vm, address);
|
|
17
|
+
return process_1.ProcessThread.create(vm, template, address, template.script);
|
|
18
|
+
return new js_1.JSThread(vm, template, address);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
exports.ThreadFactory = ThreadFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/thread/factory.ts"],"names":[],"mappings":";;;AACA,gDAI2B;AAE3B,oCAAuC;AACvC,uCAA0C;AAE1C;;;GAGG;AACH,MAAa,aAAa;IACtB;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,EAAM,EAAE,OAAgB,EAAE,QAAkB;QACtD,IAAI,IAAA,4BAAiB,EAAC,QAAQ,CAAC;YAC3B,OAAO,uBAAa,CAAC,MAAM,CACvB,EAAE,EACF,OAAO,EACW,QAAS,CAAC,MAAM,CACrC,CAAC;QAEN,OAAO,IAAI,aAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/thread/factory.ts"],"names":[],"mappings":";;;AACA,gDAI2B;AAE3B,oCAAuC;AACvC,uCAA0C;AAE1C;;;GAGG;AACH,MAAa,aAAa;IACtB;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,EAAM,EAAE,OAAgB,EAAE,QAAkB;QACtD,IAAI,IAAA,4BAAiB,EAAC,QAAQ,CAAC;YAC3B,OAAO,uBAAa,CAAC,MAAM,CACvB,EAAE,EACF,QAAQ,EACR,OAAO,EACW,QAAS,CAAC,MAAM,CACrC,CAAC;QAEN,OAAO,IAAI,aAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;CACJ;AAfD,sCAeC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Err } from '@quenk/noni/lib/control/err';
|
|
2
2
|
import { Address } from '../../../address';
|
|
3
3
|
import { Actor } from '../../..';
|
|
4
|
+
import { Template } from '../../../template';
|
|
4
5
|
export declare const ERR_THREAD_INVALID = "ERR_THREAD_INVALID";
|
|
5
6
|
/**
|
|
6
7
|
* Thread serves as the execution context for a single actor.
|
|
@@ -14,6 +15,10 @@ export declare const ERR_THREAD_INVALID = "ERR_THREAD_INVALID";
|
|
|
14
15
|
* VM used to make managing actors easier.
|
|
15
16
|
*/
|
|
16
17
|
export interface Thread extends Actor {
|
|
18
|
+
/**
|
|
19
|
+
* template used to configure the Thread.
|
|
20
|
+
*/
|
|
21
|
+
template: Template;
|
|
17
22
|
/**
|
|
18
23
|
* address for the Thread (actor) within the system.
|
|
19
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/thread/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/thread/index.ts"],"names":[],"mappings":";;;AAMa,QAAA,kBAAkB,GAAG,oBAAoB,CAAC"}
|
|
@@ -5,6 +5,7 @@ import { Address } from '../../../address';
|
|
|
5
5
|
import { Message } from '../../..';
|
|
6
6
|
import { VM } from '../';
|
|
7
7
|
import { Thread } from '.';
|
|
8
|
+
import { Template } from 'actor/template';
|
|
8
9
|
export declare const CTRL_MSG_RAISE = 9;
|
|
9
10
|
export declare const CTRL_MSG_SEND = 1;
|
|
10
11
|
export declare const CTRL_MSG_DROP = 3;
|
|
@@ -16,9 +17,10 @@ export declare const CTRL_MSG_DROP = 3;
|
|
|
16
17
|
*/
|
|
17
18
|
export declare class ProcessThread implements Thread {
|
|
18
19
|
vm: VM;
|
|
20
|
+
template: Template;
|
|
19
21
|
process: ChildProcess;
|
|
20
22
|
address: Address;
|
|
21
|
-
constructor(vm: VM, process: ChildProcess, address: Address);
|
|
23
|
+
constructor(vm: VM, template: Template, process: ChildProcess, address: Address);
|
|
22
24
|
/**
|
|
23
25
|
* create a new ProcessThread instance using the provided script path for
|
|
24
26
|
* the ChildProcess creation.
|
|
@@ -27,7 +29,7 @@ export declare class ProcessThread implements Thread {
|
|
|
27
29
|
*
|
|
28
30
|
* 1. POTOO_ACTOR_ADDRESS The full address of the actor in the parent VM.
|
|
29
31
|
*/
|
|
30
|
-
static create(vm: VM, address: Address, script: Path): ProcessThread;
|
|
32
|
+
static create(vm: VM, template: Template, address: Address, script: Path): ProcessThread;
|
|
31
33
|
notify(msg: Message): Promise<void>;
|
|
32
34
|
raise(err: Err): Promise<void>;
|
|
33
35
|
/**
|
|
@@ -34,8 +34,9 @@ const shapes = {
|
|
|
34
34
|
* concerned.
|
|
35
35
|
*/
|
|
36
36
|
class ProcessThread {
|
|
37
|
-
constructor(vm, process, address) {
|
|
37
|
+
constructor(vm, template, process, address) {
|
|
38
38
|
this.vm = vm;
|
|
39
|
+
this.template = template;
|
|
39
40
|
this.process = process;
|
|
40
41
|
this.address = address;
|
|
41
42
|
}
|
|
@@ -47,11 +48,11 @@ class ProcessThread {
|
|
|
47
48
|
*
|
|
48
49
|
* 1. POTOO_ACTOR_ADDRESS The full address of the actor in the parent VM.
|
|
49
50
|
*/
|
|
50
|
-
static create(vm, address, script) {
|
|
51
|
+
static create(vm, template, address, script) {
|
|
51
52
|
let cp = (0, child_process_1.fork)((0, path_1.resolve)(script), {
|
|
52
53
|
env: { POTOO_ACTOR_ADDRESS: address }
|
|
53
54
|
});
|
|
54
|
-
let thread = new ProcessThread(vm, cp, address);
|
|
55
|
+
let thread = new ProcessThread(vm, template, cp, address);
|
|
55
56
|
return thread;
|
|
56
57
|
}
|
|
57
58
|
async notify(msg) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/thread/process.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,iDAAmD;AAInD,oDAAsD;
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/thread/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Lazy } from '@quenk/noni/lib/data/lazy';
|
|
2
|
+
import { SpawnConcernLevel } from '../../../template';
|
|
3
|
+
import { VM } from '..';
|
|
4
|
+
import { Thread } from '.';
|
|
5
|
+
/**
|
|
6
|
+
* ThreadRunner takes care of starting up actor threads and automatically
|
|
7
|
+
* stopping function actors.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ThreadRunner {
|
|
10
|
+
vm: Lazy<VM>;
|
|
11
|
+
constructor(vm: Lazy<VM>);
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
* waitForConcern produces a promise that can be used to wait for a
|
|
15
|
+
* child thread to acheive a desired concern level.
|
|
16
|
+
*
|
|
17
|
+
* Note: This does not pause the parent thread.
|
|
18
|
+
*/
|
|
19
|
+
waitForConcern(parent: Thread, child: Thread, level?: SpawnConcernLevel): Promise<import("../event").InternalEvent>;
|
|
20
|
+
/**
|
|
21
|
+
* runThread executes a newly allocated child thread.
|
|
22
|
+
*
|
|
23
|
+
* If the template is a function template, the thread will be
|
|
24
|
+
* deallocated after the function completes.
|
|
25
|
+
*
|
|
26
|
+
* Note: This behaviour is not immediate if the the thread has children.
|
|
27
|
+
* In that case we wait until the child threads have been removed.
|
|
28
|
+
* This will not hinder intentional exits.
|
|
29
|
+
*/
|
|
30
|
+
runThread(child: Thread): Promise<void>;
|
|
31
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ThreadRunner = void 0;
|
|
4
|
+
const lazy_1 = require("@quenk/noni/lib/data/lazy");
|
|
5
|
+
const template_1 = require("../../../template");
|
|
6
|
+
const event_1 = require("../event");
|
|
7
|
+
const parentEvents = [event_1.EVENT_ACTOR_ALLOCATED, event_1.EVENT_ACTOR_DEALLOCATED];
|
|
8
|
+
const spawnConcerns = {
|
|
9
|
+
[template_1.SPAWN_CONCERN_ALLOCATED]: event_1.EVENT_ACTOR_ALLOCATED,
|
|
10
|
+
[template_1.SPAWN_CONCERN_STARTED]: event_1.EVENT_ACTOR_STARTED,
|
|
11
|
+
[template_1.SPAWN_CONCERN_RECEIVING]: event_1.EVENT_ACTOR_RECEIVE,
|
|
12
|
+
[template_1.SPAWN_CONCERN_STOPPED]: event_1.EVENT_ACTOR_STOPPED
|
|
13
|
+
};
|
|
14
|
+
const spawnConcern2Event = (level) => { var _a; return (_a = spawnConcerns[level]) !== null && _a !== void 0 ? _a : event_1.EVENT_ACTOR_ALLOCATED; };
|
|
15
|
+
/**
|
|
16
|
+
* ThreadRunner takes care of starting up actor threads and automatically
|
|
17
|
+
* stopping function actors.
|
|
18
|
+
*/
|
|
19
|
+
class ThreadRunner {
|
|
20
|
+
constructor(vm) {
|
|
21
|
+
this.vm = vm;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
*
|
|
25
|
+
* waitForConcern produces a promise that can be used to wait for a
|
|
26
|
+
* child thread to acheive a desired concern level.
|
|
27
|
+
*
|
|
28
|
+
* Note: This does not pause the parent thread.
|
|
29
|
+
*/
|
|
30
|
+
async waitForConcern(parent, child, level = template_1.SPAWN_CONCERN_ALLOCATED) {
|
|
31
|
+
let { events } = (0, lazy_1.evaluate)(this.vm);
|
|
32
|
+
let evt = spawnConcern2Event(level);
|
|
33
|
+
//NOTE: Do not await here otherwise execution will continue before the
|
|
34
|
+
// listener has been installed resulting in the event being missed.
|
|
35
|
+
return parentEvents.includes(evt)
|
|
36
|
+
? events.monitor(parent, evt)
|
|
37
|
+
: events.monitor(child, evt);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* runThread executes a newly allocated child thread.
|
|
41
|
+
*
|
|
42
|
+
* If the template is a function template, the thread will be
|
|
43
|
+
* deallocated after the function completes.
|
|
44
|
+
*
|
|
45
|
+
* Note: This behaviour is not immediate if the the thread has children.
|
|
46
|
+
* In that case we wait until the child threads have been removed.
|
|
47
|
+
* This will not hinder intentional exits.
|
|
48
|
+
*/
|
|
49
|
+
async runThread(child) {
|
|
50
|
+
let { events, collector } = (0, lazy_1.evaluate)(this.vm);
|
|
51
|
+
// Ideally this should be done in the thread itself
|
|
52
|
+
await events.dispatchActorEvent(child.address, child.address, event_1.EVENT_ACTOR_STARTED);
|
|
53
|
+
if (child.template.run)
|
|
54
|
+
collector.mark(child);
|
|
55
|
+
await child.start();
|
|
56
|
+
await collector.collect(child);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.ThreadRunner = ThreadRunner;
|
|
60
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/thread/runner.ts"],"names":[],"mappings":";;;AAAA,oDAA2D;AAG3D,gDAO2B;AAC3B,oCAOkB;AAIlB,MAAM,YAAY,GAAG,CAAC,6BAAqB,EAAE,+BAAuB,CAAC,CAAC;AAEtE,MAAM,aAAa,GAAsB;IACrC,CAAC,kCAAuB,CAAC,EAAE,6BAAqB;IAChD,CAAC,gCAAqB,CAAC,EAAE,2BAAmB;IAC5C,CAAC,kCAAuB,CAAC,EAAE,2BAAmB;IAC9C,CAAC,gCAAqB,CAAC,EAAE,2BAAmB;CAC/C,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAwB,EAAE,EAAE,WACpD,OAAA,MAAA,aAAa,CAAC,KAAK,CAAC,mCAAI,6BAAqB,CAAA,EAAA,CAAC;AAElD;;;GAGG;AACH,MAAa,YAAY;IACrB,YAAmB,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAEnC;;;;;;OAMG;IACH,KAAK,CAAC,cAAc,CAChB,MAAc,EACd,KAAa,EACb,QAA2B,kCAAuB;QAElD,IAAI,EAAE,MAAM,EAAE,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAEpC,sEAAsE;QACtE,mEAAmE;QACnE,OAAO,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,SAAS,CAAC,KAAa;QACzB,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE9C,mDAAmD;QACnD,MAAM,MAAM,CAAC,kBAAkB,CAC3B,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EACb,2BAAmB,CACtB,CAAC;QAEF,IAAwB,KAAK,CAAC,QAAS,CAAC,GAAG;YAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnE,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACpB,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;CACJ;AAlDD,oCAkDC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Err } from '@quenk/noni/lib/control/error';
|
|
2
2
|
import { Case } from '@quenk/noni/lib/control/match/case';
|
|
3
|
-
import {
|
|
3
|
+
import { SharedTemplate, Spawnable } from '../../../../template';
|
|
4
4
|
import { Address } from '../../../../address';
|
|
5
5
|
import { Message } from '../../../..';
|
|
6
6
|
import { VM } from '../../';
|
|
@@ -11,10 +11,11 @@ export declare const ERR_THREAD_INVALID = "ERR_THREAD_INVALID";
|
|
|
11
11
|
*/
|
|
12
12
|
export declare class JSThread implements SharedThread {
|
|
13
13
|
vm: VM;
|
|
14
|
+
template: SharedTemplate;
|
|
14
15
|
address: Address;
|
|
15
16
|
mailbox: Message[];
|
|
16
17
|
state: ThreadState;
|
|
17
|
-
constructor(vm: VM, address: Address, mailbox?: Message[], state?: ThreadState);
|
|
18
|
+
constructor(vm: VM, template: SharedTemplate, address: Address, mailbox?: Message[], state?: ThreadState);
|
|
18
19
|
readonly self: string;
|
|
19
20
|
_assertValid(): void;
|
|
20
21
|
isValid(): boolean;
|
|
@@ -29,7 +30,7 @@ export declare class JSThread implements SharedThread {
|
|
|
29
30
|
*/
|
|
30
31
|
resume(): void;
|
|
31
32
|
raise(e: Err): Promise<void>;
|
|
32
|
-
spawn(tmpl:
|
|
33
|
+
spawn(tmpl: Spawnable): Promise<Address>;
|
|
33
34
|
tell(addr: Address, msg: Message): Promise<void>;
|
|
34
35
|
receive<T = Message>(cases?: Case<Message, T>[]): Promise<T>;
|
|
35
36
|
}
|
|
@@ -5,18 +5,21 @@ const future_1 = require("@quenk/noni/lib/control/monad/future");
|
|
|
5
5
|
const array_1 = require("@quenk/noni/lib/data/array");
|
|
6
6
|
const case_1 = require("@quenk/noni/lib/control/match/case");
|
|
7
7
|
const function_1 = require("@quenk/noni/lib/data/function");
|
|
8
|
+
const template_1 = require("../../../../template");
|
|
8
9
|
const address_1 = require("../../../../address");
|
|
9
10
|
const scheduler_1 = require("../../scheduler");
|
|
10
11
|
const _1 = require(".");
|
|
11
12
|
const event_1 = require("../../event");
|
|
13
|
+
const type_1 = require("@quenk/noni/lib/data/type");
|
|
12
14
|
const defaultCases = [new case_1.Default(function_1.identity)];
|
|
13
15
|
exports.ERR_THREAD_INVALID = 'ERR_THREAD_INVALID';
|
|
14
16
|
/**
|
|
15
17
|
* JSThread is used by actors that run in the same event loop as the VM.
|
|
16
18
|
*/
|
|
17
19
|
class JSThread {
|
|
18
|
-
constructor(vm, address, mailbox = [], state = _1.ThreadState.IDLE) {
|
|
20
|
+
constructor(vm, template, address, mailbox = [], state = _1.ThreadState.IDLE) {
|
|
19
21
|
this.vm = vm;
|
|
22
|
+
this.template = template;
|
|
20
23
|
this.address = address;
|
|
21
24
|
this.mailbox = mailbox;
|
|
22
25
|
this.state = state;
|
|
@@ -30,7 +33,16 @@ class JSThread {
|
|
|
30
33
|
return (this.state !== _1.ThreadState.INVALID &&
|
|
31
34
|
this.state !== _1.ThreadState.ERROR);
|
|
32
35
|
}
|
|
33
|
-
async start() {
|
|
36
|
+
async start() {
|
|
37
|
+
let { run } = this.template;
|
|
38
|
+
let { create } = this.template;
|
|
39
|
+
if ((0, type_1.isFunction)(run)) {
|
|
40
|
+
await run(this);
|
|
41
|
+
}
|
|
42
|
+
else if ((0, type_1.isFunction)(create)) {
|
|
43
|
+
await create(this).start();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
34
46
|
async notify(msg) {
|
|
35
47
|
this._assertValid();
|
|
36
48
|
this.mailbox.push(msg);
|
|
@@ -51,7 +63,7 @@ class JSThread {
|
|
|
51
63
|
die() {
|
|
52
64
|
this.state = _1.ThreadState.INVALID;
|
|
53
65
|
this.vm.scheduler.removeTasks(this);
|
|
54
|
-
this.vm.events.dispatchActorEvent(this, event_1.EVENT_ACTOR_STOPPED);
|
|
66
|
+
this.vm.events.dispatchActorEvent(this.address, this.address, event_1.EVENT_ACTOR_STOPPED);
|
|
55
67
|
}
|
|
56
68
|
/**
|
|
57
69
|
* resume marks the Thread as ready to run again.
|
|
@@ -69,7 +81,7 @@ class JSThread {
|
|
|
69
81
|
this._assertValid();
|
|
70
82
|
let result = await future_1.Future.fromCallback(cb => {
|
|
71
83
|
this.vm.scheduler.postTask(new scheduler_1.Task(this, cb, async () => {
|
|
72
|
-
let address = await this.vm.allocator.allocate(this, tmpl);
|
|
84
|
+
let address = await this.vm.allocator.allocate(this, (0, template_1.fromSpawnable)(tmpl));
|
|
73
85
|
cb(null, address);
|
|
74
86
|
}));
|
|
75
87
|
});
|
|
@@ -87,7 +99,7 @@ class JSThread {
|
|
|
87
99
|
async receive(cases = []) {
|
|
88
100
|
this._assertValid();
|
|
89
101
|
let msg = await future_1.Future.fromCallback(cb => {
|
|
90
|
-
this.vm.events.dispatchActorEvent(this, event_1.EVENT_ACTOR_RECEIVE);
|
|
102
|
+
this.vm.events.dispatchActorEvent(this.address, this.address, event_1.EVENT_ACTOR_RECEIVE);
|
|
91
103
|
let matcher = new case_1.CaseFunction((0, array_1.empty)(cases) ? defaultCases : cases);
|
|
92
104
|
let task = new scheduler_1.Task(this, cb, async () => {
|
|
93
105
|
this._assertValid();
|
|
@@ -100,7 +112,7 @@ class JSThread {
|
|
|
100
112
|
let result = await matcher.apply(msg);
|
|
101
113
|
return cb(null, result);
|
|
102
114
|
}
|
|
103
|
-
this.vm.events.dispatchMessageEvent(this, event_1.EVENT_MESSAGE_DROPPED, address_1.ADDRESS_DISCARD, msg);
|
|
115
|
+
this.vm.events.dispatchMessageEvent(this.address, event_1.EVENT_MESSAGE_DROPPED, address_1.ADDRESS_DISCARD, msg);
|
|
104
116
|
}
|
|
105
117
|
this.state = _1.ThreadState.MSG_WAIT;
|
|
106
118
|
this.vm.scheduler.postTask(task, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js.js","sourceRoot":"","sources":["../../../../../../src/actor/system/vm/thread/shared/js.ts"],"names":[],"mappings":";;;AACA,iEAA8D;AAC9D,sDAAmD;AACnD,6DAI4C;AAC5C,4DAAyD;
|
|
1
|
+
{"version":3,"file":"js.js","sourceRoot":"","sources":["../../../../../../src/actor/system/vm/thread/shared/js.ts"],"names":[],"mappings":"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"}
|
package/lib/actor/template.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { Path } from '@quenk/noni/lib/data/record/path';
|
|
|
2
2
|
import { Err } from '@quenk/noni/lib/control/error';
|
|
3
3
|
import { Runtime } from './system/vm/runtime';
|
|
4
4
|
import { Actor } from './';
|
|
5
|
-
import { EventType } from './system/vm/event';
|
|
6
5
|
export declare const ACTION_RAISE = -1;
|
|
7
6
|
export declare const ACTION_IGNORE = 0;
|
|
8
7
|
export declare const ACTION_RESTART = 1;
|
|
@@ -151,7 +150,3 @@ export declare const SPAWN_CONCERN_ALLOCATED = "allocated";
|
|
|
151
150
|
export declare const SPAWN_CONCERN_STARTED = "started";
|
|
152
151
|
export declare const SPAWN_CONCERN_RECEIVING = "receiving";
|
|
153
152
|
export declare const SPAWN_CONCERN_STOPPED = "stopped";
|
|
154
|
-
/**
|
|
155
|
-
* spawnConcern2Event converts a SpawnConcernLevel to an EventType.
|
|
156
|
-
*/
|
|
157
|
-
export declare const spawnConcern2Event: (level?: SpawnConcernLevel) => EventType;
|
package/lib/actor/template.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.SPAWN_CONCERN_STOPPED = exports.SPAWN_CONCERN_RECEIVING = exports.SPAWN_CONCERN_STARTED = exports.SPAWN_CONCERN_ALLOCATED = exports.fromSpawnable = exports.isProcessTemplate = exports.ACTION_STOP = exports.ACTION_RESTART = exports.ACTION_IGNORE = exports.ACTION_RAISE = void 0;
|
|
4
4
|
const type_1 = require("@quenk/noni/lib/data/type");
|
|
5
|
-
const event_1 = require("./system/vm/event");
|
|
6
5
|
exports.ACTION_RAISE = -0x1;
|
|
7
6
|
exports.ACTION_IGNORE = 0x0;
|
|
8
7
|
exports.ACTION_RESTART = 0x1;
|
|
@@ -37,15 +36,4 @@ exports.SPAWN_CONCERN_ALLOCATED = 'allocated';
|
|
|
37
36
|
exports.SPAWN_CONCERN_STARTED = 'started';
|
|
38
37
|
exports.SPAWN_CONCERN_RECEIVING = 'receiving';
|
|
39
38
|
exports.SPAWN_CONCERN_STOPPED = 'stopped';
|
|
40
|
-
const spawnConcerns = {
|
|
41
|
-
[exports.SPAWN_CONCERN_ALLOCATED]: event_1.EVENT_ACTOR_ALLOCATED,
|
|
42
|
-
[exports.SPAWN_CONCERN_STARTED]: event_1.EVENT_ACTOR_STARTED,
|
|
43
|
-
[exports.SPAWN_CONCERN_RECEIVING]: event_1.EVENT_ACTOR_RECEIVE,
|
|
44
|
-
[exports.SPAWN_CONCERN_STOPPED]: event_1.EVENT_ACTOR_STOPPED
|
|
45
|
-
};
|
|
46
|
-
/**
|
|
47
|
-
* spawnConcern2Event converts a SpawnConcernLevel to an EventType.
|
|
48
|
-
*/
|
|
49
|
-
const spawnConcern2Event = (level = 'allocated') => { var _a; return (_a = spawnConcerns[level]) !== null && _a !== void 0 ? _a : event_1.EVENT_ACTOR_ALLOCATED; };
|
|
50
|
-
exports.spawnConcern2Event = spawnConcern2Event;
|
|
51
39
|
//# sourceMappingURL=template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/actor/template.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/actor/template.ts"],"names":[],"mappings":";;;AAEA,oDAAiE;AAKpD,QAAA,YAAY,GAAG,CAAC,GAAG,CAAC;AACpB,QAAA,aAAa,GAAG,GAAG,CAAC;AACpB,QAAA,cAAc,GAAG,GAAG,CAAC;AACrB,QAAA,WAAW,GAAG,GAAG,CAAC;AAkJ/B,MAAM,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC,WAAW,CAAC;AAEnD,MAAM,eAAe,GAAG,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,aAAa,CAAC;AAE/E;;GAEG;AACI,MAAM,iBAAiB,GAAG,CAAC,IAAc,EAA2B,EAAE,CACzE,IAAA,eAAQ,EAAmB,IAAK,CAAC,MAAM,CAAC,CAAC;AADhC,QAAA,iBAAiB,qBACe;AAE7C;;;;;;;GAOG;AACI,MAAM,aAAa,GAAG,CAAC,IAAe,EAAY,EAAE;IACvD,IAAI,IAAA,iBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,eAAe,CAAC,IAAI,CAAC;YACxB,CAAC,CAAC,EAAE,GAAG,EAAW,IAAI,EAAE;YACxB,CAAC,CAAC,EAAE,MAAM,EAAc,IAAI,EAAE,CAAC;IACvC,CAAC;SAAM,CAAC;QACJ,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AARW,QAAA,aAAa,iBAQxB;AAEW,QAAA,uBAAuB,GAAG,WAAW,CAAC;AACtC,QAAA,qBAAqB,GAAG,SAAS,CAAC;AAClC,QAAA,uBAAuB,GAAG,WAAW,CAAC;AACtC,QAAA,qBAAqB,GAAG,SAAS,CAAC"}
|