comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Top 10 Worst C# Features
Date: Thu, 3 Sep 2015 15:59:16 +0200
Date: 2015-09-03T15:59:16+02:00	[thread overview]
Message-ID: <1o5jnawezlf9a$.lyy575p61sic.dlg@40tude.net> (raw)
In-Reply-To: ms9cm8$leh$1@dont-email.me

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

  reply	other threads:[~2015-09-03 13:59 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-02 10:59 Top 10 Worst C# Features Stefan.Lucks
2015-09-02 17:37 ` Álex R. Mosteo
2015-09-02 19:39 ` Randy Brukardt
2015-09-03  8:14   ` Georg Bauhaus
2015-09-03  9:26     ` Dmitry A. Kazakov
2015-09-03 11:39       ` G.B.
2015-09-03 12:00         ` G.B.
2015-09-03 13:59           ` Dmitry A. Kazakov [this message]
2015-09-03 19:12           ` Randy Brukardt
2015-09-04  7:33             ` Georg Bauhaus
2015-09-04 21:34               ` Randy Brukardt
2015-09-05  6:31                 ` Dmitry A. Kazakov
2015-09-05  6:44                 ` Georg Bauhaus
2015-09-05  7:07                   ` Dmitry A. Kazakov
2015-09-05  6:45                 ` Niklas Holsti
2015-09-05  7:21                   ` Dmitry A. Kazakov
2015-09-05 12:07                   ` Peter Chapin
2015-09-06 10:45                   ` Georg Bauhaus
2015-10-13 19:57                   ` Eryndlia Mavourneen
2015-09-05  7:16                 ` Shark8
2015-09-03 13:47         ` Dmitry A. Kazakov
2015-09-03  8:51 ` gautier_niouzes
2015-10-01 14:03 ` Paul Colin de Gloucester
2015-10-14  8:00   ` Maciej Sobczak
2015-10-14 14:26     ` Ben Bacarisse
2015-10-14 16:50       ` Paul Rubin
2015-10-14 18:17         ` Stefan.Lucks
2015-10-14 19:54           ` Ben Bacarisse
2015-10-15 12:24       ` Maciej Sobczak
2015-10-15 13:59         ` Ben Bacarisse
2015-11-06 14:50     ` Nicholas Collin Paul de Gloucester
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox