[llvm-bugs] [Bug 37148] New: Feature Request: More _Generic Generics

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Apr 17 01:12:02 PDT 2018


https://bugs.llvm.org/show_bug.cgi?id=37148

            Bug ID: 37148
           Summary: Feature Request: More _Generic Generics
           Product: clang
           Version: unspecified
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Frontend
          Assignee: unassignedclangbugs at nondot.org
          Reporter: Bumblebritches57 at gmail.com
                CC: llvm-bugs at lists.llvm.org

I'm not sure how or where to file this feature request, I was talking to Jens
Gustedt, who sits on the C standardization board, about a feature idea I had,
and he said that I basically have to find an implementation to create my
feature first before it can become the standard, which makes enough sense.

So if this is the wrong place to put this, I'd love to hear where the right
place would be.

Anyway, here's my idea for C:

What are the advantages over C++'s templates?

This method would allow a function to be created with a reasonable amount of
"genericity", without allowing everything including the kitchen sink like has
to be accepted now, and like C11's _Generic, it would not bloat the compile
time, they'd be already existing functions and the linker would just choose
which one to use at link time.


`_Typeof((((uint8_t,uint16_t), ArrayType), uint8_t:InitArray8,
uint16_t:InitArray16) uint64_t NumPlanes, uint64_t PlaneSize)(NumPlanes,
PlaneSize);`

`_Typeof((((uint8_t*,uint16_t*), Format), uint8_t*:FormatString8,
uint16_t*:FormatString16), _Typeof((*), ...))(Format, __VA_ARGS__);`

`FormatString8((_Typeof((uint8_t*,uint16_t*), Format), ...) {`
`    Types CurrentType = _Typeof(...[1]);`
`    if (CurrentType == uint8_t || CurrentType == uint16_t || CurrentType ==
uint32_t || CurrentType == uint64_t) { ConvertInteger2String(...[1]); }`
`}`

So the format would be:

Return type:         Supports a comma separated list of integral types.
Function parameters: Supports a comma separated list of integral types, or an
asterisk for any integral type


For the variadic variation, I think simply allowing the user of the
_Typeof(...[X]) could do the trick.

As for the complexity of parsing, and the backend and whatnot, I don't have a
clue, I'm not a compiler writer, I'm just some dude with an idea for how to
make C better.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20180417/ba0ff918/attachment.html>


More information about the llvm-bugs mailing list