[Pharo-project] About ecompletion
Hi all I wanted to share that with you. I'm reading the PhD of Romain Robbes and he has an excellent chapter on measuring different strategies for code completion. One of the best algorithm is to keep a list with the recently modified methods and the messages they send. His benchmark shows a drastic improvement even compared with ecompletion with RoelTyper. So david do you store the recently modified methods globally for all the browsers? Is it easily accessible? He also mentioned that we get even better results by combining RoelTyper and then this approach... any taker? this is important to have much better editing tools. Stef
On Sun, Nov 30, 2008 at 7:16 PM, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote:
I wanted to share that with you. I'm reading the PhD of Romain Robbes and he has an excellent chapter on measuring different strategies for code completion. One of the best algorithm is to keep a list with the recently modified methods and the messages they send.
His benchmark shows a drastic improvement even compared with ecompletion with RoelTyper.
So david do you store the recently modified methods globally for all the browsers? Is it easily accessible?
He also mentioned that we get even better results by combining RoelTyper and then this approach... any taker? this is important to have much better editing tools.
I guess Romain already did something to be able to compare the results. Where is his work? -- Damien Cassou http://damiencassou.seasidehosting.st
This is a very nice result he had. Alexandre On 1 Dec 2008, at 08:50, Damien Cassou wrote:
On Sun, Nov 30, 2008 at 7:16 PM, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote:
I wanted to share that with you. I'm reading the PhD of Romain Robbes and he has an excellent chapter on measuring different strategies for code completion. One of the best algorithm is to keep a list with the recently modified methods and the messages they send.
His benchmark shows a drastic improvement even compared with ecompletion with RoelTyper.
So david do you store the recently modified methods globally for all the browsers? Is it easily accessible?
He also mentioned that we get even better results by combining RoelTyper and then this approach... any taker? this is important to have much better editing tools.
I guess Romain already did something to be able to compare the results. Where is his work?
-- Damien Cassou http://damiencassou.seasidehosting.st
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
So david do you store the recently modified methods globally for all the browsers?
yes.
Is it easily accessible?
yes. The information is stored in a globally readable dictionary at the moment. For performance reasons I will probably slightly change the storage, but access to it will still be easy of course. David
How Program History Can Improve Code Completion Romain Robbes ~ Michele Lanza ASE 2008 (12% acceptance) ~ to appear ~ IEEE CS, 2008 his pageweb is not up to date I can send you his Phd On Dec 1, 2008, at 12:50 PM, Damien Cassou wrote:
On Sun, Nov 30, 2008 at 7:16 PM, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote:
I wanted to share that with you. I'm reading the PhD of Romain Robbes and he has an excellent chapter on measuring different strategies for code completion. One of the best algorithm is to keep a list with the recently modified methods and the messages they send.
His benchmark shows a drastic improvement even compared with ecompletion with RoelTyper.
So david do you store the recently modified methods globally for all the browsers? Is it easily accessible?
He also mentioned that we get even better results by combining RoelTyper and then this approach... any taker? this is important to have much better editing tools.
I guess Romain already did something to be able to compare the results. Where is his work?
-- Damien Cassou http://damiencassou.seasidehosting.st
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Dear all, I uplooaded the paper at: http://www.inf.unisi.ch/phd/robbes/papers/ASE2008-completion.pdf Cheers, Romain On Dec 2, 2008, at 10:48 AM, Stéphane Ducasse wrote:
How Program History Can Improve Code Completion Romain Robbes ~ Michele Lanza ASE 2008 (12% acceptance) ~ to appear ~ IEEE CS, 2008
his pageweb is not up to date I can send you his Phd
On Dec 1, 2008, at 12:50 PM, Damien Cassou wrote:
On Sun, Nov 30, 2008 at 7:16 PM, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote:
I wanted to share that with you. I'm reading the PhD of Romain Robbes and he has an excellent chapter on measuring different strategies for code completion. One of the best algorithm is to keep a list with the recently modified methods and the messages they send.
His benchmark shows a drastic improvement even compared with ecompletion with RoelTyper.
So david do you store the recently modified methods globally for all the browsers? Is it easily accessible?
He also mentioned that we get even better results by combining RoelTyper and then this approach... any taker? this is important to have much better editing tools.
I guess Romain already did something to be able to compare the results. Where is his work?
-- Damien Cassou http://damiencassou.seasidehosting.st
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Romain Robbes http://www.inf.unisi.ch/phd/robbes
Hi Romain, On Tue, Dec 2, 2008 at 12:11 PM, Romain Robbes <romain.robbes@lu.unisi.ch> wrote:
Dear all,
I uplooaded the paper at: http://www.inf.unisi.ch/phd/robbes/papers/ASE2008-completion.pdf
Do you have packages that I can install inside dev images to enhance code completion? -- Damien Cassou http://damiencassou.seasidehosting.st
Hi Damien, The work is part of a prototype and was more focused on the evaluation part. As such there are a bunch of dependencies that would need to be resolved beforehand as my prototype is quite large. But I believe the algorithms are described clearly enough in the paper. The one which provides the more "Bang for the Buck" would be "Recently Modiï¬ed Method Bodies" which proposes as completion entries the methods calls in the bodies of methods which were recently changed (ordered by time, ie most recent first). A further (but small) improvement would be to merge it with type inference when the information is available. Such as algorithm would be quite small to implement. If you want some more details we can of course talk further about it. Cheers, Romain On Dec 2, 2008, at 1:56 PM, Damien Cassou wrote:
Hi Romain,
On Tue, Dec 2, 2008 at 12:11 PM, Romain Robbes <romain.robbes@lu.unisi.ch> wrote:
Dear all,
I uplooaded the paper at: http://www.inf.unisi.ch/phd/robbes/papers/ASE2008-completion.pdf
Do you have packages that I can install inside dev images to enhance code completion?
-- Damien Cassou http://damiencassou.seasidehosting.st
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Romain Robbes http://www.inf.unisi.ch/phd/robbes
Hi Romain,
But I believe the algorithms are described clearly enough in the paper. The one which provides the more "Bang for the Buck" would be "Recently Modiï¬ed Method Bodies" which proposes as completion entries the methods calls in the bodies of methods which were recently changed (ordered by time, ie most recent first). A further (but small) improvement would be to merge it with type inference when the information is available. Such as algorithm would be quite small to implement.
But you implemented those algorithms already in your prototype I think? Would it be possible to extract them from this large prototype and put them in a separate package that we can easily load? That would be really great. David
Hi all, I would run this: (present in InstallerMonticello>>basicView) Installer ss project: 'Installer'; view: 'Installer-Core'. But, I have an error: doesNotUnderstand: #definitions. Can anyone help me ? Thanks Jannik
jannik.laval.gmail wrote:
Hi all,
I would run this: (present in InstallerMonticello>>basicView) Installer ss project: 'Installer'; view: 'Installer-Core'.
But, I have an error: doesNotUnderstand: #definitions.
Can anyone help me ? Thanks
Jannik Fixed properly with latest Monticello1.5/1.6
Workaround added to latest Installer for older Monticello releases Keith
Ok thanks Jannik Le 2 déc. 08 à 21:20, Keith Hodges a écrit :
jannik.laval.gmail wrote:
Hi all,
I would run this: (present in InstallerMonticello>>basicView) Installer ss project: 'Installer'; view: 'Installer-Core'.
But, I have an error: doesNotUnderstand: #definitions.
Can anyone help me ? Thanks
Jannik Fixed properly with latest Monticello1.5/1.6
Workaround added to latest Installer for older Monticello releases
Keith
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Hi guys This is something really interesting to me so if you dont have time, I can take a look at it, either to the paper or the code if Romain can put it somewhere. David, do you have some pointers about the recent modification list in OB? As a newcomer, I dont know who is the developper/maintainer for eCompletion. On 2 déc. 08, at 18:52, David Röthlisberger wrote:
Hi Romain,
But I believe the algorithms are described clearly enough in the paper. The one which provides the more "Bang for the Buck" would be "Recently Modiï¬ed Method Bodies" which proposes as completion entries the methods calls in the bodies of methods which were recently changed (ordered by time, ie most recent first). A further (but small) improvement would be to merge it with type inference when the information is available. Such as algorithm would be quite small to implement.
But you implemented those algorithms already in your prototype I think? Would it be possible to extract them from this large prototype and put them in a separate package that we can easily load? That would be really great.
David
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Simon
On Wed, Dec 3, 2008 at 1:07 PM, Simon Denier <Simon.Denier@inria.fr> wrote:
As a newcomer, I dont know who is the developper/maintainer for eCompletion.
There is no maintainer of eCompletion actually. Ruben Bakker implemented it. I have write access to the repository if you have something to commit. -- Damien Cassou http://damiencassou.seasidehosting.st
Ok, it works with the last version. Now, I have a problem with the method browse: Installer ss project:'Installer'; browse: 'InstallerAll'. The browser open on the class Loading.MCVersionLoader. Is there any reason ? Thanks Jannik Le 2 déc. 08 à 21:20, Keith Hodges a écrit :
jannik.laval.gmail wrote:
Hi all,
I would run this: (present in InstallerMonticello>>basicView) Installer ss project: 'Installer'; view: 'Installer-Core'.
But, I have an error: doesNotUnderstand: #definitions.
Can anyone help me ? Thanks
Jannik Fixed properly with latest Monticello1.5/1.6
Workaround added to latest Installer for older Monticello releases
Keith
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
On 3 déc. 08, at 13:38, Damien Cassou wrote:
On Wed, Dec 3, 2008 at 1:07 PM, Simon Denier <Simon.Denier@inria.fr> wrote:
As a newcomer, I dont know who is the developper/maintainer for eCompletion.
There is no maintainer of eCompletion actually. Ruben Bakker implemented it. I have write access to the repository if you have something to commit.
OK, thanks for the info, I will try to get into it.
-- Damien Cassou http://damiencassou.seasidehosting.st
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Simon
jannik.laval.gmail wrote:
Ok, it works with the last version.
Now, I have a problem with the method browse: Installer ss project:'Installer'; browse: 'InstallerAll'.
The browser open on the class Loading.MCVersionLoader.
Is there any reason ? Thanks
Jannik The reason being that earlier versions of installer would return an MCVersion in order to laod a single version. Current versions return an MCVersionLoader which doesnt implement browse, and so falls back to the implementation on Object.
Fixed in latest MC1.5/6, and a workaround has been added to latest Installer. Keith
Hi Simon,
David, do you have some pointers about the recent modification list in OB?
There is the package ColorMap on Squeaksource at http://www.squeaksource.com/Hermion. If it's installed, OB starts to record all recently browsed and modified methods. You can then access the data in CMDataBase. Storage is optimized for the purpose of color maps, but other tools should be able to access the data as well. David
Hi Simon, Thanks for the interest! I just finished my Ph.D., so I must say my mind is a bit elsewhere at the moment ;-). Here is the extension to eCompletion I made. Keep in mind that the code will probably not load cleanly as parts of it depend on the code in my prototype which is larger. There are two packages: - ChangeCompletion contains the code I used to measure the accuracy of the benchmark, and the variants of the completion algorithm itself. It also contains some overrides I needed to introduce more flexibility in ECompletion - OCompletion contains the code of a small UI experiment, where completion is "always activated", i.e. you don't need to press tab or control-space to get the menu, it is always there, but with only two or three propositions at each time. As for some general comments about how ecompletion is implemented, here is what I can tell you (you can ask me more of course). ECompletion has an ECEntry object that represents a completion proposal (one of the items in the menu). They are sorted alphabetically. I introduced a version containing a date to sort them according to usage. ECContext is the class that is the actual engine and returns a model of the system when asked for completion. The model in turn gives a list of entries for a given prefix. There are several kinds of models returned, depending if the type of the receiver is known (eg a model for a class, or the general untyped model of the system). The models use tables of symbols that they convert to entries when asked for a completion. Based on this, I introduced variants of completion algorithms by introducing subclasses of ECContext and ECTypedModel and ECUntypedModel, that build tables of symbols according to recent changes in the system. I introduced a processChange: method in ECContext for that. It uses the change representation of my prototype to do so, so you would probably need to change that (e.g. use the SystemChangeNotifier and the normal smalltalk parser). It selects the interesting entries according to the algorithm, and includes the date so that they are ordered as they should. I think the one with the "recent method bodies" algorithm is the one named ECECContext3 (I am aware the name is horrible ;-)). Finally, to activate the whole thing, I recommend you to have a subclass of the ECController (like the OController I implemented). You then need to switch from one to the other in a method in StringHolder such as: createCompletionController ^ (bool ifTrue: [OController] ifFalse: [ECController]) model: self It's important to have a way to toggle the completion off without typing in case it breaks ;-). Cheers, Romain On Dec 3, 2008, at 1:07 PM, Simon Denier wrote:
Hi guys
This is something really interesting to me so if you dont have time, I can take a look at it, either to the paper or the code if Romain can put it somewhere.
David, do you have some pointers about the recent modification list in OB?
As a newcomer, I dont know who is the developper/maintainer for eCompletion.
On 2 déc. 08, at 18:52, David Röthlisberger wrote:
Hi Romain,
But I believe the algorithms are described clearly enough in the paper. The one which provides the more "Bang for the Buck" would be "Recently Modiï¬ed Method Bodies" which proposes as completion entries the methods calls in the bodies of methods which were recently changed (ordered by time, ie most recent first). A further (but small) improvement would be to merge it with type inference when the information is available. Such as algorithm would be quite small to implement.
But you implemented those algorithms already in your prototype I think? Would it be possible to extract them from this large prototype and put them in a separate package that we can easily load? That would be really great.
David
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Simon
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Romain Robbes http://www.inf.unisi.ch/phd/robbes
participants (8)
-
Alexandre Bergel -
Damien Cassou -
David Röthlisberger -
jannik.laval.gmail -
Keith Hodges -
Romain Robbes -
Simon Denier -
Stéphane Ducasse