freenode/#clasp - IRC Chatlog
Search
23:02:03
Bike
because there are probably several flags like that already, and they're all pretty ad hoc, and mean we're doing things at runtime every time solely because booting is weird
4:22:41
drmeister
General: I think I have the whole CI thing sorted out now. I have a free tier machine on AWS running buildbot and I can set up latent EC2 instances that get spun up as they are needed to build different things.
7:49:57
heisig
beach: I just read Pascal Costanza's paper. I think you are right about MAKE-METHOD-LAMBDA - using a compile-time instance of the generic function solves the issue of macroexpansion time dispatch.
7:52:21
beach
Yes, I can't see what information MAKE-METHOD-LAMBDA could extract from the generic function, so it might as well just be a class prototype.
7:52:40
heisig
What I am still not sure is how a method function can access its associated generic-function and method metaobjects when calling no-next-method.
7:55:05
heisig
It is not very important at the moment. The same goes for CLOS optimizations. Might be a paper for 2020 :)
8:08:25
beach
Hmm, my plan was to create an initial SICL image without the compiler in it, but if compute-effective method requires the compiler, that won't work.
8:09:48
beach
I guess I'll have to include some temporary non-conforming mechanism for doing it and just replace it later by loading FASLs.
8:13:58
beach
Well, during bootstrapping I have no problem. I can include the Cleavir-based compiler in the first-class global environment.
8:14:54
beach
And if I need to load the compiler (which contains tons of generic functions) I need COMPUTE-EFFECTIVE-METHOD to do something reasonable.
8:16:40
heisig
I see. Why do you not just load the compiler during bootstrapping and have it placed directly in the initial image?
8:20:28
heisig
So the alternative is to have the initial image dispatch its calls to compile to another process (e.g. Cleavir in SBCL)?
8:52:21
makomo
morning! i was reading costanza's paper as well but i don't see how MAKE-METHOD-LAMBDA is called during macroexpansion, given the code on page 3?
8:53:22
makomo
it says "here's the expansion of the above DEFMETHOD" and this expansion includes a call to MAKE-METHOD-LAMBDA. doesn't this mean it will be called only when the expansion is finally evaluated?
8:58:59
makomo
beach: hm, that's what i understood from what Bike said yesterday. i also thought costanza was getting at the same problem a page or so later.
8:59:45
makomo
costanza says: "This implies two problems: The generic function metaobjects have to be present at macroexpansion time, ..."
9:00:02
makomo
and i understood the reason as "because MAKE-METHOD-LAMBDA is called at macroexpansion time"
9:00:35
beach
The proble is that if the defgeneric followed by the defmethod are in the same file, and the file is processed by the file compiler,..
9:01:28
makomo
and Bike said yesterday: "make-method-lambda is called during the macroexpansion, which is most of why it's a weird part of the protocol"
9:02:31
makomo
beach: right, but that would only be a problem if some "trickery" was going on at macroexpansion-time, right? such as calling MAKE-METHOD-LAMBDA
9:03:51
makomo
that's why i'm confused. page 3 only shows the final expansion, but it includes MAKE-METHOD-LAMBDA -- shouldn't it already have been called?
9:04:41
makomo
beach: btw, i think there's a typo in http://metamodular.com/CLOS-MOP/make-method-lambda.html "convert the lambda expression a method function"
9:10:11
beach
If the code on page 3 is correct, then the generic function *will* be avalable when make-method-lambda is called.
9:11:17
beach
But if that code is correct, it means that the compiler is called when the code is loaded and that's no good.
9:11:42
makomo
yup! i was eagerly looking to see if he misplaced a backquote somewhere (in which case the code wouldn't show the expansion, but the "expander"), but nope.
9:15:27
beach
... it won't compile the method body in the lexical environment of the DEFMETHOD form.
9:17:38
beach
If make-method-lambda is not called at compile-time, that environment is going to be gone.
9:26:52
makomo
beach: so if capturing the lexical environment is ensured by placing the modified method lambda into the expansion (wrapped in a FUNCTION call), what purpose does the ENVIRONMENT parameter serve in MAKE-METHOD-LAMBDA?
9:27:47
beach
I am not sure. I guess it could be used to look up definitions at compile time. But I haven't found a use for that.
10:05:31
makomo
beach: costanza also says on page 6 "Note that the method body is not processed anymore but can actually be a ’real’ closure, whereas in the approach proposed by the CLOS MOP, method bodies must be s-expressions that are processed by make-method-lambda and then explicitly compiled into method functions. An implication is that such method functions cannot close over local lexical environments, which can be
10:05:57
makomo
but this is in contradiction with http://metamodular.com/CLOS-MOP/processing-method-bodies.html that you linked
10:06:22
makomo
because your link describes exactly how the method function captures the lexical environment
10:36:44
beach
Anyway, my favorite coauthor is going to show up for lunch in a few minutes. So I need to go.