Hi Ralph Thanks a lot for the extensive answer.
I still consider it a trap because it does not do what it tells it does. If I have: say "launching drone"; $drone.engine.start; say "engine started"; After I run the above I got both messages, but no propeller spinning. So I checked start() in and out, because that is where the problem is obviously. But it was not, it was in engine(). And I want my programming language/runtime to tell me if I am doing obviously stupid things. Note that it has nothing to do with the "pyramid of doom". It would make sense in a pure functional environment, but Raku is multi-paradigm, no? Now to be "safe" (as in fail fast) I have to always say "launching drone"; # this intermediate variable is important defensive programming, else it will not explode on Nil if there are stupid errors in engine() my $engine = $drone.engine; $engine.start; say "engine started"; which is the opposite of concise. But Raku is Raku, there is surely a way to make sure that my Nil explodes in my code. Is there a `use FailingNil`? Concerning documentation: I do not know where there is an appropriate place to warn about this behavior. There where we teach how methods are called? Surely it would not have found me. I look up a lot in documentation, but not such trivial stuff. Cheers Konrad From: Ralph Mellor <ralphdjmel...@gmail.com> Sent: Saturday, 5 December 2020 15:58 To: Konrad Bucheli <kbuch...@open-systems.com> Cc: perl6-users <perl6-us...@perl.org> Subject: Re: Missing NullPointerException On Thu, Dec 3, 2020 at 10:20 PM Konrad Bucheli via perl6-users <perl6-us...@perl.org> 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 final analysis, really just unexpected rather than also being a trap? love, raiph [1] http://quotegeek.com/literature/norton-juster/the-phantom-tollbooth/3184/