On Mon, Aug 12, 2024 at 9:49 AM Levi Morrison <levi.morri...@datadoghq.com>
wrote:

> On Sun, Aug 11, 2024 at 4:54 PM Lanre <lnearw...@gmail.com> wrote:
> >
> > Hello,
> >
> > I’m considering adding some C++ enhancements to the Zend API. These
> changes would be encapsulated within `#ifdef __cplusplus` guards, so they
> wouldn’t interfere with the existing C implementation. The primary goal is
> to provide a nicer interface for extensions while maintaining compatibility
> with C.
> >
> > Key points:
> > - **Struct-based Approach:** Everything will still use structs—no
> classes or non-public/non-static members.
> > - **Isolation:** Any enhancements that can be isolated from the C
> implementation will be, and they will reside in a common `zend_api_cxx`
> header file.
> > - **Proposed Enhancements:**
> >   - Constructors and destructors, along with comparison operator
> overloads for `zval`.
> >   - Constructor overloads for common `zval` initializations.
> >   - Member methods for common `zval` operations.
> >
> > I’m happy to implement and maintain these changes. Since this doesn’t
> affect userland, do you think an RFC is necessary?
> >
> > Also, if anyone has suggestions or ideas for this C++ API, I’d love to
> hear them.
> >
> > Cheers,
> > Lanre
>
> I am not opposed, but there are some logistics questions:
>  1. Since it's for extensions and not core, how will we be sure it is
> maintained? What will test it?
>  2. Since it's in core, and C++ is a rapidly evolving language, what
> will the required C++ version be? What would our policy be on updating
> it?
>  3. How will we be sure about edges around language mismatches in C
> and C++? For instance, they have different rules regarding unions,
> which we make liberal use of.
>  4. C++ has many features and some are controversial. Will any be
> disallowed such as exceptions?
>
> There is one part of C++ specifically that I think could be pretty
> nice if we can figure out all the details: compile-time evaluation of
> the string hash function. This could make dealing with
> well-known/compile-time strings easier.
>

1. As for testing, we can implement either a second zend_test extension or
add the tests to the current one.
2. C++ is indeed a rapidly evolving language, I suggest starting with a
conservative approach by targeting a stable C++ version that balances
modern features with broad compatibility—C++17 or C++20 could be good
candidates. As for updating the required version, we could establish a
policy where we review the C++ version every couple of years, aligning it
with broader trends in C++ adoption and compiler support across platforms.
This would help us avoid potential fragmentation or compatibility issues.
3. As long as we stick to the struct based approach, we should be fine
regarding the common edge cases. The idea is to keep the structs compatible
with C while supporting C++ features
4. To maintain a clean and consistent API, I suggest we disallow certain
C++ features like exceptions. Exceptions could introduce complexity and
unpredictability, especially when mixed with C's error handling mechanisms.


Overall, the goal is to use C++ to enhance the API without compromising the
stability and simplicity of the C core. We can focus on C++ features that
bring clear benefits, such as stronger type safety and cleaner
abstractions, while avoiding those that might introduce unnecessary
complexity.

Cheers,
Lanre

Reply via email to