Oh yeah I forgot, isn't a big reason to keep the TS API as C that it allows you to write programs in Rust? And can proxy-wasm handle it OK if the TS API is in C++? How about callbacks from Lua scripts being run by the Lua plugin?
On Wed, Jan 4, 2023 at 4:26 PM Leif Hedstrom <zw...@apache.org> wrote: > > > > On Jan 4, 2023, at 3:03 PM, Walt Karas <wka...@yahooinc.com.INVALID> > wrote: > > > > There are people at Yahoo who have written plugins in straight C, and > don't > > want to change to C++. > > They can continue to write plugins in C, just have to compile with a C++ > compiler. I imagine there will be very few, if any changes. Of course, they > can’t use any new APIs, or new structures added that are C++. > > — leif > > > > On Wed, Jan 4, 2023 at 1:10 PM Leif Hedstrom <zw...@apache.org> wrote: > > > >> This looks like a string_view to me? > >> > >> Why don’t we do what we talked about for years now, and stop supporting > >> compiling plug-ins with C but require C++? Then we can introduce nice > >> things in ts.h. The old C plugins just have to be changed to compile > with > >> C++, and ABI compatibility within major version must be enforced. > >> > >> — Leif > >> > >>> On Sep 6, 2022, at 10:24, Walt Karas <wka...@yahooinc.com.invalid> > >> wrote: > >>> > >>> Presumably we don't need to allow for use of antiquated C compilers > that > >>> don't allow structures as return values. So this: > >>> > >>> typedef struct > >>> { > >>> char *data; > >>> int length; > >>> } > >>> TSVarLenData; > >>> > >>> TSVarLenData TSSomething(x, y, z); > >>> > >>> Is another alternative. > >>> > >>>> On Thu, Sep 1, 2022 at 5:32 PM Masakazu Kitajo <mas...@apache.org> > >> wrote: > >>>> > >>>> Using encapsulation/data abstraction is fine, but it doesn't seem like > >>>> TSHeapBuf makes sense. No TS API receives it. If plugin code is the > only > >>>> user and it has to deal with a non-const raw pointer and a data length > >>>> after all, why do we want to wrap them in the first place? > >>>> > >>>> As for smaller steps, like I suggested on the PR, you could introduce > >>>> TSHeapBuf separately from the fix, I think. And if there are similar > TS > >>>> APIs that could return TSHeapBuf, supporting TSHeapBuf on only one of > >> them > >>>> makes inconsistency in TS API. IMO, the two changes, the fix and the > new > >>>> API, should be made like 1 + 1, but not 1.5 + 0.5 nor 1 + 0.5 + 0.5. > >>>> > >>>> Masakazu > >>>> > >>>> On Thu, Sep 1, 2022 at 10:08 AM Walt Karas > <wka...@yahooinc.com.invalid > >>> > >>>> wrote: > >>>> > >>>>> As a rule of thumb, I prefer using encapsulation/data abstraction. I > >>>> think > >>>>> perhaps that is one reason I've been a poor match to this project. > >> There > >>>>> doesn't seem to be a consensus that we should follow this rule of > >> thumb. > >>>>> > >>>>> KIt, that would be my preference. But I am part of the consensus I > >> think > >>>>> we have, that we should favor a series of smaller steps, rather than > >>>> doing > >>>>> all of them in one big step. > >>>>> > >>>>> On Wed, Aug 31, 2022 at 12:13 PM Shu Kit Chan <chanshu...@gmail.com> > >>>>> wrote: > >>>>> > >>>>>> Also are we planning to eventually rewrite our existing APIs (where > >>>>>> applicable) to use this? > >>>>>> > >>>>>> On Wed, Aug 31, 2022 at 8:36 AM Masakazu Kitajo <mas...@apache.org> > >>>>> wrote: > >>>>>>> > >>>>>>> What's the advantage of using TSHeapBuf? What issue does it solve? > >>>>>>> > >>>>>>> > >>>>>>> On Wed, Aug 31, 2022 at 7:48 AM Walt Karas > >>>> <wka...@yahooinc.com.invalid > >>>>>> > >>>>>>> wrote: > >>>>>>> > >>>>>>>> Described here: > >>>>>>>> > >>>>>>>> > >>>>>> > >>>>> > >>>> > >> > https://urldefense.com/v3/__https://github.com/apache/trafficserver/blob/os_pkey_cnf_reload/doc/developer-guide/api/functions/TSHeapBuf.en.rst*tsheapbufdata__;Iw!!Op6eflyXZCqGR5I!Du0fBfMhb4pdM2ECFijJ7aJ-jT70jEPeZwjhsvWt2Dr2cSZ5G7HWY20wZOmFHIR3MxnvPZpoRDMlII5dgow$ > >>>>>> > >>>>>>>> , > >>>>>>>> > >>>>>>>> In PR > >>>>>> > >>>>> > >>>> > >> > https://urldefense.com/v3/__https://github.com/apache/trafficserver/pull/8790__;!!Op6eflyXZCqGR5I!Du0fBfMhb4pdM2ECFijJ7aJ-jT70jEPeZwjhsvWt2Dr2cSZ5G7HWY20wZOmFHIR3MxnvPZpoRDMlYh9lIuc$ > >>>>>> . > >>>>>>>> > >>>>>>>> This allows a dynamically allocated buffer, of any reasonable > >>>> length, > >>>>>> to be > >>>>>>>> returned by a TS API function, like this: > >>>>>>>> > >>>>>>>> TSHeapBuf hb = TSSomething(x, y, z); > >>>>>>>> > >>>>>>>> One alternative is an interface like this: > >>>>>>>> > >>>>>>>> int length; > >>>>>>>> char *data = TSSomething(x, y, z, &length); > >>>>>>>> > >>>>>>>> The data is dynamically allocated, and would be freed with > >>>> TSfree(). > >>>>>>>> > >>>>>>>> Another alternative is: > >>>>>>>> > >>>>>>>> char *buf = TSalloc(BUF_SIZE); > >>>>>>>> int actual_size = TSSomething(x, y, z, buf, BUF_SIZE); > >>>>>>>> if (actual_size > BUF_SIZE) { > >>>>>>>> // buf was too small, unchanged. > >>>>>>>> TSfree(buf); > >>>>>>>> buf = TSalloc(actual_size); > >>>>>>>> TSSomething(x, y, z, buf, actual_size); > >>>>>>>> } > >>>>>>>> > >>>>>> > >>>>> > >>>> > >> > >> > >