Weak hash tables

Scheme Procedure: make-weak-key-hash-table [size]
Scheme Procedure: make-weak-value-hash-table [size]
Scheme Procedure: make-doubly-weak-hash-table [size]
C Function: scm_make_weak_key_hash_table (size)
C Function: scm_make_weak_value_hash_table (size)
C Function: scm_make_doubly_weak_hash_table (size)

Return a weak hash table with size buckets. As with any hash table, choosing a good size for the table requires some caution.

You can modify weak hash tables in exactly the same way you would modify regular hash tables, with the exception of the routines that act on handles. Weak tables have a different implementation behind the scenes that doesn’t have handles. see Hash Tables, for more on hashq-ref et al.

Note that in a weak-key hash table, the reference to the value is strong. This means that if the value references the key, even indirectly, the key will never be collected, which can lead to a memory leak. The reverse is true for weak value tables.

Scheme Procedure: weak-key-hash-table? obj
Scheme Procedure: weak-value-hash-table? obj
Scheme Procedure: doubly-weak-hash-table? obj
C Function: scm_weak_key_hash_table_p (obj)
C Function: scm_weak_value_hash_table_p (obj)
C Function: scm_doubly_weak_hash_table_p (obj)

Return #t if obj is the specified weak hash table. Note that a doubly weak hash table is neither a weak key nor a weak value hash table.