freenode/#clasp - IRC Chatlog
Search
20:26:59
drmeister
Clasp generates a lot of anonymous function objects - do other Common Lisp's have so many LAMBDA's?
20:27:21
drmeister
It sounds like a stupid question - but damn - there are a lot of lambdas in the backtrace.
20:29:02
drmeister
I added the core:lambda-name declaration years ago - with the hopes that I would name lambdas to avoid this - that didn't work out.
20:49:48
drmeister
The first thing above it that I could track was REGISTER-METHOD-WITH-SPECIALIZERS
20:55:40
drmeister
I thought it was some weird low-level problem - but that was a perfectly reasonable error except for the anonymous lambda part.
20:58:56
Bicyclidine
since you moved to fastgf and there's less stuff in C++, i can probably get into it now
21:46:15
Bike
well i see at least one weird thing, standard-compute-effective-method returns a function (&rest gf-args) if there's no primary method, but calls combine-method-functions otherwise, and that returns a method function (i.e. two arguments, a list of arguments and a list of next methods)
21:50:00
drmeister
I suspect it has something to do with function-to-method - maybe I need to use bind-va-list here as well?
21:52:17
Bike
the method-function gets a va-list .method-args., you apply the normal function to those args
21:55:15
Bike
i... don't understand. it's about to call this lambda from function-to-method, and you get a "3 args expected two" error?
21:55:51
Bike
you could put something in the function-to-method lambda that prints the function it's about to apply in the same way
21:57:21
drmeister
The 3 args are coming from an APPLY - I'm putting __attribute__((optnone)) on cl__apply
22:00:17
drmeister
I added this: (mlog "In function-to-method.lambda about to call %s with args %s\n" function (core:list-from-va-list .method-args.))
22:02:09
drmeister
In function-to-method.lambda about to call #<COMPILED-CLOSURE@0x10e6ef078 COMPUTE-EFFECTIVE-METHOD :ftype :FUNCTION lambda-list: (GF METHOD-COMBINATION APPLICABLE-METHODS) :fptr 0x110f5e2c0> with args (#S(STANDARD-GENERIC-FUNCTION CLASS-DIRECT-SUPERCLASSES #slots[11]) #S(METHOD-COMBINATION ) (#S(STANDARD-READER-METHOD ) #S(STANDARD-READER-METHOD )))
22:03:05
drmeister
I count three arguments in this lambda list (GF METHOD-COMBINATION APPLICABLE-METHODS)
22:05:23
Bike
note for later: the function calculate-discriminator-function is not used and incorrect
22:05:56
Bike
or, well, does compute-effective-method actually get called? maybe the problem is inside it
22:07:47
drmeister
#<COMPILED-CLOSURE@0x10ea5aa18 COMBINE-METHOD-FUNCTIONS3.LAMBDA :ftype :FUNCTION lambda-list: (.METHOD-ARGS. .NEXT-METHODS.) :fptr 0x11092a5a0>
22:09:19
drmeister
That's the message printed from within the (mlog "In combine-method-functions3.lambda - About to call method %s for gf %s\n" method gf)
22:09:56
drmeister
It's like it's trying to treat the method function returned by combine-method-functions3 as a regular function.
22:10:05
Bike
i mean i thought you said "In function-to-method.lambda about to call #<COMPILED-CLOSURE...>"
22:11:25
Bike
re earlier note: ignore, i was confused by cmpgf.lsp which has a codegen-dispatcher with differnet lambda list
22:16:24
drmeister
cmpfastgf.lsp uses no generic functions - it's the compiler that generates dispatch functions
22:17:16
drmeister
The function being applied to in APPLY is: #<COMPILED-CLOSURE@0x10ea5aa18 COMBINE-METHOD-FUNCTIONS3.LAMBDA :ftype :FUNCTION lambda-list: (.METHOD-ARGS. .NEXT-METHODS.) :fptr 0x11092a5a0>
22:18:12
Bike
could you put something in function-to-method proper that signals when the function it's given is named COMBINE-METHOD-FUNCTIONS3.LAMBDA?
22:19:16
Bike
also, i've seen enough that i think effective methods are real screwy and i might be able to fix it, so i'll work on that once you've sorted this out
22:22:00
Bike
they take a next-methods argument they don't need to, which is why those combine-method-functions lambdas exist
22:22:35
Bike
so, when fastgf compiles a dispatcher, it calls an intrinsic to invoke the method function; the intrinsic calls apply_method0 with a NIL next-methods
22:22:50
Bike
but the effective method invocation should just be a normal call. it could be a tail call, if we had those
22:26:23
Bike
and ok, better, but it still shouldn't need nil, and needing nil implies those combine-method-functions lambdas
22:26:52
Bike
but, again, i can work on it once you have this worked out, it's in large part a separate concern
22:44:25
drmeister
https://github.com/drmeister/clasp/blob/dev/src/lisp/kernel/clos/closfastgf.lsp#L269
22:45:07
drmeister
Or maybe the issue is applying the effective method function from fastgf when there is a dispatch miss.
22:46:05
drmeister
https://github.com/drmeister/clasp/blob/dev/src/lisp/kernel/clos/closfastgf.lsp#L410
0:39:31
drmeister
There appears to be a problem compiling std-accessors.lsp std-class-optimized-accessors.
1:04:50
Bike
you can't do the rest incrementally because you need to hoist, which is impossible outside of the right context - kind of unfortunate
1:05:05
Bike
but you can get pseudo-hir by just doing (cleavir-ast-to-hir:compile-toplevel-unhoisted ...)
1:07:08
drmeister
(defparameter *f* '(lambda (core:&va-rest r) (core::bind-va-list (x &rest y) r (list* x y))))
1:07:20
drmeister
(cleavir-generate-ast:generate-ast *f* clasp-cleavir::*clasp-env* clasp-cleavir::*clasp-system*)
1:08:44
drmeister
It's not what crashed originally - but it crashes when I use (clasp-cleavir:cleavir-compile 'foo *f*)
1:11:28
drmeister
(cleavir-ast-to-hir:compile-toplevel-unhoisted *a*) --> #<CLEAVIR-IR:ENTER-INSTRUCTION>
1:11:38
drmeister
After (defparameter *a* (cleavir-generate-ast:generate-ast *f* clasp-cleavir::*clasp-env* clasp-cleavir::*clasp-system*))
1:44:27
drmeister
When that translate-simple-instruction on bind-va-list failed because of undefined functions.
1:46:09
drmeister
Error: Your compiler failed because it is bad - and you should feel bad. If you are a glutton for punishment it is TRANSLATE-SIMPLE-METHOD ((EQL 'BIND-VA-LIST) ...)
1:46:54
drmeister
It looks like there is still a fair amount of noise in the generic function calls.
1:47:26
Bike
i would think translate-simple-instruction should show up in the backtrace, at least ideally
1:47:40
Bike
but if not we could throw some handler-binds into the compiler to give more specific locations
1:48:50
Bike
and it would be good to mark any error that stops the compiler as a bug, so that users can orient themselves
1:55:25
drmeister
The problem seems to start wiht this: (DISPATCH-MISS #<FUNCALLABLE-INSTANCE CLEAVIR-IR:LAMBDA-LIST> #<VA-LIST: (#<CLASP-CLEAVIR-HIR:BIND-VA-LIST-INSTRUCTION>)>)
1:58:20
drmeister
Yes - I do get that error when there is a comma outside of a backquote - but I don't see any commas
2:00:11
Bike
since cleavir-ir:lambda-list is a generic function, we should just edit the bind-va-list definition to use that, really
2:07:22
Bike
if i have a Fixnum_sp, can i do normal arithmetic on that? Like (x == 0) where x is a Fixnum_sp
2:13:33
drmeister
Yeah - in C++ it's gctools::fixnum_shift and it's exposed as one of the values in cxx-data-structures-whatever (if not - it should be).
2:16:41
drmeister
Ok - progress... The slot CLASP-CLEAVIR-HIR::%LAMBDA-LIST in the object #<CLASP-CLEAVIR-HIR:BIND-VA-LIST-INSTRUCTION> is unbound.
2:29:39
drmeister
You mentioned that the datums passed to translate-datum would probably be llvm::Value's - they are - I didn't expect that.
2:35:00
drmeister
Ok - some values passed to translate-datum are allocas and some are lexical-locations
2:35:18
drmeister
Compiling this: (clasp-cleavir:cleavir-compile 'foo '(lambda (core:&va-rest r) (core::bind-va-list (x &rest y) r (list* x y))))
2:40:32
drmeister
I don't know - I'm recompiling bclasp to export a symbol - I'll check once slime is back up
2:42:09
drmeister
Slime is working nicely - I've whipped through about a dozen problems in the TWENTY LINE PIECE OF CODE!
2:47:07
drmeister
(clasp-cleavir:cleavir-compile 'foo '(lambda (core:&va-rest r) (core::bind-va-list (x &rest y) r (list* x y))))
2:48:25
drmeister
(clasp-cleavir:cleavir-compile 'foo '(lambda (core:&va-rest r) (core::bind-va-list (x y z &rest a) r (list* z y x a))))
4:13:03
Bike
well, it's 14.248/2.105 on this machine (which is worse, but also i'm chewing up the cpu), for pre-this, so that would be a reduction from 6.77 to 4.82