freenode/#clim - IRC Chatlog
Search
10:11:31
lukego
Suppose that I want to first draw something - using an arbitrary function - and then draw a border (box) around it. Is the basic idea to capture the drawing function's output into an output record, then use the bounding box of that to calculate the geometry for the border? Or am I overlooking some other composition mechanism for saying things like "box around <drawing operations>"?
10:26:37
lukego
yikes, the implementation is a bit hardcore, with some kind of macro supported continuation passing style threading of drawing operations? I'll make a coffee to go with this
10:28:45
jackdaniel
lukego: most clim macros expand to a version that pass a continuation to a generic function
10:29:49
scymtym
CLIM:SURROUNDING-OUTPUT-WITH-BORDER is in the specification. there is no need to learn it based on the source code
10:30:14
jackdaniel
(with-foo (options) body-1 body-2) ; expands to (invoke-with-foo (lambda () body-1 body-2) options)
10:31:39
lukego
scymtym: do you mean that reading the source to CLIM convenience functions from the standard is not a good reference for learning to write CLIM code, or?
10:32:32
jackdaniel
reading source code may give you some insight how it works, but if all you want is to use it you don't need to know the implementation
10:33:46
scymtym
lukego: i would start by reading the specification, in particular when it comes to macros. McCLIM is not always strict about verifying macro arguments, for example. there may also be extensions that are not in the standard (which might not matter depending on whether you are targeting CLIM or McCLIM)
10:34:12
lukego
jackdaniel: I guess I don't understand why CPS is coming into the picture because in my mind that's something you use when your flow of control doesn't want to obey normal stack discpline, but it seems to me like with-too/call-with-foo doesn't fit that category
10:35:25
jackdaniel
it is true that we pass a continuation to a function, and by continuation I mean "your code allocated on the stack"
10:35:32
lukego
okay, maybe I'm misreading the situation, just reacting to tokens like 'cont' and 'trampoline' in the source
10:37:29
lukego
I'd expected code more like (defmacro with-border (&body body) `(apply #'draw-rectangle (bounding-box (with-output-to-output-record ,@body))) and that's why I was surprised to see all the machinery
10:37:30
jackdaniel
n.b that's a good example why reading the source code (peeking how the sausage is made) may be a bad idea ,)
10:37:59
scymtym
but incremental redisplay may count as a proper use of continuations. in that case, the redisplay engine may actually jump "back into" user code that created certain output
10:38:47
lukego
ok. thanks for the feedback. I'll keep in mind that there be dragons in the implementation and try not to jump to premature conclusions.