New repo for my reusable D Phobos extensions

ag0aep6g via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sat Apr 9 16:49:14 PDT 2016


On 09.04.2016 20:25, Nordlöw wrote:
> https://github.com/nordlow/phobos-next
[...]
> Enjoy or Destroy!

Pet peeve of mine: Many of your @trusted functions are unsafe. @trusted 
functions must be memory-safe. At the very least the public ones must be.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/random_ex.d#L145>:

This @trusted variant of randInPlace calls another overload on the 
generic element type. That call is possibly unsafe.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/random_ex.d#L176>:

Similarly, this @trusted variant calls randInPlace on the generic type B.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/dbg.d#L34>:

`@trusted:` makes everything below it @trusted. Aside from 
trustedPureDebugCall, it doesn't look those templates are supposed to be 
@trusted. trustedPureDebugCall breaks the @trusted promise, too, of 
course. But at least it says so in its name.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/array_ex.d#L92>:

This makes `clear` @trusted, practically making `free` @trusted. Being 
able to call `free` on arbitrary pointers is the opposite of memory-safe.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/array_ex.d#L355>:

Trusting an arbitrary range. Range primitives may be unsafe.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/array_ex.d#L542>,
<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/array_ex.d#L827>,
<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/array_ex.d#L835>:

Probably more bad `@trusted`s. Didn't check thoroughly, though.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/bitop_ex.d#L88>,
<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/bitop_ex.d#L144>:

Changing arbitrary bits in arbitrary types is the opposite of memory-safe.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/assert_ex.d#L14>:

`@trusted:` again, followed by a bunch of templates, all of which seem 
to possibly execute arbitrary, potentially unsafe code provided by the 
caller.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/skip_ex.d#L164>:

Probably another bad `@trusted`.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/ties.d#L88>:

Calling an arbitrary delegate is the opposite of memory-safe.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/algorithm_ex.d#L295>:

T.opAssign may be unsafe.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/algorithm_ex.d#L325>,
<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/algorithm_ex.d#L352>,
<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/algorithm_ex.d#L415>:

Probably more bad `@trusted`s.

--

<https://github.com/nordlow/phobos-next/blob/596da6eb534926ee0d94e9f711a169e58026688e/src/algorithm_ex.d#L857>:

Operator overloading can make comparisons unsafe.

--

I suggest to put comments on all @trusted attributes, listing what parts 
of the implementation prevent the @safe attribute, and explaining how 
memory-safety is ensured despite that.



More information about the Digitalmars-d-announce mailing list