On 2009-09-30 15:30:02 -0400, "Denis Koroskin" <2kor...@gmail.com> said:

Note that C stdlib (and other libraries/bindings) will need to be updated to reflect changes, e.g.

extern(C) void*? malloc(size_t size); // may return null!

which is great because it will provide additional safety. I've seen quite a lot of code that don't test returned value against null (which is a mistake, I believe).

Which makes me think of this: pointers being non-nullable by default will make it easy to make mistakes when writing C bindings. A programmer might see this C declaration:

        void* malloc(size_t size);

and naively translate it to D like this:

        extern(C) void* malloc(size_t size);

without noticing the change in semantics.

For pointer arguments it's not much of a problem: the worse that can happen is that it blocks you from passing a null value when you should (in which case you can update the bindings). For a return value it's more troublesome because you're implicitly adding a promise that the function will not return null, and you might not realize it's wrong until it does indeed return null and your program crashes with a segfault.

Not that I think it's worth bothering too much, but it's something to keep in mind.

--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to