First I hoped that I would be able to make minor adjustment to ShapeLogic's letter match example so that it would read the rules from an external source and gradually expand. But since backward compatibility is not a problem yet, I came to the conclusion that it was better to try to construct a solid foundation for declarative programming. While it will be primarily geared toward computer vision problem solving, the system will have other, broader, applications as well.
Do we need another system for declarative programming?
SQL rules supreme in the field of simple data, but once you go outside this field there are many different directions that you can take.
The declarative logic programming system that I had highest expectations for was CYC. It is a large, hand coded knowledge base trying to capture common sense, using many different inference techniques. Strangely, it never got a big following even after they released part of the engine as open source.
I hope to find a sweet spot where a simple system will be able to do some real work and be simple to learn. My work is geared toward a domain where there are a limited number of objects with somewhat constant features.
A few of the changes in ShapeLogic 0.9
Lazy data streams
Implement lazy data streams like Scala or Scheme.
Make the annotation of shapes more loosely coupled to classes in ShapeLogic. I was not super happy with the first solution that I came up with of how to annotate point, lines and polygon.
If ShapeLogic should be used for more general problem this is completely unacceptable.
I order to save user defined rule in a database or a flat file, I need to be able to compile or interpret this code. This code in the rules should mainly be fairly straightforward.
The top contenders are:
- Java 6 Scripting interface, that should give access to different scripting languages for the JDK
- Java 6 Compiler interface, the problem is that Java is pretty verbose
- Groovy intepreter
- Do the parsing in ShapeLogic and write a little interpreter
- Stick with JEXL for now, and make the move in a later release