unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
* rfi: immutable strings
@ 2011-01-07 16:57 Andy Wingo
  0 siblings, 0 replies; 4+ messages in thread
From: Andy Wingo @ 2011-01-07 16:57 UTC (permalink / raw)
  To: guile-devel

Hello,

Guile needs immutable strings.  String literals should be immutable, so
that its characters can come directly from objcode.  Also, the result of
(symbol->string 'foo) should be immutable; currently symbol->string
conses up a new shared substring every time.

In practice this means a flag on the stringbuf.

Takers? :)

Andy
-- 
http://wingolog.org/



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: rfi: immutable strings
@ 2011-01-07 18:52 Mike Gran
  2011-01-08 21:57 ` Ludovic Courtès
  2011-01-27 16:31 ` Andy Wingo
  0 siblings, 2 replies; 4+ messages in thread
From: Mike Gran @ 2011-01-07 18:52 UTC (permalink / raw)
  To: Andy Wingo, guile-devel

> Hello,
> 
> Guile needs immutable strings.  String literals should be immutable, so
> that its characters can come directly from objcode.  Also, the result of
> (symbol->string 'foo) should be immutable; currently symbol->string
> conses up a new shared substring every time.

How is this different from read-only strings?

(BTW, you guys are doing some cool stuff right now.  I wish I could dig in,
but I'll be AWOL for a few more weeks trying to get updates of my other
projects out the door.)

-Mike



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: rfi: immutable strings
  2011-01-07 18:52 Mike Gran
@ 2011-01-08 21:57 ` Ludovic Courtès
  2011-01-27 16:31 ` Andy Wingo
  1 sibling, 0 replies; 4+ messages in thread
From: Ludovic Courtès @ 2011-01-08 21:57 UTC (permalink / raw)
  To: guile-devel

Hi!

>> Guile needs immutable strings.  String literals should be immutable, so
>> that its characters can come directly from objcode.  Also, the result of
>> (symbol->string 'foo) should be immutable; currently symbol->string
>> conses up a new shared substring every time.
>
> How is this different from read-only strings?

Indeed, statically allocated stringbufs are immutable, for instance (see
‘SCM_IMMUTABLE_STRING’ in ‘snarf.h’.)

Read-only strings are also used elsewhere:

--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> (string-set! (symbol->string 'foo) 2 #\x)
ERROR: In procedure string-set!:
ERROR: string is read-only: "foo"
--8<---------------cut here---------------end--------------->8---

Thanks,
Ludo’.




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: rfi: immutable strings
  2011-01-07 18:52 Mike Gran
  2011-01-08 21:57 ` Ludovic Courtès
@ 2011-01-27 16:31 ` Andy Wingo
  1 sibling, 0 replies; 4+ messages in thread
From: Andy Wingo @ 2011-01-27 16:31 UTC (permalink / raw)
  To: Mike Gran; +Cc: guile-devel

On Fri 07 Jan 2011 19:52, Mike Gran <spk121@yahoo.com> writes:

>> Guile needs immutable strings.
>
> How is this different from read-only strings?

Seems to be the same.  We should have read-only string API though;
currently there is only substring API.  One should be able to allocate a
read-only string directly, like via
scm_from_static_latin1_{stringn,symboln}.  Also, strings loaded from
objcode should be read-only, and share storage with the objcode itself;
perhaps?

>> Also, the result of (symbol->string 'foo) should be immutable;
>> currently symbol->string conses up a new shared substring every time.

Though the result is immutable, it does cons up a shared substring,
which involves all kinds of mutex and allocation shenanigans.

Andy
-- 
http://wingolog.org/



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-01-27 16:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-07 16:57 rfi: immutable strings Andy Wingo
  -- strict thread matches above, loose matches on Subject: below --
2011-01-07 18:52 Mike Gran
2011-01-08 21:57 ` Ludovic Courtès
2011-01-27 16:31 ` Andy Wingo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).