I've been busy chasing bugs for several mailing list questions over
the past couple weeks. I wanted to let folks know what the latest
changes in CEDET/CVS are.
* Speed improvements in EDE and Semanticdb
* Analyzer bug fixes
* New symref tool
Aside from several bug-fixes already discussed on the mailing list,
I've been working on some performance enhancements. In particular, I
found that EDE was hitting the disk a lot validating various project
states. I found a simple C file hit the disk for a single project 38
times. More if you consider the fact that there are 5 project types
to scan for.
The EDE project baseclass was updated to cache more info about where
it is, including the filesystem inode. Several predicates now do an
inode compare, so the per-project scan disk hit is now 0 times after
the initial project load. (This was measured on the cpp-root project
style.) I'm particularly interested in hearing how these changes work
on Windows, and on XEmacs. The internal caches are also using
hash-tables, so older versions of Emacs won't be supported anymore.
Performance tweaks in semanticdb have also occurred. Data base
tables now track the buffer they are associated with. While there is
now a chance a table may erroneously point to a dead buffer, the
benefit now is that the function "file-truename" is no longer called
during context analysis so long as the entire context is in memory.
This shaved off about 1/4 the time of a typical analysis for me on my
large projects at work.
The semantic-typecache and semantic-scope systems, which are used in
analysis were also subtly changed. I had found occurrences where a
:filename property was added to a live tag in a buffer, which was
saved to disk. This was particularly bad since it was the wrong
filename! This resulted in semantic-ia-fast-jump jumping to a
location in the wrong buffer.
Since it saved this info erroneously, you may need to delete the
contents of your ~/.semanticdb file. You could also just wait to see
the problem, and call the new `semanticdb-typecache-complete-flush'
command. A side effect of the typecache change is that it may now be
slower, though I didn't take a measurements at the right time. The
total time change for everything discussed so far was to make things
Ok, lastly there is a new symref tool. You can try it with:
M-x semantic-symref RET
It will tell you where the tag the cursor is in is used in your
project. It has two backend implementations. One with find/grep, and
one using GNU Global. It will detect which one to use. I've only
tested this with C/C++ so far. The find/grep solution works well for
small projects like CEDET. The GNU Global is nice on big projects.
It was set up using EIEIO, so you can write your own plug-in using
anything you want, like idutils, or cscope. The GNU Global extension
is one EIEIO class and two methods, so it's pretty easy. You can
expect to see more GNU Global usage as a semanticdb backend, or in EDE
in the future.
The high-level interface mentioned above is proof of concept.
Thoughts, suggestions, or patches are welcome. My long term goal is
to allow some sort of mass-edit across all hits. Not sure how that
all will work yet. The internal interface is much richer with several
I still have a backlog email things to deal with. I'll get to them
Eric Ludlam: eric@...
Siege: http://www.siege-engine.com Emacs: http://cedet.sourceforge.net