[racket] FW: weakly held symbols?

From: Carl Eastlund (carl.eastlund at gmail.com)
Date: Tue Jan 28 12:12:33 EST 2014

Racket will generally not release keys that are quoted literals in your
program.  Try building your keys using symbol->string.
On Jan 28, 2014 8:16 AM, "Jos Koot" <jos.koot at gmail.com> wrote:

>  Things work now as I expect for weak boxes, but I am still confused
> about weak hash tables. I do the following:
>
> #lang racket
>
> (define h (make-weak-hash))
>
> (define keys
>  (for/list ((key (in-list '(a b c d e f))))
>   (make-weak-box key) ; <--- 1
> ;  key ; <--- 2
>   ))
>
> (define (enter key value)
>  (will-register will-executor value will-proc)
>  (set! enter-counter (add1 enter-counter))
>  (hash-set! h key value))
>
> (define-syntax-rule (while condition expr ...)
>  (let loop () (when condition expr ... (loop))))
>
> (define will-executor (make-will-executor))
> (define (will-proc v) (set! release-counter (add1 release-counter)) #t)
> (define enter-counter 0)
> (define release-counter 0)
> (define range (in-range 6))
> (for ((key (in-list keys)) (value range)) (enter key (list value)))
> (list enter-counter release-counter) ; -> (6 0) ok
> h ; -> hash with 6 entries, ok
> (set! keys #f) ; discard all keys
> (collect-garbage) (collect-garbage)(collect-garbage) (collect-garbage)
> (while (will-try-execute will-executor))
> (list enter-counter release-counter) ; -> (6 6) ok
> h  ; -> empty hash, ok
>
> So far ok. However, when commenting out line <--- 1 and uncommenting line
> <--- 2, I would expect the same results, but I find:
>
> (6 0) ; ok
> hash with 6 entries ; ok
> (6 0) ; a surptrise for me
> hash with 6 entries ; a surprise for me
>
> This is the cause of my confusion. Surely I am misinterpreting the docs.
> Help much appreciated.
>
> Thanks again, Jos
>
>
>
>
>  ------------------------------
> *From:* Carl Eastlund [mailto:carl.eastlund at gmail.com]
> *Sent:* martes, 28 de enero de 2014 1:28
> *To:* Jos Koot
> *Cc:* Racket Users
> *Subject:* Re: [racket] FW: weakly held symbols?
>
>   This isn't a typo.  The docs are talking about the properties of the
> symbol tables for interned and unreadable symbols.  There is no symbol
> table for uninterned symbols, so it wouldn't mean anything to talk about it.
>
> Here's what this means for an interned symbol: you can create one, and
> while a reference to it exists, it stays in the symbol table.  Any time you
> intern the same string, you'll get back that symbol.  However, if all
> references to that symbol vanish, the symbol table is free to release that
> symbol.  If anyone interns the same string again later, a new symbol will
> be created.  For nearly all purposes, this is completely transparent,
> because you couldn't possibly have a copy of the old symbol to compare.
> There's almost no way to tell that the symbol you got before and the one
> you got after were different.  The only way you'd ever know would be either
> by tracking memory use statistics, or by comparing the results of something
> like eq-hash-code, neither of which should be surprising to find out
> behaves impurely.
>
> Carl Eastlund
>
>
> On Mon, Jan 27, 2014 at 5:53 PM, Jos Koot <jos.koot at gmail.com> wrote:
>
>>  It appears that my previous email was not sent completely. Sorry for
>> that. Here is the complete question.
>>
>>  Hi to all,
>>
>> Section "3.6 symbols" of the Racket reference manual states:
>>
>> Interned and unreadable symbols are only weakly held ... but a symbol
>> maay disappear when ... used as the key in a weak hash table ...".
>>
>> I would understand:
>>
>> UNINTERNED and unreadable symbols are only weakly held ... but a symbol
>> may disappear when ... used as the key in a weak hash table ...".
>>
>> May be just a typo, but as I am not sure I understand the docs well, I
>> post my question here instead of posting a bug report.
>>
>> Greetings, Jos
>>
>> ____________________
>>   Racket Users list:
>>   http://lists.racket-lang.org/users
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140128/2a42debe/attachment.html>

Posted on the users mailing list.