public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: John Gilmore <gnu@toad.com>
Cc: Pedro Alves <palves@redhat.com>, Tom Tromey <tromey@redhat.com>,
	       gdb@sourceware.org
Subject: Re: Will therefore GDB utilize C++ or not?
Date: Fri, 23 Nov 2012 15:26:00 -0000	[thread overview]
Message-ID: <20121123152612.GA22948@host2.jankratochvil.net> (raw)
In-Reply-To: <201211222142.qAMLgg2N005121@new.toad.com>

On Thu, 22 Nov 2012 22:42:42 +0100, John Gilmore wrote:
> > For most embedded Linux kernel targets it will be enough to build the standard
> > fully featured gdbserver with static libstdc++ (making it only ~2x larger).
> 
> It becomes ~2x larger for what benefit?

http://sourceware.org/ml/gdb/2012-04/msg00044.html

Specifically the size of code itself is irrelevant.  It may have rather other
disadvantages such as clearly lower compatibility with compilers.  Not that it
would be a problem nowadays on GDB supported platforms.


> > There will be also separate minimal gdbserver in plain C.
> >					...	 This minimal server has no
> > need for non-stop/multi-inferior etc., it will be created by stripping down
> > the current one; but in fact one can be also easily code it from scratch.
> 
> Why in heaven's name would you take working code that's in the release
> today, and "strip it down" to be less functional?  What's wrong with
> continuing to ship it merely the way it is?

Because the advanced features (non-stop/multi-inferior etc.) are still not
fully stable, their require more fixes and extensions.

Coincidentally these features are not required on the very few target
platforms possibly not supporting C++ for gdbserver.

One option is to use existing C gdbserver as is on those few non-C++ target
platforms.  But if anyone tries to use some advanced feature there s/he may
face bugs/incompatibilities in those.  Therefore I believe it is easier for
everyone not to ship broken and unmaintained features at all.

The other option of keeping gdbserver in C faces the problem it could no
longer share significant code parts with gdb.  Problems from such design were
described by Pedro as not feasible:
	http://sourceware.org/ml/gdb/2012-04/msg00063.html


I was always against C++ till and including first years od GDB, this is why
I always preferred GTK with its C++-in-C GObject framework compared to Qt.
The reasons in my case were:
 * Compiler incompatibility, around 2000 C++ across GCC and compilers on
   commercial Unices was not compatible.  AFAIK C++ standardization is now OK
   and also the set of compilers/platforms in use is reduced compared to 2000.
 * Debugging C++ was a problem as GDB did not handle it well.  It has improved
   a lot and besides that the remaining issues will get fixed faster with GDB
   in C++.
 * That "tables of C pointers" as in GObject is good enough replacement for
   C++.  That was a misunderstand what is C++, virtual method table is
   a negligible part of what provides C++ and its STL/Boost libraries.

I do not want to start showing how easier are C constructs when written in
a proper way in C++, one such was already posted here with shared_ptr:
	http://sourceware.org/ml/gdb/2012-11/msg00063.html
	Although that was still overcomplicated to match Pedro's real pointer
	in the former code.  Usually one can keep and pass the variable by
	value (with no shared_ptr) thanks to the move constructor efficiency.

The repeating simple crasher bugs just due to the C++-in-C GDB framework which
is only reviewer checked and not compiler checked is too fragile.  You can
takeover fixing all these annoying crasher bugs like:
	https://bugzilla.redhat.com/show_bug.cgi?id=864575
Fortunately compilers have evolved during the years and what had to be
verified by hand can be now automated by the compiler.  There are still bugs
in the programs but people can spend more time fixing the bugs not caught by
the compiler instead of doing the same what the compiler does automatically.

