Re: SPI-header-files safe for C++-compiler - Mailing list pgsql-patches
From | Chuck McDevitt |
---|---|
Subject | Re: SPI-header-files safe for C++-compiler |
Date | |
Msg-id | EB48EBF3B239E948AC1E3F3780CF8F880244ECC2@MI8NYCMAIL02.Mi8.com Whole thread Raw |
In response to | Re: SPI-header-files safe for C++-compiler (Tom Lane <tgl@sss.pgh.pa.us>) |
Responses |
Re: SPI-header-files safe for C++-compiler
|
List | pgsql-patches |
> Neil Conway <neilc@samurai.com> writes: > > I don't see a reason to reject the patch. All the arguments about why > > using C++ in the backend is ill-advised are well-taken, but the patch > > does *not* require "making a real commitment to making C++ usable as > a > > backend extension language", it just obviates the need for some > people > > to patch the source. > > ... at the cost of forcing other people to patch their source. If this > were just an internal backend change it'd be OK, but by definition the > patch is changing APIs that third-party code may depend on. That's why > I think there needs to be a stronger argument than "might as well do > it", and that stronger argument has got to discuss whether we are > really > supporting C++ in the backend. > > There's also a slippery-slope problem: if we accept making these > headers > C++-clean, why not every other backend header? Once we buy into the > principle, you can bet that we'll get requests to sanitize every header > that's of any interest. So I'd want to see some estimate of how many > changes that entails, not just fixing the set of things that spi.h > depends on. > > regards, tom lane > I've tried compiling the entire backend in C++ in the past, just to see how much of a problem it would be. The effort to fix the header files is minimal, just a few global search-and-replace operations for C++ keywords such as "typename", "typeid", "namespace" and "using", and doing the appropriate stuff to use the native C++ bool, true, and false. After that, it's mostly a matter of changing places that rely on implicit casts from void * to add explicit casts. One day of effort at most. So, the programmer effort is quite small, but it does change quite a few .c files (especially "typename"). And in the end, you can't actually run full C++ code unless you do something about the setjmp longjmp (TRY() etc), as they are incompatible with C++ destructors, although you could use C++ if you avoided constructors/destructors/try-catch/etc. Here is what I think is a complete list of C++ keywords not in C (most are not using in Postgres): asm dynamic_cast namespace reinterpret_cast try bool explicit new static_cast typeid catch false operator template typename class friend private this using const_cast inline public throw virtual delete mutable protected true wchar_t Overall, I'm in favor of the change. I don't think the effort to "sanitize" all the headers is difficult at all.
pgsql-patches by date: