>From my early 1980s days learning programming, ASCII CHR 0 is not null, it
is NUL (can type it as ctrl-@) it's a control character much like the
others.

Ctrl-G BEL, it was fun putting you in file names...

On Wed, Jun 9, 2021, 9:56 AM Paul Procacci <pproca...@gmail.com> wrote:

> >> 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