A couple of questions from a quick casual reading

1. radixsort (void *start...)
Do we really need void*?  We don't know the type of start at compile time?

2. reinterpret_cast<T*> start (related to #1).

3. reinterpret_cast<T*>(malloc(num * sizeof(T)));
A C-ism.  Would it work to use  new T[num]?

On Tue, Sep 28, 2021 at 10:03 PM Sebastian Berg
<sebast...@sipsolutions.net> wrote:
>
> On Wed, 2021-08-25 at 17:48 +0200, Serge Guelton wrote:
> > Hi folks,
> >
> > https://github.com/numpy/numpy/pull/19713 showcases what *could* be a
> > first step
> > toward getting rid of generated C code within numpy, in favor of some
> > C++ code,
> > coupled with a single macro trick.
>
>
> It seems time to pick up this discussion again.  I think we were
> cautiously in favor of trying this out in the limited proposed form.
>
> Aside from ensuring we do not use C++ exceptions/run-time environment.
> I.e. compile with `-fno-exception` and `-nostdlib`, the PR is probably
> largely ready.
>
> Are there any other bigger issues that need to be discussed?
>
>
> The goal for now seems to allow this type of function templates (C++ as
> a glorified templating language).  We may be able to enforce this with
> clang-tidy (not sure if that is necessary right away though).
> There are parts of NumPy (mainly `fft`) where more C++ features could
> be helpful but that should probably be discussed separately.
>
>
> The current solution ends up using no X-Macro anymore, which means
> listing the C symbols like:
>
>     NPY_NO_EXPORT int radixsort_byte(void* vec, npy_intp cnt, void 
> *NPY_UNUSED(null)) { return radixsort<npy_byte>(vec, cnt); }
>     NPY_NO_EXPORT int radixsort_ubyte(void* vec, npy_intp cnt, void 
> *NPY_UNUSED(null)) { return radixsort<npy_ubyte>(vec, cnt); }
>     NPY_NO_EXPORT int radixsort_short(void* vec, npy_intp cnt, void 
> *NPY_UNUSED(null)) { return radixsort<npy_short>(vec, cnt); }
>     NPY_NO_EXPORT int radixsort_ushort(void* vec, npy_intp cnt, void 
> *NPY_UNUSED(null)) { return radixsort<npy_ushort>(vec, cnt); }
>     NPY_NO_EXPORT int radixsort_int(void* vec, npy_intp cnt, void 
> *NPY_UNUSED(null)) { return radixsort<npy_int>(vec, cnt); }
>     NPY_NO_EXPORT int radixsort_uint(void* vec, npy_intp cnt, void 
> *NPY_UNUSED(null)) { return radixsort<npy_uint>(vec, cnt); }
>     NPY_NO_EXPORT int radixsort_long(void* vec, npy_intp cnt, void 
> *NPY_UNUSED(null)) { return radixsort<npy_long>(vec, cnt); }
>     NPY_NO_EXPORT int radixsort_ulong(void* vec, npy_intp cnt, void 
> *NPY_UNUSED(null)) { return radixsort<npy_ulong>(vec, cnt); }
>
> I guess we could try to write some macro's to make this shorter,
> although I am fine with delaying this, since the main point is probably
> getting a brief example and the build changes in.
>
> It also defines the following type tags:
> https://github.com/numpy/numpy/pull/19713/files#diff-4de4beaecd7b0a1f4d887221191843a54b0c62f13eea18b8716c54bec9657f20
>
> Any comments to the approach (especially from anyone more familiar with
> C++) would be much appreciated!
>
> Cheers,
>
> Sebastian
>
>
>
> >
> > Basically, templated code is an easy and robust way to replace
> > generated code
> > (the C++ compiler becomes the code generator when instantiating
> > code), and a
> > single X-macro takes care of the glue with the C world.
> >
> > Some changes in distutils were needed to cope with C++-specific
> > flags, and
> > extensions that consist in mixed C and C++ code.
> >
> > I've kept the change as minimal as possible to ease the (potential)
> > transition
> > and keep the C++ code close to the C code. This led to less idiomatic
> > C++ code,
> > but I value a "correct first" approach. There's an on-going effort by
> > seiko2plus
> > to remove that C layer, I acknowledge this would bring even more C++
> > code, but
> > that looks orthogonal to me (and a very good second step!)
> >
> > All lights are green for the PR, let's assume it's a solid ground for
> > discussion :-)
> > So, well, what do you think? Should we go forward?
> >
> > Potential follow-ups :
> >
> > - do we want to use -nostdlib, to be sure we don't bring any C++
> > runtime dep?
> > - what about -fno-exception, -fno-rtti?
> > - coding style?
> > - (I'm-not-a-farseer-I-don-t-know-all-topics)
> >
> > _______________________________________________
> > NumPy-Discussion mailing list
> > NumPy-Discussion@python.org
> > https://mail.python.org/mailman/listinfo/numpy-discussion
> >
>
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: ndbeck...@gmail.com



-- 
Those who don't understand recursion are doomed to repeat it
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to