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
next prev 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