Changes between Initial Version and Version 1 of RFC9

May 16, 2019, 2:14:15 PM (2 years ago)

Add draft


  • RFC9

    v1 v1  
     1= GEOS RFC 9: Restore C++ API as public API =
     3||RFC 9:  || Remove the implementation of the RFC6, restore the C++ API to the public and avoid the compiler warning. ||
     4||Author: ||Mateusz Łoskot    ||
     6||Status: ||Draft ||
     8The GEOS library is a C++ library offering two kinds of public API: C++ API and C API.
     10The GEOS library started as a C++ library. The C API was introduced in version 2.2.
     12The GEOS library has never promised any stability of the C++ API and this fact has always been documented and clearly stated:
     14on the wiki:
     16> C++ API (will likely change across versions)
     17> C API (provides long-term ABI stability)
     19on the front page of the API reference:
     21> The recommended low-level interface to the GEOS library is the simplified C wrapper interface.
     22> This will ensure stability of the API and the ABI of the library during performance improvements
     23> that will likely change classes definitions.
     25> If you don't care about adapting/rebuilding your client code you can still use the C++ interface.
     27in the NEWS file:
     29> Changes in 2.2.0
     30>    - NEW Simplified and stabler C API
     32The GEOS library as always been deployed as two **distinct** binaries:
     34* `geos` accompanied with the C++ headers.
     35* `geos_c` accompanied with the C header.
     37Removing the C++ API from the public scope and asking developers to opt-in to use the C++ API,fundamentally breaks the original concept of the library.
     39If there are developers surprised by any breaking changes in the C++ API, it means they have not read the documentation and it is not role of the GEOS developers to make them read it.
     41Any user of the GEOS C++ API is expected to be aware of its volatile state and be prepared to update in order to use any newer version of GEOS. These implicit usage terms of the contract, which have always been clear and consistent with nearly any other C++ API, remain unchanged.
     43Considering these issues, there is very little value in the `#ifdef USE_UNSTABLE_GEOS_CPP_API` and related guards.
     45Let's revert the implementation of the [[wiki:RFC6]].