freenode/#clasp - IRC Chatlog
Search
18:09:06
drmeister
I've seen it crash twice now - once a few days ago - but it was a confusing build for a couple of reasons.
18:10:44
drmeister
Then just now the buildbot crashed in iterate. I've learned to read the tea leaves and escalate it as a potential problem.
18:13:13
drmeister
It failed on the buildbot at 1:01 - so it will be an hour before I can report back on that.
18:23:44
Bike
might help to make cleavir use the list implementation of sets instead of hashes... hashes cause the indeterminancy and i'm not even sure it goes faster
19:54:14
karlosz
i'm going to look at metaevaluation again tomorrow (i.e. the "s-expression" simplifier)
19:56:19
karlosz
so we can just make that bottom up and use a worklist; i just want to be able to query (foldablep ...) and then do (funcall (foldable-function <name>) <constant-args>)
19:56:47
karlosz
my intuition is that just doing basic stuff like the arithmetic operators and the list operators will actually give measurable gains
19:58:19
karlosz
simplification on the expression tree are easily made into simplifications of the flow graph if you just turn the algorithm "inside out"
19:58:49
karlosz
so if you look at how Python does "local type propagation" it matches how you'd do it on the expression tree
19:59:30
karlosz
(abstract-type '(if <e> <f> <g>)) = (union-type (abstract-type <f>) (abstract-type <g>))
20:00:13
karlosz
so then the Python local type prop algorithm is part of the "metaevaluator" (ir1opt) which is just the corresponding flow graph algorithm to that expression tree algorithm
20:00:57
karlosz
that's why they do type propagation and constant propagation and all that stuff at the same time, because you can group those all into one "graph walk" (corresponding to the tree walk you'd do)
20:01:47
karlosz
another name for this (which i think guile and some other scheme implementations call it) is "partial evaluation"
20:02:05
karlosz
basically just as if you were interpreting a sexp but you didn't have access to the concrete values, only the abstract ones
20:03:10
karlosz
so yeah i'm just imagining one BIR pass called metaevaluation which does all the partial evaluator algorithms you'd expect on an expression tree
20:04:16
karlosz
a backward flow algorithm (like deleting unused expressions/computations) corresponds to partial evaluating the tree top down to find those useless things
20:04:37
karlosz
anyway, i'll try and tackle constant folding tomorrow so i guess i'll just add a foldable attribute to the stuff in setup.lisp
20:08:40
drmeister
So there may still be an intermittent problem with the BIR compiler. The buildbot worked when I restarted it.
20:11:40
drmeister
What kind of keys do you use for the compiler hash-tables that may be causing the problem here?
20:14:20
drmeister
Or how about this? Add the list implementation under control of a debug flag and set things up so that they both get used and we test the hash-table result against the list result?
20:17:03
Bike
the impelmentation choice is pretty nearly a debug flag already, could just be a feature to specify
20:27:48
Bike
https://github.com/s-expressionists/Cleavir/blob/master/Set/set.lisp#L3-L4 just gotta flip this
20:31:12
drmeister
The problem with flipping it is that if it fails rarely with :hashset and fails never with :listset - we still don't have a smoking gun. If you add :hashset-listset-match and use them both side-by-side and constantly cross check the result that you get out of both of them. If there is a mismatch - then we have a smoking gun.
20:32:01
Bike
we can't compare them within the set code itself, because we expect iterations to occur in different orders
20:35:24
drmeister
What is the most likely problem? Can different order of iteration lead to a problem? Or does it need to be something more serious - like pairs in the data structure not coming up in the iteration?
21:09:08
drmeister
Right - you could iterate through both objects and cross check each pair against the other object.
21:10:28
drmeister
Like (mapset (lambda (key value) ...) set-object) and set-object contains a hashset and a listset and first you iterate over one of them and check it against the other and then iterate over the second object and do the same?
21:58:17
Bike
might still not work, we can have dosets that return early, and with different iteration orders that could mean elements being iterated over in one and notht eother
22:02:47
drmeister
Why do you guys zero in on hash-tables and order of traversal right away when we talk about a potential intermittent problem?
22:03:28
drmeister
I'm not accusing - I'm just trying to understand why you think it's an obvious source of compiler bugs.
22:15:54
Bike
i don't remember how the badges work. is the prng state the same every time the image starts?