From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Top 10 Worst C# Features Date: Thu, 3 Sep 2015 15:59:16 +0200 Organization: cbb software GmbH Message-ID: <1o5jnawezlf9a$.lyy575p61sic.dlg@40tude.net> References: Reply-To: mailbox@dmitry-kazakov.de NNTP-Posting-Host: jSS3it0g+GyWYSMU5pi+5g.user.speranza.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: 40tude_Dialog/2.0.15.1 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:27698 Date: 2015-09-03T15:59:16+02:00 List-Id: On Thu, 3 Sep 2015 14:00:52 +0200, G.B. wrote: > On 03.09.15 13:39, G.B. wrote: >>> An object of a type is *same* in all contexts, because the type is same. >> >> While an object doesn't change either identity or type, >> it does changes state. This is an event, too. > > Seen from a different angle: > What could a type system have to offer to GUI programming? > Some kinds of "event" are as ubiquitous in GUI programming > as they are essential. Can this be made static? Yes it can. See below. > AFAICT, today we have string literals identifying things > that can be called (Gtk), or we have selectors (Objective-C) > for a similar thing, etc. GtkAda has typed events on top of untyped Gtk events. The problem with it is that it is reversed. The interface is of the button, e.g. it is the primitive operations of the button (e.g. On_Button_Clicked), which is useless in most cases. It should have been of the widget handling button events: Button ---------event----------> Handler widget | On_Button_Clicked The operation, and types hierarchy, must be on the right. The controlling parameter is not Button but the handler widget. > A mouse click or gesture is thus > another kind of event to which programmers might want to attach > something that reacts. How would static type systems help, > knowing that trying to make them help has allegedly failed > in the past? The design is that you have a handler interface, e.g. of a button events handler with the primitive operations of event notifications. The widget catching button events implements this interface. Note that differently to Ada or C++ interfaces this one is additive. I.e. if you handle more than one button, the inherited interfaces of do not coalesce. Other examples of this type of inheritance is doubly-linked list header, queue element etc. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de