Re: The ,= operator

2020-12-05 Thread ToddAndMargo via perl6-users

Hi All,

I am a little late to this conversation, but `,=`
looks a lot like `push` to me.   Am I missing
something?

-T


Pointer and OpaquePointer

2020-12-05 Thread Marcel Timmerman

Hi,

I would like to know the difference between a Pointer and an 
OpaquePointer. I have found an entry in the FAQ where it stated that 
OpaquePointer is deprecated.


My problem here is that the use of Pointer at several places gives 
irregular errors, hangups or mysterious crashes without stack dumps. 
There was an occasional error from the C library I use which helped me 
out to look at the proper spot which was at changes I recently made from 
OpaquePointer into Pointer.


I would like to know the difference because then I could make proper 
changes using the Pointer type and leave the OpaquePointer to history.


Thanks in advance,
Marcel


Re: Missing NullPointerException

2020-12-05 Thread Konrad Bucheli via perl6-users
The returned Nil aka bug was from my side. But when debugging it took me 
a while to find the culprit because when the statement with the chained 
methods was executed I expected all of them being executed...


So that was a bit of a surprise.

Thanks for the insights!

On 03.12.20 23:25, Elizabeth Mattijsen wrote:

Nil is really a Failure that doesn't throw.  It indicates the absence of a 
value where there is one expected.

That is why Nil doesn't throw.  If you want to indicate a soft failure, you 
should use fail().

If the chain of methods you mention are core methods, and one of them is 
returning Nil, then perhaps we have a bug.  Could you elaborate on the 
situation where you encountered this?


On 3 Dec 2020, at 15:22, Konrad Bucheli via perl6-users  
wrote:



On 02.12.20 15:55, Ralph Mellor wrote:

On Wed, Dec 2, 2020 at 7:08 AM Patrick R. Michaud  wrote:

Nil.any_non_existent method always seems to return Nil.  I'm not sure where 
this is documented

It's near the top of the `Nil` doc page you linked:

Any method call on `Nil` of a method that does not exist ... will succeed and 
return `Nil`.



OK, that is intentional and documented then. What is actually the rationale for 
such a behaviour?

For me it was an unexpected trap as I had a chain of methods which should do 
some side effect. It all went fine only the side effect was not there. I then 
figured out after some time that one of methods returned Nil and somehow 
silently it did not do what I expected.

Thanks

Konrad



--
Konrad Bucheli
Systems Engineering Fellow

O.  +41 58 100 10 10
W.  open-systems.com

Open Systems



smime.p7s
Description: S/MIME Cryptographic Signature


Re: Missing NullPointerException

2020-12-05 Thread Ralph Mellor
On Thu, Dec 3, 2020 at 10:20 PM Konrad Bucheli via perl6-users
 wrote:
>
> What is actually the rationale for such a behaviour?

Ergonomically sound null safety.

First, consider what other languages have. Quoting
https://en.wikipedia.org/wiki/Safe_navigation_operator:

> In object-oriented programming, the safe navigation operator
> ... is used to avoid sequential explicit null checks ...
...
> In programming languages where the navigation operator
> (e.g. ".") leads to an error if applied to a null object, the safe
> navigation operator stops the evaluation of a method/field
> chain and returns null as the value of the chain expression.
...
> It is currently supported in languages such as Apex, Groovy,
> Swift, Ruby, C#, Kotlin, CoffeeScript, Scala, Dart and others.
...
> The main advantage of using this operator is that it avoids the
> pyramid of doom. ...

Many aspects of Raku's design are better solutions than are found
in older PLs like those listed above. This is an example. Instead of
devs having unsafe operations by default, and having to write `?.`
to get safety, in Raku one just writes `.` and always gets safety.

> For me it was an unexpected trap

This statement couples deep wisdom (the "for me" qualification,,
deferring it till after you'd first asked about what the rationale was,
and sharing your experience) with a Canby.[1]

It's clear that you were missing some knowledge, and that it
bit you, and are now exploring how best to learn from that.

I accept without reservation the claim it was "unexpected". (That
is the sort of thing that is typically experienced and reported by
request of our right hemispheres, and it is generally reliable.)

I also recognize what I imagine as a negative effect associated
with classifying this experience / situation as a "trap", and the
negative affect associated with applying that classification, which
is to say your right hemisphere's experience of that classification.

With that said, I now wish to engage our respective unreliable
left hemispheres, the ones that drive classification, and wish to
suggest another way to view this situation.

I would argue that you are classifying safe navigation as a trap,
and thus likely experiencing it negatively. Perhaps for you this
can/will instead become a gift (perhaps also unexpected)?

A fundamental part of human experience is interpreting one's
reactions to things in the light of further knowledge and/or
experience. Larry has made it clear to me that this is one of
the keys to his approach to life, and to PL design, in both the
sense of how he approaches a PL's design and how the PL's
designed features reward those who think the same way. (I
have found this endlessly inspiring.)

Applying that to your experience, you could alternately view
what happened as a surprise that arises from Raku's default
of safety, which is about freedom (avoiding both the extensive
boilerplate of the pyramid of doom, and the modern shorter
but still boilerplate additional ?), and not, it could reasonably
be argued, about a trap.

cf my discussion of what Vadim Belman had classified as a WAT in
https://www.nntp.perl.org/group/perl.perl6.users/2018/09/msg5418.html

> It all went fine only the side effect was not there. I then figured
> out after some time that one of methods returned Nil and
> somehow silently it did not do what I expected.

The "somehow" was automatic safe navigation, By definition,
this is silent as far as it goes.

But if you think about it, it wasn't *entirely* silent. You knew
*something* wasn't working right, because somewhere you
expected a value and didn't get one. So you then had to go
chase that down.

This is another pervasive principle in Larry's design approach.
If a PL tries too hard to avoid programming errors, it becomes
a police state. If it ignores the potential for programming errors
it forgets to introduce things like safe navigation by default.

The sweetspot is a balance between trade offs that overall
lets devs reasonably easily "get" working code (in both the
sense of arriving at it when writing, and comprehending it
when reading), and keep making progress in the event of
things not working out as expected.

I see signs that Raku gets that right a lot of the time for me,
and for others I see using and discussing it, and that the
culture is generally agreeably open to figuring out whether
any given negative experiences are best left as something
for individual involved devs to adapt to, or as necessitating
improvements in the doc, or Raku, or Rakudo, or modules etc

And at the foundation of it all, is our open minded but also
mindful right hemispheres, which it's clear we all share.

Which leads me to a concluding question.

Given your own reflections on the rationale I have described,
and perhaps the wisdom that comes when we "sleep on it",
is your conclusion that it would be best if there were some
change in the doc, or Raku, or Rakudo, etc., or does it make
enough sense now that it was, in the