comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <Stephe.Leake@nasa.gov>
Subject: Re: Custom model in gtkada?
Date: Fri, 30 Jun 2006 12:07:24 -0400
Date: 2006-06-30T12:07:24-04:00	[thread overview]
Message-ID: <u8xnevd8j.fsf@nasa.gov> (raw)
In-Reply-To: HqWog.1048852$xm3.717438@attbi_s21

"Jeffrey R. Carter" <spam.not.jrcarter@acm.not.spam.org> writes:

> Stephen Leake wrote:
>> I disagree. I only click on one thing at a time.
>
> What is your program doing when you click? The concurrency comes from
> programs needing to do something else and respond to user events at
> the same time, which is a fairly common situation. 

In that case, the GUI is in one thread, and the "backend" is in
another (or more).

> That's easy to do with a concurrent language and a GUI library
> designed for concurrency. With a sequential language and sequential
> thinking, you get the typical C-style callback design, in which the
> GUI takes over the single thread of control, and you get other
> things to happen when you're not responding to user events through
> "idle functions".

Well, that's a poorly designed _system_. It has nothing to do with the
GUI design.

Hmm. The GUI has to allow communicating with the background thread.
But that's more of a language or communications package issue.

>> I'm not sure what you mean by "locality" here.
>
> Locality is a basic SW-engineering principle. You should be familiar
> with it. 

I'm familiar with several definitions; I'm wondering which one you are
talking about.

> It basically says that everything specific to understanding
> something should be located together. You should only have to look
> at one package spec to understand all the operations of a type
> declared in that spec, for example.

Ok, you are talking about source code "locality".

In an Ada GUI, the _spec_ for a callback is located in the same
package as the widget that provides the hook for the callback. Is that
no "local"? Obviously, the _body_ for the callback is provided by the
user.

How could it be otherwise, if a GUI is to provide a user-customizable
framework?

>> Not in a well designed GUI framework; the window object is a parameter
>> to the callback; no globals.
>
> The window object is not the state of the program. Knowing how the
> previous event with widget X affects the program's response to this
> event with widget Y is the state.

Ok. In that case, the window object needs to contain pointers to the
full state. Still no global variables.

>> You simply mean "unfamiliar". That is a function of time spent learning.
>
> No, I mean "intuitive". The standard imperative program model, in
> which the program is in control, and which almost everyone learns 1st,
> is intuitive. 

Ok, you are using a jargon definition of "intuitive". It still means
"familiar"; ie, "something I learned before".

> People grasp it easily; it corresponds to their understanding of how
> active entities function in the world. 

you mean "in computer programs they have used before". It is _not_ how
things work in the real world; physics and engineering is a better
model for that.

> The callback model is more difficult to understand because it's not
> intuitive.

Once you have grasped it, it is no more difficult.

>> You are saying "each window should have its own thread of control".
>> That's way overkill.
>
> No, I'm saying each window may have its own thread of control. 

Ok, I misunderstood.

> For many programs, a single thread of control is sufficient. For
> others, there may be a need to update each window continuously. In
> such a case, each window having its own task is not overkill.

Ok; the concurrency must be designed for the application. That's what
I've been saying.

> In the mid-1980s I considered how to implement a windowing system in
> Ada, and decided event queues were the simplest and clearest approach.
> I then used actual windowing systems, with callbacks, and saw nothing
> to change my mind. 

Now I'm confused. "event queue" is orthogonal to "callback", as far as
I can tell. The windowing systems I use have both event queues (to
store and serialize the events) and callbacks (to handle the events).

> I've used CLAW, which uses type extension and overriding. When I
> used JEWL, which has an event queue, it was much easier to use. 

I think you mean the event queue was more visible in JEWL. CLAW has an
event queue (because MS Windows does), but it's not visible to the
client packages.

> This is in part because JEWL is a simple windowing library, without
> the power and complexity of more complete systems. 

Yes.

> But it's also in part because, despite my familiarity with callback
> libraries, the event-queue model is simpler and more intuitive.

Not to me :).

> Don't take my word for it, though. Implement a few (not-too) simple
> using JEWL and your callback library of choice, and see what you
> think.

That is a reasonable request, but I don't have the time.

-- 
-- Stephe



  parent reply	other threads:[~2006-06-30 16:07 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-13 18:01 Custom model in gtkada? Dmitry A. Kazakov
2006-06-13 19:53 ` M E Leypold
2006-06-14  7:17   ` Dmitry A. Kazakov
2006-06-14 21:00 ` Maxim Reznik
2006-06-15  7:38   ` Dmitry A. Kazakov
2006-06-15 15:31     ` Georg Bauhaus
2006-06-15 16:24       ` Ed Falis
2006-06-15 18:44         ` M E Leypold
2006-06-15 16:25       ` Dmitry A. Kazakov
2006-06-17 15:13         ` Georg Bauhaus
2006-06-17 16:44           ` Dmitry A. Kazakov
2006-06-22  7:16             ` Emmanuel Briot
2006-06-22  8:31               ` Dmitry A. Kazakov
2006-06-22 12:08                 ` Emmanuel Briot
2006-06-23 12:32                 ` Stephen Leake
2006-06-23 13:58                   ` Dmitry A. Kazakov
2006-06-29 17:11                     ` Stephen Leake
2006-06-30 12:29                       ` Dmitry A. Kazakov
2006-07-02 15:17                         ` Stephen Leake
2006-07-03 18:23                           ` Dmitry A. Kazakov
2006-07-04 13:51                             ` Stephen Leake
2006-07-05 13:06                               ` Dmitry A. Kazakov
2006-07-06  7:10                                 ` Stephen Leake
2006-06-23 16:59                   ` Jeffrey R. Carter
2006-06-23 17:37                     ` Ed Falis
2006-06-23 18:11                     ` Dmitry A. Kazakov
2006-06-29 17:20                     ` Stephen Leake
2006-06-29 20:08                       ` Jeffrey R. Carter
2006-06-30 10:28                         ` Alex R. Mosteo
2006-06-30 16:07                         ` Stephen Leake [this message]
2006-06-30 19:45                           ` Jeffrey R. Carter
2006-06-30 22:41                             ` Randy Brukardt
2006-07-01  5:11                               ` Jeffrey R. Carter
replies disabled

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