Persistent AST and google sparsehash

Adam Treat treat at kde.org
Sat Aug 5 11:41:26 UTC 2006


Hi Roberto,

I've been experimenting with the google sparsehash.  I have a 
class 'KDevPersistentHash' which wraps the sparsehash in a nice API.

Currently, I can create and load a sparse hash with key_type = QString and 
value_type = int.

I'm currently working on using value_type = KDevAST where KDevAST is the 
TranslationUnitAST from the C++ parser.

This is what I've found...

The most recent version of sparse_hash_map (this is the one we want since it 
has *ultra low* memory overhead) can hash non POD types.  WOOHOO!  So we can 
definately use this for key_type = QString and value_type = KDevAST. 

 Unfortunately, we have to persist the key value pairs ourselves.  The default 
sparse_hash_map can only serialize extremely *simple* data types.  For all 
complex data types, we have to do it ourselves.  I'm currently using 
QDataStream to serialize my key_type=QString, value_type=int hash, but as you 
know QDataStream will not work on KDevAST pointers ;)

So, this brings me back to a conversation we had awhile ago.  How do we make 
the AST/codemodel serializable.

In past conversations you mentioned the idea of using PTL by Thomas Gschwind.  
This is described in this paper: 
http://www.usenix.org/events/coots01/full_papers/gschwind/gschwind_html/index.html

I did find two more solutions linked from the paper:

1. Texas -- http://www.cs.utexas.edu/users/oops/papers.html#texas
2. POST++ -- http://www.ispras.ru/~knizhnik/post/readme.htm

I'm not sure about Texas as it is *very* old and requires a version of gdb 
that is completely outdated.  I'm not thrilled about relying upon type 
descriptions from an old version of gdb.

POST++ seems reasonable enough, but I wonder if it would be easier to just 
implement a serializable interface in the kdevelop-pg ast generator.  Perhaps 
we can provide << and >> operators that write to a QDataStream?

What do you think?

Adam




More information about the KDevelop-devel mailing list