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