Skip to content

Callable Address Decontamination

Public Janus APIs no longer ask users to pass callable addresses as integers.

Actor and grain helpers in std.cluster.local now accept typed callables such as func(u64, i64) -> i64 directly:

let actor_id = cluster.local_start_actor(
system,
0 as u64,
cluster.POLICY_PERMANENT,
user_handler,
)

The compiler lowers the callable to an internal runtime entry identifier when calling the bridge. That representation is not a user-facing u64 API.

Generated actor and grain starters remain the preferred surface for normal application code. Bridge wrappers may still carry RuntimeEntryId = u64 plumbing internally, but docs, examples, and teaching material should not ask users to manufacture function addresses with std.mem.address_of.