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=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no 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!news4.google.com!news.glorb.com!newsfeed-east.nntpserver.com!nntpserver.com!statler.nntpserver.com!newsfeed.arcor.de!news.arcor.de!not-for-mail From: "Dmitry A. Kazakov" Subject: Re: Custom model in gtkada? Newsgroups: comp.lang.ada User-Agent: 40tude_Dialog/2.0.15.1 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Reply-To: mailbox@dmitry-kazakov.de Organization: cbb software GmbH 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> Date: Fri, 23 Jun 2006 15:58:16 +0200 Message-ID: <10aj6ifazzw9q$.1ks15eefzi4kn.dlg@40tude.net> NNTP-Posting-Date: 23 Jun 2006 15:58:16 MEST NNTP-Posting-Host: 3e18a716.newsread4.arcor-online.net X-Trace: DXC=]Lo;OeJL2j?7enW;^6ZC`4IXm65S@:3>? X-Complaints-To: usenet-abuse@arcor.de Xref: g2news2.google.com comp.lang.ada:4930 Date: 2006-06-23T15:58:16+02:00 List-Id: On Fri, 23 Jun 2006 08:32:45 -0400, Stephen Leake wrote: > "Dmitry A. Kazakov" writes: > >> On Thu, 22 Jun 2006 09:16:22 +0200, Emmanuel Briot wrote: >> >>> Dmitry A. Kazakov wrote: >>>> I would expect callbacks be primitive operations of a tagged type rather >>>> than pointers. >>> >>> This is of course a design choice, and you can easily implement a small >>> layer on top of GtkAda to do just that. >>> The advantage with pointers is that you can add or remove callbacks during >>> the life of a widget, which is harder to do with primitive operations where >>> you need flags to know whether to react to the event or not. Also you can >>> have multiple callbacks on the same signal, which, again, is harder to do >>> with primitive operations. >> >> Maybe, though I doubt that events were a right design decision (as a >> notification mechanism). > > How many GUI programs have you written? With how many different toolkits? > > I've used Visual Basic (essentially tagged, I think :), Borland's C++ > framework (tagged/dispatching), Windex (Ada tagged), GWindows (mixed > tagged/pointers), and Gtk (pointers). I used MACRO-11/Asynchronous System Traps + full-duplex terminal driver, (I guess, it should be classified as callbacks (:-)), FORTRAN/FMS, Ada83/C/TPU, C curses, Borland Turbo Pascal and later Delphi, C/C++ X11/Open Look, ANSI C LabVindows/CVI, Ada/C++ Windows API, LabView, Diadem (graphical languages), now GtkAda. > I think Gtk is the best model, although the C underpinnings make > things difficult sometimes. In particular, it is difficult to detect > some errors at compile time, that the fully Ada systems can detect. At > root, the C pointers are not strongly typed. I don't see how Ada could help there. An event is either handled or not. "Event" is not an Ada term, so the compiler cannot check anything. An abstract primitive subprogram is. BTW, Gtk_Tree_Model is a clear candidate to become an interface. Thanks to Maxim Reznik, I made an abstract tagged type from his code. It works fine by now. Anyway, 1. There are many communication / synchronization / notification mechanisms. Among them events are not necessarily the best. 2. I don't see how events may influence the choice between pointers to subprograms and primitive operations. 3. I designed soft-real time GUI libraries for Windows, where control over resources and multitasking was essential. Especially because the data rates (1-10ms) were sufficiently higher than the visualization rates (100ms). I don't think that event/callback mindset is any good for such things. At least it would require a lot of acrobatics. >> Another point, a list of pointers to subprograms is in no way better than a >> list of tagged objects (with primitive subprograms). > > Why? > > I would find a list of tagged objects confusing. As I understood it, the point was made that procedures are good to chain a list of event handlers. I see no difference between maintaining a list of procedures vs. a list of handlers (objects). They are equivalent. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de