[ 
https://issues.apache.org/jira/browse/LUCENE-3736?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13202446#comment-13202446
 ] 

Michael McCandless commented on LUCENE-3736:
--------------------------------------------

bq. If you look at the test cases, the code is much less verbose and better 
readable.

Well, you separated each method call onto a separate line, so, it'd
look basically the same without chaining?  If only all chained API
consumers followed your approach...

To be clear: what I dislike about chaining is it creates ambiguity
in how you write the code that consumes our APIs.
You().can().do().this().  Or, you().
can().
do().
this().  Or maybe you().can().
do().this().

Ambiguity is very bad, especially in open-source dev: it invites
bikeshed wars, harming communities by dividing them, spending precious
time debating what from the outside would seem like trivial
differences.

bq. If somebody wants to change this, he can do this in another issue called 
"remove all builders from Lucene"

The first API I would fix is IndexWriterConfig; its setters should not
be chainable, because now we get code like this:

{noformat}
IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig( 
TEST_VERSION_CURRENT, new 
MockAnalyzer(random)).setMaxBufferedDocs(2).setMergePolicy(newLogMergePolicy()));
{noformat}

Code is already hard enough to read... we should not make it even
harder by enabling big hard-to-read compound expressions like this.

This phenomenon is [unfortunately] human nature, and also well outside
of software development; see
http://en.wikipedia.org/wiki/Parkinson's_Law_of_Triviality ... the
less important the ambiguity the more brutal the bike shed wars will
be.  You see this also in Theodor Geisel ("Dr Seuss")'s delightful
Sneetches (the stars on their stomachs), his Butter Battle Book (which
side to butter the bread on), which end of the egg to crack (the
Lilliputians in Gulliver's Travels), etc.  It's not an uncommon
problem :)

Battles over code styling is a great example of this phenomenon, and
fortunately we long ago adopted a standard for Lucene so we don't
argue (much!) about code style.  There is one way and there is no
(little!) ambiguity left.

So I don't want to add any more chainable methods in Lucene.  It
creates an unnecessary ambiguity and I don't like where that will lead
us.  We should reduce ambiguity whenever we can: there should
generally be one obvious way to do something.

                
> ParallelReader is now atomic, rename to ParallelAtomicReader and also add a 
> ParallelCompositeReader (that requires LogDocMergePolicy to have identical 
> subreader structure)
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: LUCENE-3736
>                 URL: https://issues.apache.org/jira/browse/LUCENE-3736
>             Project: Lucene - Java
>          Issue Type: Sub-task
>          Components: core/index
>            Reporter: Uwe Schindler
>            Assignee: Uwe Schindler
>             Fix For: 4.0
>
>         Attachments: LUCENE-3736.patch, LUCENE-3736.patch, LUCENE-3736.patch
>
>
> The plan is:
> - Move all subreaders to ctor (builder-like API. First build reader-set, then 
> call build)
> - Rename ParallelReader to ParallelAtomicReader
> - Add a ParallelCompositeReader with same builder API, but taking any 
> CompositeReader-set and checks them that they are aligned (docStarts 
> identical). The subreaders are ParallelAtomicReaders.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

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

Reply via email to