News for hackers. Stuff that matters.
Re:Abstraction: Not what you think it is by ncmncm on Wednesday March 30, 2022 @12:32PM (#30857488)
If you are relying on everybody who reads code that uses your type to have thoroughly scoured all the documentation, you are Doing It Wrong.

Programmers understand pointers and pointer semantics: when they see a pointer, they know what is required of them. An opaque type that has pointer semantics you can't tell without reading up on documentation is, exactly, an abstraction that costs more than it delivers.

Re:Abstraction: Not what you think it is by MaxBarraclough on Wednesday March 30, 2022 @05:42PM (#30861162)
> If you are relying on everybody who reads code that uses your type to have thoroughly scoured all the documentation, you are Doing It Wrong.

As fluoridation indicated, this is the norm in C programming. By means of example, in the OpenCL C library, bitfields all use the same type. You have to consult a function's documentation to know what you're allowed to pass. [0]

I do agree that the 'Ada-style' approach to types is far superior to the 'C-style', but Doing It Wrong seems a bit strong, unless you want to condemn all C code.

With the right library you can use the 'Ada-style' in C++. Specifically, using a 'strong typedef' library which prevents implicit conversions, such as [1], but not Boost's strong_typedef which permits implicit conversion back to the underlying type. Unfortunately this kind of thing isn't possible in C.

> Programmers understand pointers and pointer semantics: when they see a pointer, they know what is required of them

Not really. Should you call free on the pointer once you're done with it? The type alone doesn't tell you. You need to consult the documentation to know how you are meant to use the value, whether or not a pointer type is used.

[0] https://www.khronos.org/registry/OpenCL/specs/2.2/html/OpenC...

[1] https://github.com/foonathan/type_safe/

Re:Abstraction: Not what you think it is by ncmncm on Thursday March 31, 2022 @07:04AM (#30865850)
People know they need to find out whether and when they can or must free a pointer. If it looks enough like a file descriptor, they know they might need to call close() on it. For other types, there are no standard conventions.
Re:Abstraction: Not what you think it is by fluoridation on Wednesday March 30, 2022 @12:47PM (#30857691)
Okay. Have fun using C APIs without reading documentation and wondering why your programs keep crashing, I guess. What else can I say?
Re:Abstraction: Not what you think it is by ncmncm on Wednesday March 30, 2022 @01:09PM (#30857980)
I know why programs other people write keep crashing. They are coding them in C (or bad C++; but I repeat myself), and are relying on abstractions that conceal exactly that which they should instead expose.