>> That C null is an int pointer, longer than a single byte.

Yep, no arguments there.  ;)

On Wed, Jun 9, 2021 at 11:06 AM yary <not....@gmail.com> wrote:

> That C null is an int pointer, longer than a single byte.
>
> On Wed, Jun 9, 2021 at 11:04 AM Paul Procacci <pproca...@gmail.com> wrote:
>
>> Not sure about the 80's, my programming endeavors started in the 90's.
>> NUL doesn't exist in the C standard so I have no comment on it.
>> The C standard defines that 0 cast to the type void * is both a null
>> pointer and a null pointer constant.
>> I always have and most likely will continue using 0 over NULL rightly or
>> otherwise; though tend to use either/or when describing something ... as
>> Elizabeth pointed out.
>>
>> Potato vs Potatoe I guess.
>> ~Paul
>>
>> On Wed, Jun 9, 2021 at 10:20 AM yary <not....@gmail.com> wrote:
>>
>>> 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
>>>>
>>>>
>>>>
>>>> --
>>>> __________________
>>>>
>>>> :(){ :|:& };:
>>>>
>>>
>>
>> --
>> __________________
>>
>> :(){ :|:& };:
>>
> --
> -y
>


-- 
__________________

:(){ :|:& };:

Reply via email to