From 269c81f0217999367b4180e6a795142cbb2d02e7 Mon Sep 17 00:00:00 2001 From: glenda Date: Sun, 18 Sep 2022 14:55:48 +0000 Subject: Implement remote message passing via pipes! --- runtime/remote.apl | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 runtime/remote.apl (limited to 'runtime') diff --git a/runtime/remote.apl b/runtime/remote.apl new file mode 100644 index 0000000..f696a15 --- /dev/null +++ b/runtime/remote.apl @@ -0,0 +1,28 @@ +REMOTE←{ + fd←⎕PIPE ⍵ + out←{ + msg←{1(2⊃⍵)}⍇⍬ + raw←0 ⎕SERIAL msg + len←(4⍴255)⊤≢raw + _←fd ⎕WRITE len,raw + ∇⍵ + } + in←{ + m←1 ⎕serial fd ⎕read (4⍴255)⊥fd ⎕read 4 + _←m⍈⍵ + ∇⍵ + } + remote←{ + 0≡≢⍵: ⍺∇out&'remote out'⊢⎕self ⍝ Spawn out thread + 1≡≢⍵: ⍺∇⍵,in&'remote in'⊢⎕self ⍝ Spawn in thread + (outid inid)←⍵ + master←⍺ + (from msg)←{1 ⍵}⍇⍬ + _←{ + from≡master: msg⍈outid + from≢master: msg⍈master + }⍬ + ⍺∇⍵ + } + ⎕self remote&'remote'⊢⍬ +} -- cgit v1.2.3