While not the typical C++ purpose specifically now (again) I push for C++
because I have to upstream the 64-bit inferior offsets/sizes as present in
many patches posted by Siddhesh Poyarekar <siddhesh@redhat.com>.  After almost
the year of work we/I can start again as there no way for easy refactorization
of C code.  splint or compiler warnings were shown as incomplete for that
purpose, fixing very every '-Wconversion -Wno-sign-conversion' warning is many
times more expensive (than fixing just the cases requested to be fixed).
With C++ one can provide container classes for the numerical types and catch
just the operations violating the type width safety.
	#include <stdlib.h>
	class Type64 {
	private:
	  int64_t v;
	  operator int32_t () { abort (); } // error
	public:
	  operator int64_t () { return v; }
	  int64_t get () { return v; }
	  Type64() {}
	  Type64(int64_t i) { v = i; }
	  Type64& operator = (const Type64 &rhs) { v = rhs.v; return *this; }
	  Type64& operator ++ () { ++v; return *this; }
	  Type64 operator ++ (int) { Type64 retval(*this); ++v; return retval; }
	  Type64 operator += (const Type64 &rhs) { v += rhs.v; return *this; }
	};
	int main () {
	  Type64 v64 = 0;
	  v64++;
	  ++v64;
	  v64 += 2;
	  int error = v64; // error: ‘Type64::operator int32_t()’ is private
	  return v64.get (); // safe explicit request for width violation
	}


