freenode/#clasp - IRC Chatlog
Search
21:53:35
Bike
i wrote a quick pass to rewrite (multiple-value-call f (values a b) (values c d)) as (funcall f a b c d). simple, works fine. if we could inline functions with &rest parameters we could do that instead of having an m-v-setq primitive
21:54:08
Bike
(since (multiple-value-bind (...) form body...) = (multiple-value-call (lambda (&optional ... &rest ignore) body...) form)
21:54:23
Bike
guess we'd have to insert calls to LIST, or something... and then properly delete them if they're unused
22:21:01
Bike
mv-bind is special because the &rest parameter is ignored and therefore can be discarded
22:35:04
karlosz
BIke: the block comment here is the criteria python uses to detect whether the lambda given to mv-call "looks like" an mv-bind
22:36:10
karlosz
this is also how you get away with not special casing mv-bind and special casing the logic in mv-call
22:36:59
karlosz
that way user code that happens to mv-call a function that looks like that can also get converted
22:41:27
karlosz
then the interpolator just do the right thing with local-mv-call when the callable arg looks like an m-v-bind lambda
23:03:44
Bike
basically i figured we would turn mv-calls into calls when possible (i.e. when the values counts of the argument forms are known syntactically or from type inference)
23:05:50
karlosz
maybe im not being clear... if i wrote (multiple-value-call (lambda (x y &rest k) (declare (ignore k))) ...)
23:09:12
Bike
ok. i see. i've been thinking in terms of possibly having multiple argument forms, but i suppose can we do some stuff with only one form too even if its value count is unknown
23:11:47
karlosz
but i agree with you on the importance of canonicalizing things when possible if we know all input forms are of type known values
23:12:22
Bike
my basic-ass transform for that just looks for fixed-to-multiples (so, VALUES calls) but shoudl be fairly easy to extend with type inference like sbcl does
23:13:04
karlosz
i was thinking propagating the values types might be a good first step towards doing local type propagation
23:15:34
Bike
but i would be pretty ok with dropping tha thonestly, you can have extended sequences without making FIND etc generic
23:15:47
karlosz
so i just added it for things like remove-if because i was able to shave megabytes of consing off with that as dx-call
23:16:59
Bike
i mean some idiot user could do (defmethod find-if (predicate ...) (setf *h* predicate) ...)
23:18:49
karlosz
its not a problem if i mark only the cl standard library sequence functions as dx-call right
23:21:33
Bike
but like i said, i'm open to dropping that, since the ability to define methods on sequence functions isn't needed to implement extended sequence classes
23:21:44
Bike
https://github.com/clasp-developers/clasp/blob/master/src/lisp/kernel/clos/sequences.lsp#L189-L204 here's my mega pedantic comment
23:22:04
Bike
like, it's fine. just mark them as dx-call and we'll deal with it when people actually use ext sequences
23:55:26
karlosz
oh, you made set-or-bind-variable take a thunk instead of a next-ast, but i think that's no longer necessary
0:34:11
Bike
everything about those thunks is ugly, if you have a better way to write it that still works please put it in
1:49:02
drmeister
I blame you Bike and karlosz that I wrote so much code missing (declare (ignore whatever)) declarations. You had to add these wonderful compiler warnings so late.
2:53:47
karlosz
Bike: i finally made the change where now cst-to-ast directly converts LETs. its a fairly big efficiency win in terms of compilation time and consing