[PATCH 1/3] Introduce gdb::unique_ptr

Simon Marchi simon.marchi@polymtl.ca
Tue Oct 11 19:23:00 GMT 2016


On 2016-10-11 14:36, Eli Zaretskii wrote:
>> First, it's not true that these C++ changes have not been planned.
>> They've been part of the plan ever since the very beginning.  See
>> here, step 5 of the original version of the plan I originally
>> circulated in 2014:
>> 
>>   https://sourceware.org/gdb/wiki/cxx-conversion?action=recall&rev=1
>> 
>> Current version is here:
>> 
>>   https://sourceware.org/gdb/wiki/cxx-conversion#Transition_plan
>> 
>> Note the not-done-yet bullet points in step 8 (step 5 in rev 1).
>> That's exactly what's going on right now.
> 
> Where does it say that we should require C++11?  Or any specific
> version of the C++ standard, for that matter?  AFAIR, this was never
> discussed.

I don't think anybody has seriously suggested requiring C++11 any time 
soon, other than in a very hypothetical formulation.  I can see why 
there are some misunderstanding, especially for those who haven't 
followed closely the C++ conversion.  Let me try to state what I 
understand from the situation.

C++03 has been around for long enough that we can safely migrate to that 
(whereas it has value or not is another debate, although I think Pedro 
showed clearly that it has), without leaving many users behind.  C++11 
comes with some nice features in its standard library, such as 
std::unique_ptr.  std::unique_ptr has some improvements over the old 
std::auto_ptr, which was too easy to misuse.  However, I think we all 
agree that C++11 would be a too aggressive change, and will still be for 
some time.

What Pedro chose to do is to create gdb::unique_ptr, our home-made 
version of std::unique_ptr.  When building with a C++03 compiler, the 
hand-written version of the code is chosen and it works (see the #if 
__cplusplus >= 201103).  However, it's possible to misuse it, the same 
way as it was possible to misuse std::auto_ptr (because of missing 
features in C++03 vs C++11 IIUC).  If you happen to build with a C++11 
compiler, instead of choosing the hand-written version, gdb::unique_ptr 
is more or less an alias for std::unique_ptr.  So if there is a place in 
the code that is misusing it, the build will fail and either buildbot or 
another developer will let us know promptly.

So it's not that the code is built in a way which requires C++11, it's 
built in a way that if you use C++11, you get the benefits of the newer 
checking mechanisms, while still being able to build with a C++03 
compiler.  IMO it's the best of both worlds.  Actually, it's the same 
idea as gnulib, where we fill the gaps of the lacking platforms, rather 
than choosing a low common denominator.

The warning analogy was perhaps not clearly expressed but I think it was 
good.  Let's say somebody with an old compiler wrote this code:

   void foo()
   {
     int a;

     global = a;
   }

The old compiler doesn't have a warning to tell you that "a" is being 
used without being initialized, so it accepts it.  When another 
developer, with a newer compiler, tries to build gdb, he/she gets an 
error, and is able to report the bug.  With unique_ptr, it's similar.  
Somebody with an old compiler gets less compiler checking.  The 
difference is that we need to write a bit of code (this patch) to bridge 
the gap, whereas with warnings it comes for free.



More information about the Gdb-patches mailing list