From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.5-pre1 Path: eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!goblin1!goblin.stu.neva.ru!newsfeed.pionier.net.pl!pwr.wroc.pl!news.wcss.wroc.pl!not-for-mail From: antispam@math.uni.wroc.pl Newsgroups: comp.lang.ada Subject: Re: Multiple dispatch in Julia Date: Sun, 15 Nov 2020 14:32:38 +0000 (UTC) Organization: Politechnika Wroclawska Message-ID: References: <6faed833-462a-4b4b-b555-9a632fd7caddn@googlegroups.com> NNTP-Posting-Host: hera.math.uni.wroc.pl X-Trace: z-news.wcss.wroc.pl 1605450758 23810 156.17.86.1 (15 Nov 2020 14:32:38 GMT) X-Complaints-To: abuse@news.pwr.wroc.pl NNTP-Posting-Date: Sun, 15 Nov 2020 14:32:38 +0000 (UTC) Cancel-Lock: sha1:uDvOOvFGAu306zobs99SYxu7Uf8= User-Agent: tin/2.4.3-20181224 ("Glen Mhor") (UNIX) (Linux/4.19.0-10-amd64 (x86_64)) Xref: reader02.eternal-september.org comp.lang.ada:60587 List-Id: Dmitry A. Kazakov wrote: > On 15/11/2020 13:43, antispam@math.uni.wroc.pl wrote: > > Dmitry A. Kazakov wrote: > >> On 13/11/2020 13:55, antispam@math.uni.wroc.pl wrote: > >>> Dmitry A. Kazakov wrote: > >>>> On 12/11/2020 22:22, antispam@math.uni.wroc.pl wrote: > >>>>> Dmitry A. Kazakov wrote: > >>>>>> On 12/11/2020 18:56, antispam@math.uni.wroc.pl wrote: > >>>>>>> Dmitry A. Kazakov wrote: > >>>> > >>>> Either you have static typing or not. But there is no disagreement. You > >>>> said you do not know how to implement multiple dispatch (while keeping > >>>> the language statically typed), I said same thing. > >>> > >>> I do not see why failure (error) during dispatch would > >>> conflict with static typing. > >> > >> Because it violates typing. A multiple dispatch method is declared as > >> acting on the whole Cartesian product of classes of arguments and/or the > >> result. Violating that is type error. In Ada you cannot declare such > >> methods ARM 3.9.2 (12). > > > > OK, Ada defines it own terminology, conflicting with terminology > > used outside Ada. Since this discussion clearly goes beyond > > Ada features my assumption was that general terminology applies. > > No, it is not a terminology issue. When an operation is declared it is > on all possible values of the arguments, unless explicitly stated otherwise. Well, in typical multiple dispatch laggage method (operation) declaration is split into several part. First part just introduces name. Without extra info such method applies to no arguments. Then there are definitions of specializations, each specialization has corresponding tuple of types and is potentially applicable to any combination of derived types. Language rules explicitely say that operation is applicable if and only if there is applicable specialization. Unapplicable argument combination propagates exception. Dispatch rules says which specialization will be run if there are multiple potentially applicable specializations. Once you have all specializations there are no doubt which combinantion of argument types are valid. > So if you declare Print acting on the closure of the class rooted in the > type Device and the closure of the class rooted in the type Shape, it > *must* work on all instances from there. > > If you wanted to limit the set of instances, you must have declared that > in some form upfront. That is an elementary language design principle, > what you see is what you get. The reader must understand the meaning of > a declaration. > > The problem is that this is not possible to do. There is no contract of > a multiply-dispatching operation in languages like Julia. Which is why > it is a type error or an undefined behavior. I did not look at Julia rules. But languages which I know give tight contract on multiple dispatch. > >> If you can > >> detect that the result is incorrect would such detection magically make > >> it right? > > > > Standard Ada detects overflow instead of returning result. > > Is Ada wrong? > > The result is returned. Here the result is propagation of Constraint_Error. > > If you contracted the multiple-dispatch operation Print to propagate > exception on *certain* combinations of arguments that would not be a > fault either. The problem is with [un]certainty. There is no uncertainty: language rules and program text exactly specify which argument combinations propagate exception and which go to specific implementation. -- Waldek Hebisch