freenode/#sicl - IRC Chatlog
Search
13:27:11
beach
Now I can generate an ASDF plan correctly without warnings about deprecated APIs. I still need to configure how ASDF determines whether an action needs to be performed or not.
14:19:10
beach
While Fare's English is relatively good, some of his French quirks are visible in the comments in ASDF. :) Like "associated to" rather than "associated with".
16:19:30
beach
I think I figured out what to do, but I don't attempt it until tomorrow. I am tired after a long day of "work" (mainly reading ASDF source code and experimenting) and if I attempt it today, I will make mistakes.
16:20:44
beach
I think the secret is to define a method on COMPUTE-ACTION-STAMP that consults the global environment to see whether a file has already been loaded, and if so, returns the timestamp of when that happened.
16:23:35
beach
But I am convinced that using ASDF itself to load code into environments during bootstrapping is the right thing to do, as opposed to the kludge I created.
16:25:38
beach
I can then even work on creating more ASDF system definitions for the SICL code itself, rather than calling functions to load files explicitly as part of bootstrapping.
18:55:53
Bike
karlosz: i completely misdiagnosed the mirtype problem. the actual slowdown was easily fixable so the other stuff will just be a nice little optimization rather than performance critical
18:56:10
Bike
before i can merge i still need to fix some exciting problems like (cond ((values 'x 'y 'z))) => X Y Z
18:56:51
Bike
the actual problem is that the way master works with rtypes, (funcall x ...) and (funcall (values x) ...) compile identically
18:57:04
Bike
with the new code, a "take the primary value" operator gets thrown in, so suddenly there are no local calls anywhere
19:00:56
Bike
well, they're still there for normal calls, but not any funcall or multiple-value-call
19:02:34
Bike
i mean, in more detail, say you write (funcall #'f ...). this gets compiler macroexpanded to (cleavir-primop:funcall (coerce-fdesignator #'f) ...). coerce-fdesignator is a clasp function and this will get macroexpanded to (identity #'f), which turns into (prog1 #'f), which turns into (values #'f)
19:36:12
Bike
for the cond thing i probably just need to insert some more values calls or equivalent during transformations
19:36:26
Bike
so (let ((x (values 1 2 3))) x) becomes (values (values 1 2 3)) rather than just (values 1 2 3), basically
20:48:32
karlosz
i guess check how many values the receiver expects and insert values as a coercion thing
20:49:17
Bike
well, i mean, i'm thinking they would be inserted by the interpolation pass and the variable elimination passes. for arguments and variables only one value is expected
20:50:34
Bike
i'm a little surprised that almost everything works without this in place, but i guess it's uncommon to expect a limit to the number of values
20:53:54
Bike
actually, where do we do the writevar/readvar pair elimination? delete-temporary-variables is a step past that
21:18:11
Bike
there's a test that compile-file doesn't unwind, but it's been failing for months, sooooo
21:21:00
Bike
so now it's correct and fast enough (actually, faster i think) so i can start doing actual optimizations like collapsing mv-call based on the types of the arguments
21:22:05
karlosz
in terms of testing, sbcl has an ad hoc method of testing for optimizations working
21:22:48
karlosz
but usually doing something smarter like inspecting the constants vector or asserting non-consing
21:23:12
karlosz
which is i guess similar to what the compile-file unwind regression test does by asserting non-unwinding
21:23:49
karlosz
you could probably test for if optimizations by just checking basic things like (if t a b) doesn't dump t into the literals table