Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [cdt-dev] completion performance

Resource change listeners will only give you updates on resources in the workspace though.  Many parsed files will be in system includes and user included directories.

 

I’m not saying don’t do it, I’m just saying that it won’t cover every single situation.  There is only so much you can do about files that Eclipse doesn’t truly know about in the resource sense.  There would have to be some sort of periodic scan for these files.

 

___________________________________________

 

Chris Recoskie

Software Designer

IDE Frameworks Group

Texas Instruments, Toronto

 

 


From: cdt-dev-bounces@xxxxxxxxxxx [mailto:cdt-dev-bounces@xxxxxxxxxxx] On Behalf Of Robert O'Callahan
Sent: Tuesday, July 05, 2005 12:38 AM
To: CDT General developers list.
Subject: Re: [cdt-dev] completion performance

 

On 05/07/05, John Camelon <jcamelon@xxxxxxxxxx> wrote:

I've given some thought on how incremental parse can work.
When one edits a working copy, we can use the change bars to determine what portion of the parse tree is dirty or not.
Content Assist (or the selection features as well) hold onto the AST between parses and we use the clean-up-until-offset to determine how to prune the tree and where to restart.  
Of course, we would have to add in a bunch of eventing to make sure that we would be getting up to date working copies and/or saved files as time went on.


It seems fairly simple to use a resource change listener to detect changes to included files referenced by cached parser(s), and use the change bars to detect changes to the current file/translation unit. I'm assuming that it's correct to do the parse using the working copy of the current file and the base copies of all included files.

 

That being said, the largest problem with having a feature hang onto an AST is that the footprint is quite substantial.  The only thing we have been able to cache up to this point are the decoded file buffers as CodeReaders.  The syntactic AST has fine granularity, which means that to some extent, the number of nodes in the tree are preportional to the number of tokens in the translation unit.  Sharing AST-fragments between parses (i.e. the physical AST for windows.h) is difficult since the content of a file depends upon the IScannerInfo (which may change, w/per file options or discovery) or even the order of include directives.


In the first step I wouldn't worry about this :-). A simple approach would just keep one cached parser in a given workspace.

Sharing AST fragments might not be hard because you don't have to predict in advance whether an AST fragment will be shareable (the problem is a bit different from precompiled headers). You can parse a few translation units, compare their AST structure, and share subtrees that you know are identical. However you won't be able to share AST fragments that have bindings, you'll definitely have to clear and recompute bindings whenever you change the context in which you're using a shared AST fragment.


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.]


Back to the top