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=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,37023471dc2e1934 X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news1.google.com!news3.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!wns13feed!worldnet.att.net!attbi_s21.POSTED!53ab2750!not-for-mail From: "Jeffrey R. Carter" Organization: jrcarter at acm dot org User-Agent: Thunderbird 1.5 (Windows/20051201) MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: Custom model in gtkada? References: <3ndpd7br1nn9$.vkcrts8e898z.dlg@40tude.net> <20060614210028.GA18024@ws.max.zp.ua> <44917d39$0$4495$9b4e6d93@newsread2.arcor-online.net> <44941be9$0$11065$9b4e6d93@newsread4.arcor-online.net> <14e2r2ftir9ok.i8u1axnplx11.dlg@40tude.net> <449a432e$0$15869$bb6a4dc3@news.uunet.fr> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Message-ID: NNTP-Posting-Host: 12.201.97.176 X-Complaints-To: abuse@mchsi.com X-Trace: attbi_s21 1151611687 12.201.97.176 (Thu, 29 Jun 2006 20:08:07 GMT) NNTP-Posting-Date: Thu, 29 Jun 2006 20:08:07 GMT Date: Thu, 29 Jun 2006 20:08:07 GMT Xref: g2news2.google.com comp.lang.ada:5308 Date: 2006-06-29T20:08:07+00:00 List-Id: 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. 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". > I'm not sure what you mean by "locality" here. Locality is a basic SW-engineering principle. You should be familiar with it. 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. > 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. > 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. People grasp it easily; it corresponds to their understanding of how active entities function in the world. The callback model is more difficult to understand because it's not intuitive. > 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. 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. 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. 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. This is in part because JEWL is a simple windowing library, without the power and complexity of more complete systems. But it's also in part because, despite my familiarity with callback libraries, the event-queue model is simpler and more intuitive. 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. -- Jeff Carter "I unclog my nose towards you." Monty Python & the Holy Grail 11