On Wed, 20 May 2009, Michael McCandless wrote:

On Wed, May 20, 2009 at 11:57 AM, Yonik Seeley
<yo...@lucidimagination.com> wrote:
On Wed, May 20, 2009 at 11:46 AM, Mark Miller <markrmil...@gmail.com> wrote:
Marvin Humphrey wrote:

Yeesh, that's evil.  :(

It will be sweet, sweet justice if one of your own projects gets infected
by
the kind of action-at-a-distance bug you're so blithely unconcerned about

Heh. Thats a bit over the top. It is evil stuff, but its much less evil in
this very contained instance than the general case. Much less.

But still a bit evil with the potential to grow. I'm not anymore of a fan of
passing a config to each class though. But I guess from a design point
of view, it does feel a little less evil.

Agree.

But passing settings around doesn't solve the problem.  Example:  New
settings may be chosen by an application for an IndexSearcher that's
incompatible with a custom older Query/Weight/Scorer.  There's really
no getting around that problem.  I think the static helps solve
drop-in compat for a complete working application.  Good components
should only be checking the static, not setting it.

Also, this static setting simply tells Lucene how to default settings.

A component/app can still be explicit when creating classes.  EG when
opening an IndexReader, if one always passes in the readOnly arg then
the static "actsAsVersion" would not be used.

I've been watching this thread with interest with my opinion swaying back and forth.

This last comment, though, pushes me to favor the settings class idea because that idea came with the promise of eliminating the combinatorial explosion of contructor and method overloads.

In addition, I very much like the idea of having one place list all the coherent configuration choices one can make. No, CHANGES.txt is not it. While it's interesting reading, it reads like a blog. It doesn't tie sensible settings together. It only gives a differential and chronological view of changes.

Having version-specific settings classes is a really neat place to list all possible settings in one place with sensible and coherent values for a version. The same idea could be used for other things than version by the way. It could help in picking one side of a configuration trade off over another.

For example:
   - a settings for favoring speed of updates over speed of queries if that
     makes sense
   - a settings for favoring index size over indexing speed
   ... and so on.

I don't see why this has to be limited just to Lucene version backwards
compatibility. Oh, and about that: I think we've reached the breaking point about backwards compatibility support a while ago. I recently hit a bug in my code where a commit() call was missing. Before 2.4, flushing the index committed it. Starting with 2.4, this is no longer the case. Yes, this is documented and that helped me fix the bug really quickly but backwards compatible it is not. My point here is that we've promised too much backwards compatibility for too long and it's been getting too hard to deliver that promise now.

Andi..
---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-dev-h...@lucene.apache.org

Reply via email to