Re: Order of cluster searching with ace file (recent snapshot)
"Cyril ADRIAN" <[email protected]> Sat, 9 Dec 2006 06:09:42 +0100
| Newsgroups | gmane.comp.lang.eiffel.smalleiffel |
|---|---|
| Message-ID | <[email protected]> |
Hi Oliver, On 12/8/06, Oliver Elphick <[email protected]> wrote: > a class that was in both local and system (in different versions) was > chosen from system by compile and from local by finder. Changing the > order of clusters changes the result from finder but compile always > chooses the system cluster. > > Do finder and compile use different search algorithms? Not exactly. To answer to your question, I have first to explain how class finding is working in the recent snapshots. The aim is to allow more than one class to have the same name in the system, while automatically resolve ambiguities without relying on user parametry. In fact, the basic idea is that a group of classes (a library, a framework, or an application) is self-consistent. Therefore, when a class uses another class, it "expects" it to be the one the author (of the classes bundle) thought of. There are two cases: - either the author wrote the class. In that case he really wants *that* class to be used, even if another class with the same name exists within the system - or the author uses a standard class, or a library class, and of course he should be able to do so. To implement that, SmartEiffel now uses a notion of "class distance". Class distance is just the reification of what I wrote above. SmartEiffel starts looking for a class starting from the cluster of its client. It goes down, then up; only then does it scan the whole system. The whole system is just a bunch of unrelated cluster trees, which order is given by the ACE file (or implied by config if no ACE file is used). Note that the -verbose flag in very recent snapshots displays the whole system as it is computed using a tree display. There can be more than one tree. See the comments I added in a very recent snapshot, in ACE.find_class_text (around line 690). Now, the problem with finder is that it does not know this notion of class distance. Distance from what?... So it just scans the whole system and picks the first class it meets with the good name. Does it mean that the new finding algorithm is bad? I don't think so. To me, we must add an option to finder to tell it where to start looking for the class. Another option would be for finder to display by default all the classes with a given name. It's still WIP. I hope my explanations are clear. All comments are welcome. Best regards, --=20 Cyril ADRIAN - http://www.cadrian.net/~cyril Vt Sol inter planetas, Ita MVSICA inter Artes Liberales in medio radiat -- Heinrich Sch=FCtz, 1640