Parallel Luau
Actor scripts, parallel blocks, and typed messages
A file named worker.server.actor.aly builds into an Actor. A parallel do block runs in the parallel phase, and the compiler refuses the writes the engine refuses. A message types both ends of SendMessage, and its reply comes back to any script.
Alloyparallel.aly
1export message Scan(parts: { BasePart }) reply(fallen: { BasePart }) 2 3export function scan(parts: { BasePart }): { BasePart } 4 const fallen: { BasePart } = {} 5 parallel do 6 for _, part in parts do 7 if part.Position.Y < 0 then table.insert(fallen, part) end 8 end 9 end 10 return fallen 11end
Emitted Luausame line count
1local __alloy = require("@alloy") local Scan = __alloy.message("Scan", 1) 2 3local function scan(parts: { BasePart }): { BasePart } 4 const fallen: { BasePart } = {} 5 task.desynchronize() do 6 for _, part in parts do 7 if part.Position.Y < 0 then table.insert(fallen, part) end 8 end 9 task.synchronize() end 10 return fallen 11end return { Scan = Scan, scan = scan }
- An actor script such as
worker.server.actor.alybuilds as the Actorworkerwith the Script inside. There,Scan.on(function(parts, respond) respond(scan(parts)) end)binds the handler. - The block keeps its lines:
task.desynchronize()andtask.synchronize()go on the lines of its header and itsend. - The compiler refuses an Instance write that it can see,
Instance.new,Destroy,Clone,await, and areturnout of the block. It reads this file only, so the check is a guard rail, not a proof. Scan.fire(worker, parts)sends from any script, andScan.repliedtakes the answer in any script.as parallelruns a handler in the parallel phase.- The reference:
actor,parallel,message,reply, and the reportsParallelErrorandActorError.
