- `fn name` names a top-level function as a value (E_FNREF, lowers to @fn_<name>); the worker entry point for Job.parallel_for, which checks it takes (int, pointer-like) and returns void. - runtime/native/threads.ll (pthreads) and threads_win.ll (Win32 SRWLOCK/CONDITION_VARIABLE): a pool of one worker per core but one, parked between batches; every thread claims chunks by compare-and-swap. Linked only into programs that use Job/Promise/Sync, by `ludicc -o`, `ludic build` and the test suite's build helper. - Sync.* is real: native mutexes, atomics as cmpxchg retry loops (neither clang takes atomicrw, the PC's rejects seq_consistent), mutex-guarded channels, Sync.cpu_count from the OS. - spawn/despawn on a pool thread stop the program with a located panic. - examples/library/threads.ludic and its test; docs for fn, Job.parallel_for, Job.is_worker. - Reseeded (bootstrap-cfree: out.ll == seed.ll). 141/141 on macOS; jobs, threads and the guard pass on Windows from the reseeded Windows seed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
24 lines
881 B
Markdown
24 lines
881 B
Markdown
---
|
|
id: kw-fn
|
|
name: fn
|
|
category: structure
|
|
kind: keyword
|
|
tokens: fn
|
|
sig: fn name
|
|
tip: A top-level function named as a value - the entry point handed to Job.parallel_for.
|
|
order: 9
|
|
---
|
|
|
|
<code>fn name</code> names a top-level function as a value, so it can be handed to something that calls it later - today, <code>Job.parallel_for</code>, which runs it on worker threads. It is a plain function reference: no closure and nothing captured, so everything the function needs is passed to it (for <code>Job.parallel_for</code>, through its <code>ctx</code> argument). A worker function takes <code>(i: int, ctx)</code> and returns <code>void</code>; the compiler rejects any other shape.
|
|
|
|
```ludic
|
|
program Squares {
|
|
function square(i: int, out: words) -> void { out[i] = i * i }
|
|
|
|
entry {
|
|
let sq = words(1000)
|
|
Job.parallel_for(1000, fn square, sq)
|
|
print(sq[12])
|
|
}
|
|
}
|
|
```
|