Re: [PATCH v4] git: treat "-C <treat>" as a no-op when <path> is empty

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 03/08/2015 12:44 PM, Junio C Hamano wrote:
Eric Sunshine <sunshine@xxxxxxxxxxxxxx> writes:

On Sat, Mar 7, 2015 at 5:49 AM, karthik nayak <karthik.188@xxxxxxxxx> wrote:

Also "*(*argv)[1]" seems more readable to me, maybe more of a perspective?

I also had considered suggesting (*argv)[1][0] as more readable, but
it is primarily personal taste, and I didn't want to bike-shed the
issue.

I didn't mention that in earlier review rounds for the same reason,
but I saw Andreas Schwab also independently made the same comment,
so that makes three of us.

That does not change the fact that this is merely a matter of
preference; I wouldn't even call this one a "taste" (use of which
implies that there are judgement involved, as in "good taste" and
"bad taste").

But because it is "preference", the only time we can discuss is when
a new code is submitted and is under review.  Once it is in the
tree, it is not really worth extra patch noise to go and change.

As everybody knows, POINTER[0] and *POINTER are equivalent.  We have
quite a few places where we say "let's treat passing an empty string
the same as not passing an argument at all" with

	if (!POINTER || !*POINTER)
         	; /* no-op */
	else {
         	/* do something with POINTER */
                 fn(POINTER);
	}

and we could say !POINTER[0] instead of !*POINTER, interchangeably.

We tend to prefer (again, I do not think this is particularly a
"taste" thing) *POINTER over POINTER[0] when POINTER is just a
single variable in the above pattern we often see in our code.

But when POINTER is an expression like (*argv)[1], where you unwrap
the operators according to their precedences, it often is easier to
read if you do not have to flip your eyes left and right too often.

You first look at "argv", then notice the prefix "*" (you have to
move your eyes to the left here) and know argv points at a location
that holds a pointer.  Then you notice the suffix [1] (now to the
right) and know that pointer points at an array and the expression
is talking about in its second element.

Now, you want to say that second element is actually a pointer to a
string and want to talk about the beginning of that string.  If you
express it as "*(*argv)[1]", it forces the reader to go back to the
left end once more.  If you write it as "(*argv)[1][0]", the reader
can keep going to the right, starting from the last thing the reader
read and understood (which is the "[1]" at the right end).

At least, that is how I analyze _my_ preference---the latter feels
easier on my eyes.

But as I said this is a mere preference thing.


The way you put it, it makes a lot of sense that most would prefer "(*argv)[1][0]" rather than "*(*argv)[1]".

Thanks for clearing that out.
Regards
-Karthik
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]