>> But yeah, the Str class in Raku is much more than a C-string.

Got it.  Thanks Elizabeth.

On Wed, Jun 9, 2021 at 6:45 AM Elizabeth Mattijsen <l...@dijkmat.nl> wrote:

> > On 9 Jun 2021, at 06:34, Paul Procacci <pproca...@gmail.com> wrote:
> >
> > Hopefully a pretty quick question....
> >
> > GIven the following:
> >
> > my Buf $b .= new([72, 105, 0, 32, 97, 103, 97, 105, 110, 0]);
> > say $b.decode;
> >
> > I would expect this to print 'Hi'.
> > Instead it prints 'Hi again'.
> >
> > https://docs.raku.org/type/Buf#(Blob)_method_decode
> >
> > The decode documentation for Buf only states that 'Applies an encoding
> to turn the blob into a Str; the encoding will be UTF-8 by default.'
>
> >
> > The zero (0) in that Buf should imply an end of string yet decode seems
> to want to decode the number of elements instead.
>
> That is an incorrect assumption carried over from C.  In the Raku
> Programming Language, a null byte is a valid grapheme, as it is in
> unicode.  A small change to your program:
>
>     my Buf $b .= new(72, 105, 0, 32, 97, 103, 97, 105, 110, 0);
>     .say for $b.decode.uninames;
>     #####
>     LATIN CAPITAL LETTER H
>     LATIN SMALL LETTER I
>     <control-0000>
>     SPACE
>     LATIN SMALL LETTER A
>     LATIN SMALL LETTER G
>     LATIN SMALL LETTER A
>     LATIN SMALL LETTER I
>     LATIN SMALL LETTER N
>     <control-0000>
>
>
> > Furthermore, If I 'say $b.decode.chars;' it counts the initial null as
> part of Str.
> > In my mind, that means Str doesn't really mean string.
>
> I don't see an initial null in your example.
>
> But yeah, the Str class in Raku is much more than a C-string.
>
>
> > So the question, how does one ACTUALLY decode what's in a buffer to a
> string where it adheres to the semantics of NULL termination for strings
> cleanly.
>
> If you want to include the null byte in your final strings:
>
>     my @strings = $b.decode.comb(/ .*? "\0" /)
>
> would be a way.
>
>
>
> > Another question might be, should decode() follow null terminating
> semantics instead of number of elements in a given Buf.
>
> No.  The C-string semantics are what they are.  They are not the semantics
> used in the Raku Programming Language.
>
>
>
> Liz



-- 
__________________

:(){ :|:& };:

Reply via email to