freenode/#clim - IRC Chatlog
Search
4:05:16
nyef
Yeah. First an olive-oil-and-balsamic-vineager incident with my computer, then I got _sick_...
4:07:15
nyef
Computer is fine, having replaced the palmrest, keyboard, and media panel (the old media panel was, somehow, fine, but I happened to have one which was in better cosmetic shape around), and swapped out three keys on the replacement keyboard with ones from a different beat-up keyboard due to damage in shipping.
4:08:26
nyef
Healthwise, my fever went away on Monday and the last of the really obnoxious pressure effects (very probably mucus buildup where there really shouldn't be mucus in the first place) cleared up today, but I'm not quite at 100% yet.
4:11:53
nyef
(Actually, the old palmrest was mostly fine as well, except that there were a few traces of olive-oil-and-balsamic-vinegar in places that I couldn't get to without breaking some plastic welds, so replacing the entire thing was in order.)
4:22:30
nyef
I'm expecting to be at 100% soon, but it's that long part of recovery where it's all the last little details to fix, and so it's slow going, rather than the "right, cranial temperature's down, so your cognitive processes aren't getting killed off right, left, and center for thermal reasons" which knocks a good 25% or more off in one step.
4:23:26
nyef
And no, I was carrying a small plate with lunch on it, and I was doing something else (I forget what), and ended up passing the plate above my computer without realizing that I wasn't quite holding it level because I was facing the other direction.
4:25:00
nyef
Lunch, of course, was promptly delayed while I grabbed paper towels to try to mop up the worst, then shut down as cleanly as I could, grabbed my toolkit, and tore the machine apart.
4:26:37
nyef
(Battery, bottom panel, keyboard bezel/media board, keyboard, display screen, palmrest. Fortunately, a job that I've done a few times before for various reasons, so I could do it quickly.)
4:29:55
nyef
And the way that Lisp, Smalltalk, and a few other systems tend to keep data "in memory" and support redefining functions "on the fly".
4:31:04
beach
And an essential difference between the LispOS I have been sketching (including its applications) and what is current practice.
4:31:43
nyef
But I also got to thinking about what is and isn't affected when we redefine a function.
4:32:13
beach
1960s linker technology requires everything (an application, a kernel) to be a single blob of code with no indirections. That's the root of the inflexibility of current systems.
4:33:10
nyef
And... I'm not sure that I like the overall semantics in CL, or at least in most CL implementations, but I'm not really sure if (or how) we can do better.
4:34:07
nyef
In SBCL, if we redefine a function, it affects any named references to the function, but not any direct references to the function object itself.
4:34:36
nyef
So if I (defparameter *foo* #'whatever) and then redefine whatever, *foo* maintains a copy that uses the old definition.
4:36:21
nyef
Now, I can think of ways to make that redefinition happen anyway, but I don't know that it's supportable in terms of CL semantics.
4:37:39
beach
In SICL, the first-class global environments contains "cells" that hold the definitions of functions. A named reference results in a cell to be de-referenced at run-time.
4:37:55
beach
But I can access that cell directly by using the protocol of the first-class global environment.
4:39:26
nyef
If *FOO* holds a literal TYPEP 'FUNCTION object, having its reference update when the function is redefined would be nice... unless it wouldn't.
4:40:16
nyef
For closures, we define a function FOO that returns a closure, BAR. And redefine FOO in such a way that BAR would have different behavior, possibly a different closure environment.
4:41:11
nyef
Now, if the closure environment doesn't actually change, we're in the same sort of position as before, and "simply" patching the closure function to bounce to the new definition should "just work".
4:42:46
nyef
But if the closure were a CLOS class (a funcallable-instance?) based on the surrounding function, we could define an UPDATE-INSTANCE-FOR-REDEFINED-CLASS or whatever it is, and suddenly we get plausible semantics.
4:45:09
nyef
Yeah, and again, I can see how to hook the existing closure object to invoke an OBSOLETE-CLOSURE-FIXUP function, but... Actually specifying the appropriate transformation of values?
4:46:51
nyef
And then there's the third case: You're in the debugger, somewhere a few calls below some function FOO, and you redefine FOO. Ideally, the context on the stack frame should be updated such that you end up in the new version of FOO at some appropriate place.
4:48:04
nyef
And in each of these cases, the considerations that need to go into what the "right thing" is increase, and I just have no idea how to even specify the simpler ones at this point.
4:52:19
beach
It might be that you need a mechanism for the user to specify which semantics to use, like #'whatever vs (say) #@whatever.
4:52:37
nyef
You potentially have an arbitrary number of concrete state records of points within a described computational procedure, and you have a second described computational procedure, and you need to map all of the state records from one procedure to the other, while not being able to touch any of the state records (or even know how many of them there are), and the two procedures can differe arbitrarily...
4:54:01
nyef
And most of the time, it simply Won't Matter, because it just doesn't need to happen. But when you need it, you need it.
4:57:18
nyef
I mean, I'm having trouble even expressing the problem space, let alone able to describe a solution.
5:11:59
nyef
Okay, it's coming up on quarter past one, I need to at least pretend to try and get some sleep. G'night. (-: