1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
//! Types for the memoized WHNF reduction layer.
//!
//! Provides cache key/entry/configuration/statistics types for the WHNF memo
//! table. Cache correctness is guaranteed by including the current environment
//! version in every key: when the environment grows (a new declaration is
//! added), `invalidate_all` bumps `env_version`, rendering all prior entries
//! stale without requiring an explicit scan.
use HashMap;
// ---------------------------------------------------------------------------
// WhnfKey
// ---------------------------------------------------------------------------
/// Cache key for a single WHNF reduction result.
///
/// Including `env_version` ensures that cached reductions are invalidated
/// automatically when the environment changes: a key computed under version `v`
/// will never match an entry stored under version `v'` where `v' != v`.
// ---------------------------------------------------------------------------
// WhnfEntry
// ---------------------------------------------------------------------------
/// A single cached WHNF reduction result.
// ---------------------------------------------------------------------------
// MemoConfig
// ---------------------------------------------------------------------------
/// Configuration parameters for a [`WhnfMemo`] instance.
// ---------------------------------------------------------------------------
// WhnfMemo
// ---------------------------------------------------------------------------
/// Memoization table for WHNF reduction results.
///
/// # Correctness
///
/// Every lookup and insertion is tied to `env_version`. Calling
/// `invalidate_all` bumps the version and clears all entries, guaranteeing
/// that stale results (computed against an older environment) are never
/// returned.
///
/// # Eviction
///
/// When the table reaches `config.max_entries`, `evict_cold` is called
/// automatically during `insert`. Cold entries — those whose `access_count`
/// falls below a threshold derived from `config.eviction_threshold` — are
/// removed. If no cold entries exist the oldest-inserted entry is dropped.
// ---------------------------------------------------------------------------
// MemoStats
// ---------------------------------------------------------------------------
/// A snapshot of [`WhnfMemo`] performance statistics.