git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Randall S. Becker" <rsbecker@nexbridge.com>
To: "'Jeff King'" <peff@peff.net>, "'Johannes Sixt'" <j6t@kdbg.org>
Cc: "'Simon Ruderich'" <simon@ruderich.org>,
	"'Junio C Hamano'" <gitster@pobox.com>,
	"'Johannes Schindelin'" <Johannes.Schindelin@gmx.de>,
	"'René Scharfe'" <l.s.r@web.de>,
	"'Git List'" <git@vger.kernel.org>,
	"'Ralf Thielow'" <ralf.thielow@gmail.com>
Subject: RE: Improved error handling (Was: [PATCH 1/2] sequencer: factor out rewrite_file())
Date: Sun, 24 Dec 2017 10:45:50 -0500	[thread overview]
Message-ID: <000c01d37cce$49bd0d30$dd372790$@nexbridge.com> (raw)
In-Reply-To: <20171224145427.GG23648@sigill.intra.peff.net>

On December 24, 2017 9:54 AM, Jeff King wrote:
> Subject: Re: Improved error handling (Was: [PATCH 1/2] sequencer: factor
> out rewrite_file())
> 
> On Sat, Nov 18, 2017 at 10:01:45AM +0100, Johannes Sixt wrote:
> 
> > > Yeah, I have mixed feelings on that. I think it does make the
> > > control flow less clear. At the same time, what I found was that
> > > handlers like die/ignore/warn were the thing that gave the most
> > > reduction in complexity in the callers.
> >
> > Would you not consider switching over to C++? With exceptions, you get
> > the error context without cluttering the API. (Did I mention that
> > librarification would become a breeze? Do not die in library routines:
> > not a problem anymore, just catch the exception. die_on_error
> > parameters? Not needed anymore. Not to mention that resource leaks
> > would be much, MUCH simpler to treat.)
> 
> I threw this email on my todo pile since I was traveling when it came, but I
> think it deserves a response (albeit quite late).
> 
> It's been a long while since I've done any serious C++, but I did really like the
> RAII pattern coupled with exceptions. That said, I think it's dangerous to do it
> half-way, and especially to retrofit an existing code base. It introduces a
> whole new control-flow pattern that is invisible to the existing code, so
> you're going to get leaks and variables in unexpected states whenever you
> see an exception.
> 
> I also suspect there'd be a fair bit of in converting the existing code to
> something that actually compiles as C++.
> 
> So if we were starting the project from scratch and thinking about using
> C++ with RAII and exceptions, sure, that's something I'd entertain[1]
> (and maybe even Linus has softened on his opinion of C++ these days ;) ).
> But at this point, it doesn't seem like the tradeoff for switching is there.

While I'm a huge fan of OO, you really need a solid justification for going there, and a good study of your target audience for Open Source C++. My comments are based on porting experience outside of Linux/Windows:

1. Conversion to C++ just to pick up exceptions is a lot like "One does not simply walk to Mordor", as Peff hinted at above.
2. Moving to C++ generally involves a **complete** redesign. While Command Patterns (and and...)  may be very helpful in one level, the current git code base is very procedural in nature.
3. From a porting perspective, applications written in with C++ generally (there are exceptions) are significantly harder than C. The POSIX APIs are older and more broadly supported/emulated than what is available in C++. Once you start getting into "my favourite C++ library is...", or "version2 or version3", or smart pointers vs. scope allocation, things get pretty argumentative. It is (arguably) much easier to disable a section of code that won't function on a platform in C without having to rework an OO model, making subsequent merges pretty much impossible and the port unsustainable. That is unless the overall design really factors in platform differences right into the OO model from the beginning of incubation.
4. I really hate making these points because I am an OO "fanspert", just not when doing portable code. Even in java, which is more port-stable than C++ (arguably, but in my experience), you tend to hit platform library differences than can invalidate ports.

My take is "oh my please don't go there" for the git project, for a component that has become/is becoming required core infrastructure for so many platforms.

With Respect,
Randall

-- Brief whoami: NonStop&UNIX developer since approximately UNIX(421664400)/NonStop(211288444200000000)
-- In my real life, I talk too much.




  reply	other threads:[~2017-12-24 15:46 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-31  9:54 [PATCH 1/2] sequencer: factor out rewrite_file() René Scharfe
2017-10-31  9:58 ` [PATCH 2/2] sequencer: use O_TRUNC to truncate files René Scharfe
2017-10-31 16:34   ` Kevin Daudt
2017-11-01 15:34   ` Johannes Schindelin
2017-10-31 16:33 ` [PATCH 1/2] sequencer: factor out rewrite_file() Kevin Daudt
2017-11-01  6:06   ` Kevin Daudt
2017-11-01 11:10 ` Simon Ruderich
2017-11-01 13:00   ` René Scharfe
2017-11-01 14:44     ` [PATCH 1/2] wrapper.c: consistently quote filenames in error messages Simon Ruderich
2017-11-02  4:40       ` Junio C Hamano
2017-11-02  5:16         ` Junio C Hamano
2017-11-02 10:20           ` Simon Ruderich
2017-11-03  1:47             ` Junio C Hamano
2017-11-01 14:45     ` [PATCH 2/2] sequencer.c: check return value of close() in rewrite_file() Simon Ruderich
2017-11-01 17:09       ` René Scharfe
2017-11-01 15:33 ` [PATCH 1/2] sequencer: factor out rewrite_file() Johannes Schindelin
2017-11-01 19:47 ` Jeff King
2017-11-01 21:46   ` Johannes Schindelin
2017-11-01 22:16     ` Jeff King
2017-11-03 10:32       ` Simon Ruderich
2017-11-03 13:44         ` Junio C Hamano
2017-11-03 19:13           ` Jeff King
2017-11-04  9:05             ` René Scharfe
2017-11-04  9:35               ` Jeff King
2017-11-04 18:36             ` Simon Ruderich
2017-11-05  2:07               ` Jeff King
2017-11-06 16:13                 ` Improved error handling (Was: [PATCH 1/2] sequencer: factor out rewrite_file()) Simon Ruderich
2017-11-16 10:36                   ` Simon Ruderich
2017-11-17 22:33                   ` Jeff King
2017-11-18  9:01                     ` Johannes Sixt
2017-12-24 14:54                       ` Jeff King
2017-12-24 15:45                         ` Randall S. Becker [this message]
2017-12-25 10:28                         ` Johannes Sixt
2017-11-03 14:46         ` [PATCH 1/2] sequencer: factor out rewrite_file() Johannes Schindelin
2017-11-03 18:57           ` Jeff King

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='000c01d37cce$49bd0d30$dd372790$@nexbridge.com' \
    --to=rsbecker@nexbridge.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j6t@kdbg.org \
    --cc=l.s.r@web.de \
    --cc=peff@peff.net \
    --cc=ralf.thielow@gmail.com \
    --cc=simon@ruderich.org \
    /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).