comp.lang.ada
 help / color / mirror / Atom feed
From: "Warren W. Gay VE3WWG" <ve3wwg@cogeco.ca>
Subject: Re: A community Windows binding
Date: Thu, 14 Oct 2004 12:46:34 -0400
Date: 2004-10-14T12:46:34-04:00	[thread overview]
Message-ID: <J3ybd.26153$hk6.997543@news20.bellglobal.com> (raw)
In-Reply-To: <2smd6iF1mo0mcU1@uni-berlin.de>

Nick Roberts wrote:
> Jeffrey Carter wrote:
>> Between callbacks and the single queue of events for all windows of 
>> JEWL is an approach more suited to concurrent languages: multiple 
>> queues, one per top-level window, with the assumption of one task per 
>> queue/window. There should be the ability to select what events will 
>> be put in the queue, and the possibility to combine queues when a 
>> window doesn't merit its own task. Such an approach should scale 
>> better than JEWL's single queue, and be more readable than callbacks.
> 
> I have long felt that the approach most suited to a concurrent language 
> (such as Ada) is for the 'window manager' to be a separate task, or 
> possibly many tasks.

At the end of the day, a task begins to look like a callback,
with the exception that the delivery mechanism is different.

I can only see 4 ways to deal with GUI events :

1. The JEWL big main loop approach
2. The callback approach (Windows)
3. The "pipeline" event approach (X Window)
4. The "method" calls in an OO structure for
    certain events (Java/C#), and the use of
    inheritance to gain control during certain
    events. This is very similar to #2, except
    that inheritance allows installed callbacks
    through overrides.

Ada tasks IMHO, are a variation of #2. In fairness,
#4 is very similar to #2 as well.

I don't believe #1 is practicle for a large application:
   - the main loop is too large code-wise
   - many cases (harder to modularize)
   - unwanted coupling between cases is possible through
     shared objects/code in the module containing
     the main loop(though this can be avoided).

People dislike #2 for various reasons:
   - perhaps complexity
   - distributed code (too little coupling?)
   - difficulties with "user data" parameter/type

The X Window approach has its own problems:
   - performance: latency between request and
     event response (in synchronous mode), but
     this makes error handling easy and neat.
   - error handling: (asynchronous mode) it is
     very messy tracking requests vs returned
     responses (often X Window programs ignore
     returned errors because they were n events
     ago). This leads too poor quality of app.

My biggest beef for callbacks and similar techniques
is the need for the "user data" parameter. I don't
have a problem with the callback mechanism itself,
but for Ada the "user data" type and parameter is
usually a problem.

If however, some main object for an application
was used and made available in every callback,
then the application can extend that and gain
access to custom application values. I seem
to recall that some GUIs do it this way, which
seems about right to me.

...
> All that a simple program (with no separate tasks of its own) needs to 
> do is to set up the components, and register them with the window 
> manager. 

But the process is much the same. Registering a callback or
an object, is a very similar process (or burden ;-)

-- 
Warren W. Gay VE3WWG
http://home.cogeco.ca/~ve3wwg



  parent reply	other threads:[~2004-10-14 16:46 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <usm8shkul.fsf@acm.org>
2004-10-05 23:28 ` A community Windows binding Stephen Leake
2004-10-06  4:26   ` David Botton
2004-10-06 17:42     ` Jeffrey Carter
2004-10-07 16:33       ` Warren W. Gay VE3WWG
2004-10-07 17:37         ` Jeffrey Carter
2004-10-08  2:39           ` Alexander E. Kopilovich
2004-10-08  2:43           ` Nick Roberts
2004-10-08  4:56             ` tmoran
2004-10-08 23:17             ` chris
2004-10-09  1:31             ` Jeffrey Carter
2004-10-09  1:36             ` Jeffrey Carter
2004-10-09  3:15               ` Steve
2004-10-09  6:23                 ` tmoran
     [not found]                 ` <z7ybd.26154$hk6.998363@news20.bellglobal.com>
2004-10-15  1:12                   ` Stephen Leake
2004-10-15 20:36                     ` David Botton
2004-10-17 13:25                       ` Stephane Riviere
2004-10-09 13:20               ` Stephen Leake
2004-10-10  9:04                 ` CBFalconer
2004-10-10 14:39                   ` Stephen Leake
2004-10-14 16:54                     ` Warren W. Gay VE3WWG
2004-10-14 16:53                   ` Warren W. Gay VE3WWG
2004-10-10  3:38               ` David Botton
2004-10-14 16:46             ` Warren W. Gay VE3WWG [this message]
     [not found]           ` <rSftVP19_F@VB1162.spb.edu>
2004-10-08  8:18             ` Marius Amado Alves
2004-10-08  1:36         ` Stephen Leake
2004-10-06  4:28   ` CBFalconer
2004-10-06  6:02     ` tmoran
2004-10-06 11:35     ` Georg Bauhaus
2004-10-06 14:04       ` Steve
2004-10-06  6:22   ` Fionn mac Cuimhaill
2004-10-06 17:18   ` Nick Roberts
2004-10-07  6:38   ` Frank Piron
2004-10-07  9:44   ` Ross Higson
2004-10-07 16:39     ` Warren W. Gay VE3WWG
2004-10-07 22:27       ` Ross Higson
     [not found] <41664D4E.7040405@netcabo.pt>
2004-10-08 21:38 ` Alexander E. Kopilovich
     [not found] <uacv0hhj0.fsf_-_@acm.org>
2004-10-10 18:05 ` Stephen Leake
2004-10-10 18:17   ` Andre
2004-10-10 20:55     ` tmoran
2004-10-11  0:34   ` David Botton
2004-10-11  0:39   ` David Botton
replies disabled

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