From: Junio C Hamano <gitster@pobox.com>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: Stefan Beller <sbeller@google.com>,
git@vger.kernel.org, jacob.keller@gmail.com, peff@peff.net,
johannes.schindelin@gmail.com, Jens.Lehmann@web.de,
ericsunshine@gmail.com
Subject: Re: [PATCH 1/9] submodule-config: "goto" removal in parse_config()
Date: Tue, 27 Oct 2015 14:39:37 -0700 [thread overview]
Message-ID: <xmqq611sng86.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <20151027212645.GF7881@google.com> (Jonathan Nieder's message of "Tue, 27 Oct 2015 14:26:45 -0700")
Jonathan Nieder <jrnieder@gmail.com> writes:
> Not having read the patch yet, the above makes me suspect this is
> going to make the code worse. A 'goto' for exception handling can
> be a clean way to ensure everything allocated gets released, and
> restructuring to avoid that can end up making the code more error
> prone and harder to read.
>
> In other words, the "goto" removal should be a side effect and not
> the motivation.
Yes, I shared the same general feeling (cf. $gmane/279405).
> More generally, the patch seems to be about changing from a code structure
> of
>
> if (condition) {
> handle it;
> goto done;
> }
> if (other condition) {
> handle it;
> goto done;
> }
> handle misc;
> goto done;
>
> to
>
> if (condition) {
> handle it;
> } else if (other condition) {
> handle it;
> } else {
> handle misc;
> }
>
> In this example the postimage is concise and simple enough that it's
> probably worth it, but it is not obvious in the general case that this
> is always a good thing to do.
Generally, a large piece of code is _easier_ to read with forward
"goto"s that jump to the shared clean-up code, as they serve as
visual cues that tell the reader "you can stop reading here and
ignore the remainder of this if/else if/... cascade".
> Now that I see the patch is already merged, I don't think it needs
> tweaks. Just a little concerned about the possibility of people
> judging from the commit message and emulating the pattern in the rest
> of git.
Yes, we shouldn't let people blindly imitate this change. I merged
it primarily because I wanted the change get out of my hair, as
other changes in flight started conflicting with it.
This kind of change can be good one only in a narrowly defined case
(like this one) but I agree that in general, as you said at the
beginning, it is an easy way to make the resulting code less
maintainable and harder to read.
Thanks.
next prev parent reply other threads:[~2015-10-27 21:39 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-27 18:15 [PATCH 0/9] Expose the submodule parallelism to the user Stefan Beller
2015-10-27 18:15 ` [PATCH 1/9] submodule-config: "goto" removal in parse_config() Stefan Beller
2015-10-27 21:26 ` Jonathan Nieder
2015-10-27 21:39 ` Junio C Hamano [this message]
2015-10-27 18:15 ` [PATCH 2/9] submodule config: keep update strategy around Stefan Beller
2015-10-27 18:15 ` [PATCH 3/9] run_processes_parallel: Add output to tracing messages Stefan Beller
2015-10-27 18:15 ` [PATCH 4/9] git submodule update: have a dedicated helper for cloning Stefan Beller
2015-10-27 18:15 ` [PATCH 5/9] submodule update: expose parallelism to the user Stefan Beller
2015-10-27 20:59 ` Junio C Hamano
2015-10-28 21:40 ` Stefan Beller
2015-10-28 22:20 ` Junio C Hamano
2015-10-27 18:15 ` [PATCH 6/9] clone: allow an explicit argument for parallel submodule clones Stefan Beller
2015-10-27 20:57 ` Junio C Hamano
2015-10-28 20:50 ` Stefan Beller
2015-10-27 18:15 ` [PATCH 7/9] submodule config: remove name_and_item_from_var Stefan Beller
2015-10-27 18:15 ` [PATCH 8/9] submodule-config: parse_config Stefan Beller
2015-10-27 18:15 ` [PATCH 9/9] fetching submodules: Respect `submodule.jobs` config option Stefan Beller
2015-10-27 21:00 ` Junio C Hamano
2015-10-27 19:12 ` [PATCH 0/9] Expose the submodule parallelism to the user Junio C Hamano
2015-10-28 23:21 ` [PATCHv2 0/8] " Stefan Beller
2015-10-28 23:21 ` [PATCHv2 1/8] run_processes_parallel: Add output to tracing messages Stefan Beller
2015-10-30 1:10 ` Eric Sunshine
2015-10-30 17:32 ` Stefan Beller
2015-10-28 23:21 ` [PATCHv2 2/8] submodule config: keep update strategy around Stefan Beller
2015-10-30 1:14 ` Eric Sunshine
2015-10-30 17:38 ` Stefan Beller
2015-10-30 18:16 ` Eric Sunshine
2015-10-30 18:25 ` Stefan Beller
2015-10-28 23:21 ` [PATCHv2 3/8] submodule config: remove name_and_item_from_var Stefan Beller
2015-10-30 1:23 ` Eric Sunshine
2015-10-30 18:37 ` Stefan Beller
2015-10-28 23:21 ` [PATCHv2 4/8] submodule-config: parse_config Stefan Beller
2015-10-30 1:53 ` Eric Sunshine
2015-10-30 19:29 ` Stefan Beller
2015-10-28 23:21 ` [PATCHv2 5/8] fetching submodules: Respect `submodule.jobs` config option Stefan Beller
2015-10-30 2:17 ` Eric Sunshine
2015-10-28 23:21 ` [PATCHv2 6/8] git submodule update: have a dedicated helper for cloning Stefan Beller
2015-10-29 22:34 ` Junio C Hamano
2015-10-28 23:21 ` [PATCHv2 7/8] submodule update: expose parallelism to the user Stefan Beller
2015-10-28 23:21 ` [PATCHv2 8/8] clone: allow an explicit argument for parallel submodule clones Stefan Beller
2015-11-01 8:58 ` Eric Sunshine
2015-10-29 13:19 ` [PATCHv2 0/8] Expose the submodule parallelism to the user Ramsay Jones
2015-10-29 15:51 ` Stefan Beller
2015-10-29 17:23 ` Junio C Hamano
2015-10-29 17:30 ` Stefan Beller
2015-10-29 23:50 ` Ramsay Jones
2015-11-03 19:41 ` Stefan Beller
2015-10-29 20:12 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq611sng86.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=Jens.Lehmann@web.de \
--cc=ericsunshine@gmail.com \
--cc=git@vger.kernel.org \
--cc=jacob.keller@gmail.com \
--cc=johannes.schindelin@gmail.com \
--cc=jrnieder@gmail.com \
--cc=peff@peff.net \
--cc=sbeller@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).