- weight updates only work correctly after the first weight is propagated
c[x] = 5 ; c.build(); c[x] = 6; cout<<c[x]<<endl; // this will print 6, fine. c[x] = 5 ; c[x] = 6; cout<<c[x]<<endl; // this will print 11, wrong
- Dyna doesn't notice when you put a foreign axiom on the left hand side of a rule. It should complain.
- string literals inside terms on the left hand side of inference rules are not interned ahead of time and optimized out. The same problem applies to foreign axioms.
asdf(X) += foo("Hello") * bar(X). // no string operation occurs, so it is fast asdf("Hello") += foo(X) * bar(X). // a string operation occurs, so it is a little slow asdf(X) += foo(X) * foreign_bar(X,"Hello"). // a string operation occurs, so it is a little slow
Only the first line of an error message is displayed (this is a dynamk/dynac bug). These programs grep for
compiler:, but only the first line of the error message starts like this. Perhaps the compiler program should output debug information to stderr and error messages to stdout? Maybe It should just stop outputting debug information unless asked? Anyway, only getting the first line makes the error messages quite difficult to read.
- Error messages are largely impenetrable
even if you could read them in their entirety
- 0-ary terms end up getting their very own hash tables. Ridiculous!
given that the user has asked for a query over union U, and term T (a member of U) has just popped, T will only find its way into the container of instances if there exists some inference rule with a term of type T on the right hand side.
- hash functions are based on the functor in addition to the data. The additional step of hashing in the functor is not necessary because every term in the table is of the same type.
- programs not containing any inference rules aren't able to figure out the accumulator. Results in a segfault from an out-of-bounds error.
- This is quite worth fixing in case someone wants to use a Dyna program just to create some handy C++ classes, sans inference.
if you use a
--driveroption and a C++ file already exists, an overwrite doesn't occur. This is intentional of course, but the problem is that no error message appears. Instead, the original file is silently used.
- for every known bug, there are ...