Memory Model
This section explains FOL’s V3 memory model: explicit ownership operations
([mov]/[cpy]/[cln]/[bor] and friends) at every transfer boundary,
non-lexical borrows, static places and partial moves, named and elided
lifetimes, capability standards, custom finalization, closure environments,
and the unique/shared/weak/synchronized pointer family. The normative contract
is plan/V3_MEM.md; the first-shipped historical subset is recorded in its
Appendix A.
The main topics are:
- ownership
- pointers
- stack vs heap intuition
- allocation lifetime
- cross-thread memory concerns
The detailed chapters are the normative source. This index also keeps the
published example matrix aligned with the shared machine inventory in
test/v3_example_inventory.rs. Adding, removing, or renaming a mem_* or
fail_mem_* package requires updating both inventories in the same change.
The memory pillar is not complete at compiler acceptance. Each row below is
also guarded through lowering/runtime behavior, frontend capability routing,
structured diagnostics and explanations, formatter/tool commands, LSP
diagnostics/navigation/completion/tokens, Tree-sitter grammar/queries/corpus,
tests, docs, and the book. The exact cross-layer mapping lives in
Compiler Integration
and the repository-level docs/editor-sync.md matrix.
Shipped example inventory
M1: ownership and owned allocation
Positive:
examples/mem_owner_reinitialize_m1examples/mem_set_observation_m1examples/mem_when_bool_gate_m1examples/mem_linked_list_m1examples/mem_tree_m1examples/mem_move_stack_vs_heap_m1examples/mem_partial_move_m1examples/mem_fin_finalizer_m1examples/mem_fin_move_m1examples/mem_fin_early_m1
Negative:
examples/fail_mem_use_after_move_m1examples/fail_mem_loop_move_m1examples/fail_mem_explicit_move_reuse_m1examples/fail_mem_discarded_move_m1examples/fail_mem_deferred_reinit_m1examples/fail_mem_recursive_value_m1examples/fail_mem_heap_in_core_m1examples/fail_mem_uninit_borrow_m1examples/fail_mem_partial_move_m1examples/fail_mem_global_fin_m1examples/fail_mem_fin_partial_move_m1examples/fail_mem_fin_fun_finalizer_m1examples/fail_mem_fin_reuse_m1examples/fail_mem_clone_fin_m1examples/fail_mem_clone_fin_claim_m1examples/fail_mem_generic_copy_bound_m1examples/fail_mem_generic_send_bound_transitive_m1
M2: lexical borrowing and deferred ownership
Positive:
examples/mem_borrow_m2examples/mem_borrow_giveback_m2examples/mem_borrow_param_m2examples/mem_mut_borrow_m2examples/mem_ownership_ops_m2examples/mem_capabilities_m2examples/mem_copy_clone_m2examples/mem_custom_clone_m2examples/mem_borrow_receiver_m2examples/mem_mut_receiver_m2examples/mem_receiver_ops_m2examples/mem_reborrow_m2examples/mem_nll_last_use_m2examples/mem_named_lifetime_m2examples/mem_temp_borrow_m2examples/mem_place_borrow_m2examples/mem_edf_m2examples/mem_dfr_capture_m2examples/mem_dfr_capture_mut_m2examples/mem_closure_capture_m2examples/mem_closure_borrow_m2examples/mem_closure_env_lifetime_m2
Negative:
examples/fail_mem_deferred_report_m2examples/fail_mem_dfr_capture_bare_m2examples/fail_mem_dfr_capture_bor_mutation_m2examples/fail_mem_dfr_capture_undeclared_m2examples/fail_mem_closure_move_only_m2examples/fail_mem_closure_escape_m2examples/fail_mem_closure_env_leak_m2examples/fail_mem_copy_moveonly_m2examples/fail_mem_copy_record_field_m2examples/fail_mem_send_field_m2examples/fail_mem_send_nested_field_m2examples/fail_mem_clone_nested_field_m2examples/fail_mem_share_field_m2examples/fail_mem_owner_while_borrowed_m2examples/fail_mem_second_mut_borrow_m2examples/fail_mem_mut_borrow_immutable_owner_m2examples/fail_mem_borrow_reuse_m2examples/fail_mem_conditional_giveback_m2examples/fail_mem_deferred_giveback_m2examples/fail_mem_ownership_op_combo_m2examples/fail_mem_copy_fin_conflict_m2examples/fail_mem_copy_field_m2examples/fail_mem_copy_nested_field_m2examples/fail_mem_copy_operand_unclaimed_m2examples/fail_mem_fun_mut_receiver_m2examples/fail_mem_escaping_borrow_m2examples/fail_mem_temp_borrow_escape_m2examples/fail_mem_place_borrow_owner_m2
M3: typed pointers
Positive:
examples/mem_ptr_unique_m3examples/mem_ptr_shared_m3examples/mem_ptr_shared_recursive_m3examples/mem_ptr_weak_m3examples/mem_ptr_weak_clone_m3examples/mem_ptr_weak_upgrade_m3examples/mem_ptr_weak_cycle_m3examples/mem_ptr_weak_nested_m3examples/mem_shell_access_m3examples/mem_shell_prefix_m3
Negative:
examples/fail_mem_borrowed_ptr_move_deref_m3examples/fail_mem_ptr_raw_m3examples/fail_mem_ptr_weak_m3examples/fail_mem_shell_access_m3examples/fail_mem_ptr_in_core_m3examples/fail_mem_pointer_field_deref_m3examples/fail_mem_shared_ptr_move_deref_m3examples/fail_mem_shared_ptr_write_m3