Jan

  reply	other threads:[~2012-11-23 15:26 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-30 16:14 Jan Kratochvil
2012-04-04 20:48 ` Tom Tromey
2012-04-04 21:55   ` Mark Kettenis
2012-04-05  3:31     ` Sergio Durigan Junior
2012-04-05 11:46     ` Phil Muldoon
2012-04-06  0:35       ` Will therefore GDB utilize C++? Not John Gilmore
2012-04-06  1:35         ` Russell Shaw
2012-04-06 13:16           ` Joel Brobecker
2012-04-06 14:43             ` Russell Shaw
2012-04-06 15:34             ` Michael Eager
2012-04-06 23:32             ` John Gilmore
2012-04-07  1:04               ` Robert Dewar
2012-04-07  1:52                 ` Thomas Dineen
2012-04-07 16:54               ` Michael Eager
2012-04-09 23:59               ` Stan Shebs
2012-04-05  0:22   ` Will therefore GDB utilize C++ or not? asmwarrior
2012-04-09 18:41   ` Pedro Alves
2012-04-09 19:05     ` Jan Kratochvil
2012-04-09 19:49       ` Pedro Alves
2012-04-09 20:15         ` Paul Smith
2012-04-12 20:06         ` Daniel Jacobowitz
2012-04-12 21:28           ` Paul_Koning
2012-04-13  0:04           ` Doug Evans
2012-04-18 14:10             ` Pedro Alves
2012-04-18 20:27             ` Tom Tromey
2012-04-18 14:08           ` Pedro Alves
2012-04-21 17:24             ` Daniel Jacobowitz
2012-04-16  6:55         ` Jan Kratochvil
2012-04-18 14:11           ` Pedro Alves
2012-04-18 15:16             ` Jan Kratochvil
2012-04-18 15:28               ` Pedro Alves
2012-04-18 15:54                 ` Jan Kratochvil
2012-04-18 16:01                   ` Pedro Alves
2012-04-18 16:07                   ` Joel Brobecker
2012-04-18 16:13                     ` Jan Kratochvil
2012-04-18 16:23                       ` Joel Brobecker
2012-04-18 16:31                         ` Joel Sherrill
2012-04-18 16:50                           ` Pedro Alves
2012-04-18 16:57                             ` Joel Brobecker
2012-04-18 17:28                               ` Joel Sherrill
2012-04-18 17:40                               ` Paul_Koning
2012-04-18 20:37                                 ` Frank Ch. Eigler
2012-04-18 20:38                                   ` Paul_Koning
2012-04-18 20:36                     ` Tom Tromey
2012-04-18 17:48                   ` John Gilmore
2012-04-18 19:07                     ` Tom Tromey
2012-04-18 23:10                       ` John Gilmore
2012-05-18 18:36                         ` Tom Tromey
2012-05-18 18:47                           ` Paul_Koning
2012-05-18 19:36                             ` Tom Tromey
2012-05-18 19:44                               ` Paul_Koning
2012-05-18 20:07                                 ` Tom Tromey
2012-05-18 20:41                                   ` Aurelian Melinte
2012-05-18 18:51                         ` Lazy CU expansion (Was: Will therefore GDB utilize C++ or not?) Tom Tromey
2012-04-18 20:34                   ` Will therefore GDB utilize C++ or not? Tom Tromey
2012-04-18 19:18               ` Will C++ proponents spend 20 minutes to try what they're proposing? John Gilmore
2012-04-18 19:23                 ` Jan Kratochvil
2012-04-18 20:40                 ` Tom Tromey
2012-04-18 20:56                   ` Mike Frysinger
2012-04-18 20:31           ` Will therefore GDB utilize C++ or not? Tom Tromey
2012-04-18 20:25         ` Tom Tromey
2012-05-21 18:11           ` Pedro Alves
2012-05-21 18:36             ` Jan Kratochvil
2012-11-21 20:18             ` Jan Kratochvil
2012-04-10  0:23     ` Yao Qi
2012-04-10  9:47       ` Yao Qi
2012-04-18 20:11     ` Tom Tromey
2012-04-18 20:31       ` Can it really be ok to map GPL'd code into any old process? John Gilmore
2012-04-18 20:36         ` Pedro Alves
2012-04-23 18:03       ` Will therefore GDB utilize C++ or not? Tom Tromey
2012-05-18 19:55     ` Tom Tromey
2012-05-18 21:56       ` Joel Brobecker
2012-05-19  2:17         ` Tom Tromey
2012-05-19 15:21           ` Daniel Jacobowitz
2012-05-19 21:36             ` Joel Brobecker
2012-05-20 12:16         ` Frank Ch. Eigler
2012-05-21 15:56       ` Pedro Alves
2012-05-21 16:15         ` Jan Kratochvil
2012-05-21 17:37           ` Paul_Koning
2012-05-21 17:58             ` Jan Kratochvil
2012-05-22 18:03               ` Paul_Koning
2012-05-21 18:08           ` Pedro Alves
2012-05-21 18:08             ` Tom Tromey
2012-05-21 18:10             ` Jan Kratochvil
2012-05-21 18:54             ` Matt Rice
2012-05-26 15:50         ` Jan Kratochvil
2012-06-02  7:01           ` Russell Shaw
2012-06-02  7:13             ` Jan Kratochvil
2012-06-02 10:47               ` Russell Shaw
2012-06-02 11:10                 ` Jan Kratochvil
2012-06-02 11:15                   ` Jan Kratochvil
2012-06-02 11:15                   ` Russell Shaw
2012-11-22 18:46     ` Jan Kratochvil
2012-11-22 21:42       ` John Gilmore
2012-11-23 15:26         ` Jan Kratochvil [this message]
2012-11-27  1:29       ` Stan Shebs
2012-11-27  2:02         ` Paul_Koning
2012-11-27  2:59           ` Stan Shebs
2012-11-27 15:17             ` Paul_Koning
2012-11-27 21:14             ` Tom Tromey
2012-04-09 23:23   ` Stan Shebs
2012-04-18 14:22     ` Pedro Alves
2012-04-18 18:12       ` Stan Shebs
2012-04-18 18:32         ` Paul_Koning
2012-04-18 18:37         ` Pedro Alves
2012-04-19  8:43   ` Yao Qi
2012-12-04 14:17     ` Jan Kratochvil
2012-12-04 14:44       ` Mark Kettenis
2012-12-04 14:52         ` Jan Kratochvil
2012-12-06 20:39           ` Matt Rice
2012-12-07 12:57             ` Jan Kratochvil
2012-12-07 13:25             ` Yao Qi
2012-12-11  6:25               ` Matt Rice
2012-12-13 15:12                 ` Jan Kratochvil
2012-12-14 11:03                   ` Matt Rice
2012-12-14 12:16                     ` Jan Kratochvil

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20121123152612.GA22948@host2.jankratochvil.net \
    --to=jan.kratochvil@redhat.com \
    --cc=gdb@sourceware.org \
    --cc=gnu@toad.com \
    --cc=palves@redhat.com \
    --cc=tromey@redhat.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.
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).