freenode/#sbcl - IRC Chatlog
Search
7:53:40
|3b|
fastest is manually inlining the called functions into copies of rle-component, then declaring the copies notinline
7:55:41
|3b|
i think part of the problem is that whichever way it gets inlined (either explicit declaration, or let conversion), the loops get spread out too much
7:56:55
|3b|
i'm about done with code for today, but will try to put the code up somewhere people can see it tomorrow if you want to look at it directly to see what it's doing
14:00:48
jdz
I'm still looking into this, but in the meanwhile maybe stassats knows what's up: https://gist.github.com/jdz/13c002e186f2e7f45f3912eb007c65b2
14:03:03
jdz
CL-WHO does a bit of rebinding, like (let ((stream stream)) ...), but looking at WITH-HTML-OUTPUT macro (and the MACROLETs) I don't immediately see how to reduce the test case.
14:41:01
jdz
Interestingly, removing (check-type ,var stream) from WITH-HTML-OUTPUT macro seems to fix this.
14:56:49
jdz
Interestingly (for me) the problem also seems to only affect the FORMAT call, not PRINC.
14:59:04
jdz
Although I'd guess (format stream "~A" "string") would be transformed into (princ "string" stream).
15:00:02
jdz
I was thinking compiler macros, but I really don't think I'm adding any information here.
16:33:09
stassats
just needs to look through optional-dispatch, but the entry point is in fact called, from the main fun
19:28:04
stassats
it: (lambda (x) (flet ((z (&optional a) 123)) (let ((z #'z)) (when x (unless x (setf z 10))) (funcall z))))