Hmm, can't you just make HugeClass static in SaltedInt? Keean.
On 8 January 2015 at 02:02, Geoffrey Irving <[email protected]> wrote: > int already has an instance of Ord. SaltedOrd would be another one, > thus non-coherence. > > Geoffrey > > On Wed, Jan 7, 2015 at 5:59 PM, Keean Schupke <[email protected]> wrote: > > Okay, I see what you are getting at now. I don't really see any problem > with > > the first C++ solution... How would non-coherent instances help? > > > > On 8 January 2015 at 01:24, Geoffrey Irving <[email protected]> wrote: > >> > >> On Wed, Jan 7, 2015 at 5:16 PM, Keean Schupke <[email protected]> wrote: > >> > I'm probably being slow, but I don't see that. With sortBy you pass > the > >> > comparison function explicitly. With a 'view' the comparison function > is > >> > passed implicitly (by they type). That is the only difference. A view > is > >> > simply type that overrides the comparator. > >> > > >> > Where is the extra memory etc coming from? > >> > >> For concreteness, here's what it looks like in C++: > >> > >> template <class RandomAccessIterator> > >> void sort (RandomAccessIterator first, RandomAccessIterator last); > >> > >> template <class RandomAccessIterator, class Compare> > >> void sort (RandomAccessIterator first, RandomAccessIterator last, > >> Compare comp); > >> > >> The first is sort, the second is sortBy. Say the comparison function > >> looks like > >> > >> class SaltedCompare { > >> HugeClass salt; > >> bool operator()(int x, int y) const { return hash(salt,x) < > >> hash(salt,y); } > >> } > >> > >> where the salt is (for some reason) huge. In C++, we pass a single > >> instance of SaltedCompare to the second version of sort, and the first > >> two arguments can point directly into a flat array of ints. > >> > >> Instead, you propose making a SaltedInt type. At best, this would > >> look something like > >> > >> class SaltedInt { > >> HugeClass* salt; > >> int x; > >> bool operator<(...) { ... } > >> } > >> > >> We either add another memory indirection or store a copy of HugeClass > >> in every entry. In either case, we need to copy the array. > >> > >> Apologies if what I'm describing is different from the views you had in > >> mind. > >> > >> Geoffrey > >> _______________________________________________ > >> bitc-dev mailing list > >> [email protected] > >> http://www.coyotos.org/mailman/listinfo/bitc-dev > > > > > > > > _______________________________________________ > > bitc-dev mailing list > > [email protected] > > http://www.coyotos.org/mailman/listinfo/bitc-dev > > > _______________________________________________ > bitc-dev mailing list > [email protected] > http://www.coyotos.org/mailman/listinfo/bitc-dev >
_______________________________________________ bitc-dev mailing list [email protected] http://www.coyotos.org/mailman/listinfo/bitc-dev
