Hacker News new | ask | show | jobs
by marcosdumay 1652 days ago
Hum, I've never seen generics making code harder to reason about in any language, except, of course for C++, where they are hacked over text.

If they will make code harder to read, that's up to syntax. I don't know how all that will look up on the end, but it should be reasonably easy to just write an example.

1 comments

> Hum, I've never seen generics making code harder to reason about in any language, except, of course for C++, where they are hacked over text.

do you mean templates?

i was under the impression that c++ generics == templates, but after a google search found out that c++ has both (at least according to microsoft), not surprised

https://docs.microsoft.com/en-us/cpp/extensions/generics-and...

C++/CLI is C++ compiled to NET CLR IL, so it has all the features of the regular C++ compiler (templates) AND all the features of the CLR (generics).

It is an extremely niche language, extremely rarely used even in the .NET ecosystem, except sometimes as glue code.

Normal C++, including MSVC C++, has only templates.

It is definitely nicer than trying to correctly get P/Invoke declarations or debug COM marshaling issues.

This is the kind of tooling that makes me still reach out for C++ when going outside managed languages.

My experience was that P/Invoke is much easier, but of course YMMV. COM I never played around with.

I also found a pretty ugly bug in the C++/CLR compiler - if you used in-place initialization for an array (something like auto arr = Object[]{obj1}), it would allocate an array of length 0xC0FFEE and set the elements you specified. They acknowledged the bug but said they will only fix it in a future version of the language.

This told me all I needed to know about how popular it actually was.

It is popular enough for being one of the major milestones on .NET Core 3.1.

P/Invoke can only do so much if a C++ library doesn't provide a C ABI, and WinDev loves to publish COM based APIs since they won the Longhorn dispute.

Yes, generics in C++ are created with templates.