DConf 2014 Lightning Talks

bearophile via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Fri Aug 1 11:29:18 PDT 2014


Ali Çehreli:

> Ali Çehreli's (first speaker) slides are at
>
>   http://acehreli.org/AliCehreli_assumptions.pdf

It's a nice slides pack. Now in Phobos there's also assumeUTF 
(https://d.puremagic.com/issues/show_bug.cgi?id=10162 ).

See also:
https://issues.dlang.org/show_bug.cgi?id=9682

It essentially asks two functions (group and filter) to return a 
SortedRange if the input is a SortedRange, because those two 
functions don't change the items order.

In Haskell you do such things using "rewrite rules" 
(https://www.haskell.org/ghc/docs/7.0.1/html/users_guide/rewrite-rules.html 
).

Those are two examples of conservation of assumptions 
(invariants).

assumeUnique returns an immutable instead of a Unique!T struct. 
So after calling assumeUnique you can't mutate the items. An 
Unique!T wrapper (like std.typecons.Unique) allows you to mutate 
the items if the needs arises but also to keep their property of 
having no shared references. Some functions like sort() are able 
to conserve the property of uniqueness, so sorting an array of 
Unique should return a SortedRange!(Unique!T[]) or something like 
that.

Another assumption that could be useful for Phobos is 
assumeAligned!(T[], 16), that specifies the assumption that a 
specific slice has its first item aligned to 16 bytes. This could 
be useful if you use SIMD instructions (time ago I have even 
suggested to put such array alignment inside the D type system, 
but I didn't raise much enthusiasm).

Bye,
bearophile


More information about the Digitalmars-d-announce mailing list