[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [cdt-dev] completion performance
|
Yes, Rob, you are right on the money. We've called this "incremental
parse" and is on the CDT's long term feature wish list. Hopefully we can
find someone willing to put the work in to make it happen.
Cheers,
Doug
Robert O'Callahan wrote:
Apparently every completion operation forces a reparse of the entire
translation unit up to the completion point. In some of the files of
my project, this takes about five seconds (and this is a dual Xeon
AMD64...).
One way to address this would be to keep the parser, scanner and AST
around after a completion operation, "roll back" to some point before
the next completion point and any edits that have been performed, then
resume parsing forward to the next completion point. To make things
easier, rollback points could be severely limited, e.g.: parser must
be between declarations in the translation unit and must not be inside
any inclusion or macro expansion. During a completion parse, the
parser could record available rollback points and advertise them to
clients through a new API. (OK, this might not work well for projects
with translation units that wrap everything in a namespace
declaration, but our project doesn't and it could be extended.)
Performing a rollback would have to reset the scanner state, remove
declarations from the translation unit AST node, clear bindings, flush
scopes and recompute bindings --- at least. What else would have to be
done? Is this complete lunacy?
It seems that clearing out all bindings and recomputing them from
scratch would be a reasonable way to update the model ... I *hope*
that later declarations in the translation unit can't cause
ambiguities in earlier declarations to be resolved differently.
Otherwise we could try to resolve ambiguities at each potential
rollback point and refuse to allow rollback there if there are
outstanding ambiguities. Recomputing all bindings might not perform
well, I guess. But it looks like binding computation happens lazily so
maybe we wouldn't actually have to recompute bindings for AST parts
that were already parsed and aren't in the scope of the completion.
Rob
--
["Therefore, my dear friends, as you have always obeyed–not only in my
presence, but now much more in my absence–continue to work out your
salvation with fear and trembling, for it is God who works in you to will
and to act according to his good purpose." Philippians 2:12-13.]
------------------------------------------------------------------------
_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/cdt-dev
--
Doug Schaefer, Senior Software Developer
IBM Rational Software, Ottawa Lab
Kanata, Ontario, Canada