Post-deletion cleanup (units run only on wasm): - types.h/compiler.cpp: drop the native-era SharedUnit fields so_name, bin_file_name, and the opt_so_optional cache-mode plumbing (no native optional .so path remains). The per-unit compile lock is re-keyed from so_name+.lock to wasm_name+.lock (still per-unit). - unit_info() and to_string(SharedUnit*) no longer expose .so artifact fields. - backend.h: drop the stale "+ fallback-token gate" comment. - Docs/comments corrected to wasm-only reality: README, tests/README, site/doc C++ preprocessor + error_pages + unit_info pages, site/info intro, site/demo/unit-browser artifact card; the Phase-5 native-vs-wasm benchmark harness (tests/wasm_benchmark.py) reframed for the wasm-only backend. Audit confirmed no live references remain to so_handle, load_shared_unit, compiler_load_shared_unit, compiler_invoke*/_cli/_websocket/_serve_http, COMPILE_SCRIPT/COMPILE_WASM_UNITS, or the native export-symbol constants; request_ref_handler/dv_call_handler are kept (live wasm funcref casts). Swept via the pi agent (delegated to a gpt-5.3-codex-spark sub-model); independently re-verified on the host: run_cli_tests --include-wasm-kill => 87 passed, 0 failed, 0 skipped. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
51 lines
1.2 KiB
Plaintext
51 lines
1.2 KiB
Plaintext
:title
|
|
INIT
|
|
|
|
:sig
|
|
INIT(Request& context)
|
|
|
|
:see
|
|
>1_COMPONENT
|
|
>1_ONCE
|
|
>1_RENDER
|
|
>1_WS
|
|
>3_C++ Preprocessor
|
|
>unit_call
|
|
|
|
:content
|
|
Defines a worker-load hook for the current `.uce` unit.
|
|
|
|
When a worker instantiates the unit's compiled wasm module, the runtime checks whether the unit exposes `INIT(Request& context)`. If it does, the hook runs once for that instance before the unit begins serving requests from that worker-local copy.
|
|
|
|
Because UCE usually loads units on demand during a request, `INIT()` still receives a valid `Request& context`. Use it for worker-local initialization, not for request-local state that should reset each request.
|
|
|
|
## Typical Uses
|
|
|
|
- warm caches or parse static lookup data into globals
|
|
- initialize worker-local helper state for expensive component trees
|
|
- perform one-time registration work for that unit's in-memory copy
|
|
|
|
## Example
|
|
|
|
```cpp
|
|
std::map<String, String> cached_labels;
|
|
|
|
INIT(Request& context)
|
|
{
|
|
if(cached_labels.empty())
|
|
cached_labels["ready"] = "Ready";
|
|
}
|
|
|
|
COMPONENT(Request& context)
|
|
{
|
|
<>
|
|
<p><?= cached_labels["ready"] ?></p>
|
|
</>
|
|
}
|
|
```
|
|
|
|
## Related Concepts
|
|
|
|
- PHP: opcode-cache preload or one-time bootstrap work per worker process
|
|
- JavaScript / Node.js: module-load initialization or lazy singleton setup
|