CLIM mail archive
A Kinder Gentler Event Loop
Scott McKay commented:
Common Lisp, CLOS, and CLIM have very little to do with what you want.
Periodic timers are a service that either are, or are not, provided by
the scheduler of whatever operating system you are using. Common Lisp,
CLOS, and CLIM enter into the equation only when you wish to have them
interface to the operating system.
Indeed, Common Lisp, CLOS, and CLIM only become important when interfacing
one's application with the outside world, but Scott, what is CLIM's purpose if
not for the interfacing of applications to the outside world? I think it is an
error (nay, it should be a signalled error) to view mechanisms such as timer
events as transient stray hacks that exist on some random operating systems
and/or schedulers. Truth is a large number of operating systems in use today
have such mechanisms and for good reason.
Your only other choice is to have the event loop run continuously,
waiting for a period of time to elapse by watching the clock, since
SLEEP provides granularity of one second.
At some deep bowel in the implementation this is true, however this totally
avoids the issue of event abstraction which was the thrust of my interest. I
am fully aware of hacks that will allow me to have timer interrupts interact
with my CLIM applications. I know ways of hacking into the timeout code to
accomplish other goals. These limited solutions are not what is at issue.
The question I put forth to the CLIM list relates to the event abstraction of
CLIM. Is its model, albeit implicit, so rigid that extensions are quite
The implementation of the event loop varies from platform to platform,
and is an internal part of the CLIM implementation. You cannot depend
on it not changing.
Event handling, I would argue, is the most important aspect of a user interface
management system. I can get systems to render images on the screen, printer,
or other output device with greater speed, flexibility, and clarity than CLIM.
But then what? CLIM, like its mentor dynamic windows, allows me put semantics
on said output. Wonderful! What is the capability? Event handling with a
context. CLIM allows me to build a command abstraction which is independent of
its input form. Again, what is this capability? Yes, once again an event
handling abstraction. Most Applications, unlike politicians, must listen to
the outside world. Few applications are given the luxury of surviving by
spewing glorious output which is hereafter unusable. An application's
usefulness is often determined on how easy interaction is accomplished. So,
the question becomes, how does the event handling protocol of CLIM help the
developer in meeting these goals?
The event model in CLIM Release 1.0 is simpler (or more simple-minded,
if you prefer) than the one provided by Silica. If anything, it is
easier to understand because it does less.
This is not a question of quantity, rather one of the right parts. It is my
contention that applications are not limited to interacting solely with mice
and keyboards. This interaction is important and plays a critical role in the
organization of the application.
It is much too late in the CLIM Release 1 development cycle to
implement timers in the event loop. Perhaps the people designing
Release 2 can be persuaded. You can help by being extremely specific
about what it is you need.
I recognize that CLIM Release 1 is frozen. I had hoped to raise the issue of
generalized event handling in CLIM applications and make progress on my task of
a somewhat robust event handling extension for CLIM for our application. CLIM
has the start of a powerful mechanism for the developer to build upon, it is my
belief that trying to understand where the current state of affairs interferes
with progress is the highest form of compliment. It, however, does not serve
the community well to merely post my specific needs. A far greater service is
accomplished when issues are raised and specifics are understood in terms of
Please don't dominate the rap, Jack
If you've got nothing new to say
If you please, don't back up the track
This train's got to run today
Main Index |