Thread

  1. C++ Headers

    mlw <markw@mohawksoft.com> — 2001-05-19T14:21:27Z

    Is any support for reworking the postgres headers such that they can be used,
    cleanly, in a C++ program?
    
    
  2. Re: C++ Headers

    Bruce Momjian <pgman@candle.pha.pa.us> — 2001-05-19T15:25:11Z

    My guess it that certain defines have to be #ifdef'ed out for C++.  Can
    you list them again.  We have talked about this in the past, but haven't
    gotten a solution yet.
    
    > Is any support for reworking the postgres headers such that they can be used,
    > cleanly, in a C++ program?
    > 
    > ---------------------------(end of broadcast)---------------------------
    > TIP 4: Don't 'kill -9' the postmaster
    > 
    
    -- 
      Bruce Momjian                        |  http://candle.pha.pa.us
      pgman@candle.pha.pa.us               |  (610) 853-3000
      +  If your life is a hard drive,     |  830 Blythe Avenue
      +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
    
    
  3. Re: C++ Headers

    Tom Lane <tgl@sss.pgh.pa.us> — 2001-05-19T15:26:29Z

    mlw <markw@mohawksoft.com> 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
    
    
  4. Re: C++ Headers

    Larry Rosenman <ler@lerctr.org> — 2001-05-19T16:04:37Z

    * Tom Lane <tgl@sss.pgh.pa.us> [010519 10:29]:
    > mlw <markw@mohawksoft.com> 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.
    I do know that you can use libpq-fe.h cleanly in a C++ program (the 
    table posted earlier today gets populated by a C++ app), modulo the
    Oid type conflicts with an SNMP++ header, handled by a quick #define. 
    
    LER
    
    > 
    > 			regards, tom lane
    > 
    > ---------------------------(end of broadcast)---------------------------
    > TIP 4: Don't 'kill -9' the postmaster
    > 
    
    -- 
    Larry Rosenman                     http://www.lerctr.org/~ler
    Phone: +1 972-414-9812                 E-Mail: ler@lerctr.org
    US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
    
    
  5. Re: C++ Headers

    Myron Scott <mscott@sacadia.com> — 2001-05-19T17:09:59Z

    Tom Lane wrote:
    
    > mlw <markw@mohawksoft.com> 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.
    >
    
    I have used:
    
        #ifdef __cplusplus
        extern "C" {
        #endif
    
        headers......
    
    
    
        #ifdef __cplusplus
        }
        #endif
    
    
    on many backend header files for use
    on my threaded version of postgres.
    I seems to work fine as I have not had any problems
    yet.
    
    
    Myron Scott
    
    
    
    
    
    
  6. Re: C++ Headers

    Bruce Momjian <pgman@candle.pha.pa.us> — 2001-05-19T17:17:10Z

    > Tom Lane wrote:
    > 
    > > mlw <markw@mohawksoft.com> 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.
    > >
    > 
    > I have used:
    > 
    >     #ifdef __cplusplus
    >     extern "C" {
    >     #endif
    > 
    >     headers......
    > 
    > 
    > 
    >     #ifdef __cplusplus
    >     }
    >     #endif
    > 
    > 
    > on many backend header files for use
    > on my threaded version of postgres.
    > I seems to work fine as I have not had any problems
    > yet.
    
    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.
    
    -- 
      Bruce Momjian                        |  http://candle.pha.pa.us
      pgman@candle.pha.pa.us               |  (610) 853-3000
      +  If your life is a hard drive,     |  830 Blythe Avenue
      +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
    
    
  7. Re: C++ Headers

    Tom Lane <tgl@sss.pgh.pa.us> — 2001-05-20T00:34:22Z

    Bruce Momjian <pgman@candle.pha.pa.us> 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
    
    
  8. Re: C++ Headers

    Christof Petig <christof@petig-baender.de> — 2001-05-21T09:01:01Z

    Tom Lane wrote:
    
    > Bruce Momjian <pgman@candle.pha.pa.us> 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.
    
    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)
    
        Christof
    
    
    
    
  9. Re: C++ Headers

    Bruce Momjian <pgman@candle.pha.pa.us> — 2001-05-22T04:19:41Z

    > 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.
    
    -- 
      Bruce Momjian                        |  http://candle.pha.pa.us
      pgman@candle.pha.pa.us               |  (610) 853-3000
      +  If your life is a hard drive,     |  830 Blythe Avenue
      +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
    
    
  10. Re: C++ Headers

    Nathan Myers <ncm@zembu.com> — 2001-05-22T20:34:58Z

    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
    ncm@zembu.com
    
    
  11. Re: C++ Headers

    Bruce Momjian <pgman@candle.pha.pa.us> — 2001-05-22T21:52:20Z

    > 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.
    
    -- 
      Bruce Momjian                        |  http://candle.pha.pa.us
      pgman@candle.pha.pa.us               |  (610) 853-3000
      +  If your life is a hard drive,     |  830 Blythe Avenue
      +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
    
    
  12. Re: C++ Headers

    Nathan Myers <ncm@zembu.com> — 2001-05-23T01:27:19Z

    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
    ncm@zembu.com
    
    
  13. Re: C++ Headers

    Bruce Momjian <pgman@candle.pha.pa.us> — 2001-05-23T15:35:31Z

    > > > > 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.
    
    -- 
      Bruce Momjian                        |  http://candle.pha.pa.us
      pgman@candle.pha.pa.us               |  (610) 853-3000
      +  If your life is a hard drive,     |  830 Blythe Avenue
      +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026