feat(launcher): Process.*, Http.save_to/received/expected, App.window_hide/show
Process.spawn/poll/kill/free - non-blocking child processes with no shell: posix_spawn on macOS (process.ll), CreateProcessW with MSVC-quoted arguments and no console window on Windows (process_win.ll), linked only when a program uses Process.*. Http.save_to streams a response body into a file (NSURLSession with a run-time delegate class on macOS, the WinHTTP read loop on Windows); Http.received / Http.expected report progress while it is pending. Freeing a pending request cancels it and parks the slot until the worker has finished. App.window_hide / App.window_show take the game's window off the screen and back without closing it; the run goes on while hidden. Docs, examples, tests and a changeset. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
c1db0d71ed
commit
43d5eb5b88
31 changed files with 89274 additions and 86727 deletions
27
docs/language/process/process-spawn.md
Normal file
27
docs/language/process/process-spawn.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
---
|
||||
id: process-spawn
|
||||
name: Process.spawn
|
||||
category: process
|
||||
kind: namespace-method
|
||||
tokens: Process.spawn
|
||||
sig: Process.spawn(path, args) -> int
|
||||
tip: Start a program; never blocks.
|
||||
order: 0
|
||||
ns: Process
|
||||
member: spawn
|
||||
---
|
||||
|
||||
Starts the program at <code>path</code> with the arguments in <code>args</code> (a <code>[]string</code>; the child's <code>argv[0]</code> is <code>path</code>) and returns a handle <code>>= 0</code> straight away, or <code>-1</code> when the program could not be started — a missing file, a file that is not executable, or all 16 handles in use.
|
||||
|
||||
No shell is involved, so every argument reaches the child exactly as written: spaces, quotes and <code>$</code> are not interpreted. The child inherits this process's environment and working directory. On Windows the arguments are joined into one command line quoted so the child's C runtime splits it back into the same list, the path and arguments cross as UTF-8 and are converted to UTF-16, and the child is started without a console window (a GUI program is unaffected; a console program runs hidden). Use an absolute path: there is no <code>PATH</code> search.
|
||||
|
||||
```ludic
|
||||
program Demo {
|
||||
entry {
|
||||
let h = Process.spawn("/bin/sh", ["-c", "exit 3"])
|
||||
print(h >= 0)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
See <a href="process-poll.html"><code>Process.poll</code></a> for the exit code.
|
||||
Loading…
Add table
Add a link
Reference in a new issue