[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Guile: What's wrong with this?
From: |
Ludovic Courtès |
Subject: |
Re: Guile: What's wrong with this? |
Date: |
Wed, 04 Jan 2012 22:07:58 +0100 |
User-agent: |
Gnus/5.110018 (No Gnus v0.18) Emacs/24.0.90 (gnu/linux) |
Hi!
Mike Gran <address@hidden> skribis:
>> In many systems it is desirable for constants (i.e. the values of literal
>> expressions) to reside in read-only-memory. To express this, it is
>> convenient to imagine that every object that denotes locations is
>> associated with a flag telling whether that object is mutable or immutable.
>> In such systems literal constants and the strings returned by
>> `symbol->string' are immutable objects, while all objects created by
>> the other procedures listed in this report are mutable. It is an error
>> to attempt to store a new value into a location that is denoted by an
>> immutable object.
[...]
> The idea that the correct way to initialize a string is
> (define x (string-copy "string")) is awkward. "string" is a read-only
> but copying it makes it modifyiable? Copying implies mutability?
Sort-of:
-- library procedure: string-copy string
Returns a newly allocated copy of the given STRING.
And a “new allocated copy” is mutable.
> Copying doesn't imply modifying mutability in any other data type.
It’s not about modifying mutability of an object (this can’t be done),
but about fresh vs. constant storage.
> Why not change the behavior 'define' to be (define y (substring str 0)) when
> STR
> is a read-only string? This would preserve the shared memory if the variable
> is never
> modified but still make the string copy-on-write.
I think all sorts of literal strings would have to be treated the same.
FTR, all these evaluate to #t:
(apply eq? "hello" '("hello"))
(apply eq? '(1 2 3) '((1 2 3)))
(apply eq? '#(1 2 3) '(#(1 2 3)))
This is fine per R5RS (info "(r5rs) Equivalence predicates"), but
different from Guile <= 1.8.
(I use ‘apply’ here to fool peval, which otherwise evaluates the
expressions to #f at compile-time. Andy: should peval be hacked to give
the same answer?)
Thanks,
Ludo’.
- Re: The empty string and other empty strings, (continued)
- Re: Guile: What's wrong with this?, David Kastrup, 2012/01/06
- Re: Guile: What's wrong with this?, David Kastrup, 2012/01/05
- Re: Guile: What's wrong with this?, Ludovic Courtès, 2012/01/04
- Re: Guile: What's wrong with this?, Mike Gran, 2012/01/03
- Re: Guile: What's wrong with this?, nalaginrut, 2012/01/04
- Re: Guile: What's wrong with this?, David Kastrup, 2012/01/04
- Re: Guile: What's wrong with this?,
Ludovic Courtès <=
- Re: Guile: What's wrong with this?, Mark H Weaver, 2012/01/04
- Re: Guile: What's wrong with this?, Mike Gran, 2012/01/04
- Re: Guile: What's wrong with this?, David Kastrup, 2012/01/04
- Re: Guile: What's wrong with this?, Andy Wingo, 2012/01/04
- Re: Guile: What's wrong with this?, David Kastrup, 2012/01/04
- Re: Guile: What's wrong with this?, Andy Wingo, 2012/01/04
- Re: Guile: What's wrong with this?, David Kastrup, 2012/01/04
- Re: Guile: What's wrong with this?, Andy Wingo, 2012/01/04
- Re: Guile: What's wrong with this?, Bruce Korb, 2012/01/04
- Re: Guile: What's wrong with this?, David Kastrup, 2012/01/04