Re: [HACKERS] C++ Headers
On Wed, May 23, 2001 at 11:35:31AM -0400, Bruce Momjian wrote: > > > > > We have added more const-ness to libpq++ for 7.2. > > > > > > > > Breaking link compatibility without bumping the major version number > > > > on the library seems to me serious no-no. > > > > > > > > To const-ify member functions without breaking link compatibility, > > > > you have to add another, overloaded member that is const, and turn > > > > the non-const function into a wrapper. For example: > > > > > > > > void Foo::bar() { ... } // existing interface > > > > > > > > becomes > > > > > > > > void Foo::bar() { ((const Foo*)this)->bar(); } > > > > void Foo::bar() const { ... } > > > > > > Thanks. That was my problem, not knowing when I break link compatiblity > > > in C++. Major updated. > > > > Wouldn't it be better to add the forwarding function and keep > > the same major number? It's quite disruptive to change the > > major number for what are really very minor changes. Otherwise > > you accumulate lots of near-copies of almost-identical libraries > > to be able to run old binaries. > > > > A major-number bump should usually be something planned for > > and scheduled. > > That const was just one of many const's added, and I am sure there will > be more stuff happening to C++. I changed a function returning short > for tuple length to int. Not worth mucking it up. > > If it was just that one it would be OK. I'll bet lots of people would like to see more careful planning about breaking link compatibility. Other changes that break link compatibility include changing a struct or class referred to from inline functions, and adding a virtual function in a base class. It's possible to make a lot of improvements without breaking link compatibility, but it does take more care than in C. If you wonder whether a change would break link compatibility, please ask on the list. Nathan Myers [EMAIL PROTECTED] ---(end of broadcast)--- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/users-lounge/docs/faq.html
Re: [HACKERS] C++ Headers
On Tue, May 22, 2001 at 05:52:20PM -0400, Bruce Momjian wrote: > > On Tue, May 22, 2001 at 12:19:41AM -0400, Bruce Momjian wrote: > > > > This in fact has happened within ECPG. But since sizeof(bool) is > > > > passed to libecpg it was possible to figure out which 'bool' is > > > > requested. > > > > > > > > Another issue of C++ compatibility would be cleaning up the > > > > usage of 'const' declarations. C++ is really strict about > > > > 'const'ness. But I don't know whether postgres' internal headers > > > > would need such a cleanup. (I suspect that in ecpg there is an > > > > oddity left with respect to host variable declaration. I'll > > > > check that later) > > > > > > We have added more const-ness to libpq++ for 7.2. > > > > Breaking link compatibility without bumping the major version number > > on the library seems to me serious no-no. > > > > To const-ify member functions without breaking link compatibility, > > you have to add another, overloaded member that is const, and turn > > the non-const function into a wrapper. For example: > > > > void Foo::bar() { ... } // existing interface > > > > becomes > > > > void Foo::bar() { ((const Foo*)this)->bar(); } > > void Foo::bar() const { ... } > > Thanks. That was my problem, not knowing when I break link compatiblity > in C++. Major updated. Wouldn't it be better to add the forwarding function and keep the same major number? It's quite disruptive to change the major number for what are really very minor changes. Otherwise you accumulate lots of near-copies of almost-identical libraries to be able to run old binaries. A major-number bump should usually be something planned for and scheduled. Nathan Myers [EMAIL PROTECTED] ---(end of broadcast)--- TIP 4: Don't 'kill -9' the postmaster
Re: [HACKERS] C++ Headers
On Tue, May 22, 2001 at 12:19:41AM -0400, Bruce Momjian wrote: > > This in fact has happened within ECPG. But since sizeof(bool) is passed to > > libecpg it was possible to figure out which 'bool' is requested. > > > > Another issue of C++ compatibility would be cleaning up the usage of > > 'const' declarations. C++ is really strict about 'const'ness. But I don't > > know whether postgres' internal headers would need such a cleanup. (I > > suspect that in ecpg there is an oddity left with respect to host variable > > declaration. I'll check that later) > > We have added more const-ness to libpq++ for 7.2. Breaking link compatibility without bumping the major version number on the library seems to me serious no-no. To const-ify member functions without breaking link compatibility, you have to add another, overloaded member that is const, and turn the non-const function into a wrapper. For example: void Foo::bar() { ... } // existing interface becomes void Foo::bar() { ((const Foo*)this)->bar(); } void Foo::bar() const { ... } Nathan Myers [EMAIL PROTECTED] ---(end of broadcast)--- TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]
Re: [HACKERS] C++ Headers
Bruce Momjian <[EMAIL PROTECTED]> writes: > The only mention I see of this is in c.h: > #ifndef __cplusplus > #ifndef bool > typedef char bool; > #endif /* ndef bool */ > #endif /* not C++ */ > If you need more cplusplus stuff, lets figure it out and add it. Actually, that portion of c.h is a time bomb that is likely to blow up in the face of some poor C++ user. There's no guarantee that a C++ compiler's built-in bool type will be compatible with "char", is there? If it happened to be, say, same size as "int", then a C++ module would interpret lots of things differently from a C module. regards, tom lane ---(end of broadcast)--- TIP 4: Don't 'kill -9' the postmaster
Re: [HACKERS] C++ Headers
mlw <[EMAIL PROTECTED]> writes: > Is any support for reworking the postgres headers such that they can be used, > cleanly, in a C++ program? You'll get no support for a request for a blank check. What do you have in mind exactly? ISTM that making the backend's internal headers C++-clean has already been looked into, but rejected on grounds that I don't recall clearly. Check the list archives. regards, tom lane ---(end of broadcast)--- TIP 4: Don't 'kill -9' the postmaster