Opened 13 years ago
Last modified 13 years ago
#905 closed defect
Unreliable behavior of hash tables with symbols as keys (regression wrt 4.7.4) — at Version 2
| Reported by: | Ivan Raikov | Owned by: | |
|---|---|---|---|
| Priority: | critical | Milestone: | 4.9.0 |
| Component: | core libraries | Version: | 4.8.x |
| Keywords: | Cc: | ||
| Estimated difficulty: |
Description (last modified by )
The nemo program relies heavily on performing transformations over hash tables with symbols as keys. It works fine with Chicken 4.7.4, but unfortunately there seems to have been a regression in 4.8.0rc1, which results in hash-table-exists? and hash-table-ref failing to find any of the existing keys in the table after a number of transformations have been performed.
The following code reproduces the issue:
(use srfi-1 srfi-69)
(define t (make-hash-table hash: symbol-hash))
(hash-table-set! t 'k1 1)
(hash-table-ref t 'k1)
(for-each
(lambda (k v)
(printf "hash-table-set! ~A ~A~%" k v)
(hash-table-set! t k v))
(list-tabulate 10 (lambda (i) (gensym 'k)))
(list-tabulate 10 (lambda (i) i))
)
(print (hash-table->alist t))
(print (hash-table-ref t 'k15))
Perhaps the hash tables stop working after some garbage collections have been performed. This issue is not entirely new; nemo previously used the environments egg, which was also exhibiting similar unreliable behavior, so I had resorted to using strings instead of symbols as keys. Any advice on how to debug this would be appreciated.
Change History (2)
comment:1 Changed 13 years ago by
| Description: | modified (diff) |
|---|
comment:2 Changed 13 years ago by
| Description: | modified (diff) |
|---|
