interesting the ELF file argument :-) ,i understand the idea, like a Turing machine that protect some part of ribbon... it is the same thing with arrays scheme@(guile-user)> (define vct '#(1 2 3)) scheme@(guile-user)> vct #(1 2 3) scheme@(guile-user)> (vector-set! vct 1 7) ice-9/boot-9.scm:1669:16: In procedure raise-exception: In procedure vector-set!: Wrong type argument in position 1 (expecting mutable vector): #(1 2 3)
works in Chicken scheme: (define vct '#(1 2 3)) (vector-set! vct 1 7) but no restrictions with lists in Guile: scheme@(guile-user)> (define lst '(1 2 3)) scheme@(guile-user)> (set-car! lst 7) scheme@(guile-user)> lst (7 2 3) which seems not logic.(but i recognize the behavior of Scheme of '80 even if i no more use set-car! and set-cdr!) Damien On Wed, Aug 3, 2022 at 11:41 AM Maxime Devos <maximede...@telenet.be> wrote: > > On 03-08-2022 11:12, Damien Mattei wrote: > > scheme@(guile-user)> (define str2 "hello") > > scheme@(guile-user)> (string-set! str2 4 #\a) > > ice-9/boot-9.scm:1669:16: In procedure raise-exception: > > string is read-only: "hello" > > It's not -- the existence of read-only strings is implied by > substring/read-only, and also see: > > > (guile)Object File format > > Typically all segments of an ELF file are marked as read-only, except > > that part that represents modifiable static data or static data that > > needs load-time initialization. Loading an ELF file is as simple as > > mmapping the thing into memory with read-only permissions, then using > > the segment table to mark a small sub-region of the file as writable. > > This writable section is typically added to the root set of the garbage > > collector as well. > > I'm not aware of explicit documentation that string literals may not be > modified (and in this case, cannot be modified). However, see the > following mail on string mutability and program text: > > https://lists.gnu.org/archive/html/guile-devel/2012-01/msg00135.html > > and maybe surrounding definitions. > > Greetings, > Maxime. > >