3 ms·
IMHO the one great feature of Objective-C (compared to C++) is that it doesn't interfere with any C language features. In C++ the C 'subset' is stuck in the mid
by flohofwoe 8mo ago
IMHO the one great feature of Objective-C (compared to C++) is that it doesn't interfere with any C language features. In C++ the C 'subset' is stuck in the mid-1990s, while Objective-C "just works" with any recent C standard.
- safercplusplus 8mo agoInterestingly, I recently auto-translated wget from C to a memory-safe subset of C++ [1], which involves the intermediate step of auto-converting from C to the subset of C that will also compile under clang++. You end up with a bunch of clang++ warnings about various things being C11 extensions and not ISO C++ compliant, but it does compile. [1] https://duneroadrunner.github.io/scpp_articles/PoC_autotranslation_of_wget https://duneroadrunner.github.io/scpp_articles/PoC_autotrans...
- j16sdiz 8mo agoI think C++ have caught up with C99 already. So it's late 90s, not mid-90s :)
- flohofwoe 8mo agoNo not really, for instance the designated init feature in C++20 is a distinctive C++ feature which is not compatible with C99's designated init. AFAIK the C subset hasn't changed since C++98.
- nly 8mo agoWhat C features can you not realistically use from C++?
- anthk 8mo agoPeople shoudld realize that since long ago C and C++ are not sub/supersets, but interesecting sets.
- 201984 8mo agoC11 atomics, C11 threads, variable length arrays, safely reading from an inactive union member, designated array initializers, compound struct literals, implicitly converting a void pointer to a typed one, and the list goes on.
- pjmlp 8mo agoIndeed, and some of those, thankfully as C++ is TypeScript for C.
- nly 8mo agoC++ has its own atomics, threads etc. And variable length array's work just fine in C++ in both clang and GCC. C++ also has it's own designated initializer like syntax.
- 201984 8mo ago>C++ has its own atomics, threads etc. It does indeed, but they are not compatible and at least the C atomics cannot be used from C++. >C++ also has it's own designated initializer like syntax. One that is far more limited. This is valid C, but not C++. struct bar { int a; int b; }; struct bar tmp = { .b = 0, .a = 0, };
- flohofwoe 8mo agoAny language feature added in C99 and later. In GCC and Clang it's quite relaxed since their C++ frontends pull in a couple of modern C features as non-standard C++ extensions, but MSVC has a strict separation between the C++ and C frontend and doesn't allow this sort of 'cross-pollution'. As a quick example, this C99 code block has at least 4 features that don't work in C++: https://github.com/floooh/sokol-samples/blob/91bd8c6f9f52149211d5508703cc805b67bfa399/sapp/texcube-sapp.c#L124-L140 https://github.com/floooh/sokol-samples/blob/91bd8c6f9f52149... - taking the address of an adhoc-created struct in a function call - random array access in struct initialization - designator chaining in struct initialization - designators can be out-of-order in C but not C++ ...also using unions as different views on the same memory is actually useful sometimes.
- nly 8mo agoNothing of value was lost
- plorkyeran 8mo agoThe one really funny feature of Objective-C++ is that it lets you write C++ using modern C features that haven't been pulled into C++, and you don't have to actually use the Objective part. Designated initializers before C++ got them were the main actually useful application of this.