It seems like something like this could possibly be made to work, but I do think it is more complicated than allowing the user to pass runtime state as part of the comparison function / function object / typeclass / etc. In particular, thread local state is a pretty hefty tool to have to use if the user just wants to call sort without causing race conditions. If the need for this thread local state stems from requiring instance coherence, it seems like a strong argument for finding a way to not require instance coherence.
Geoffrey On Thu, Jan 8, 2015 at 3:48 PM, Keean Schupke <[email protected]> wrote: > Its just a namespace, hiding the name, so it has nothing to do with runtime. > I am not really sure of what I think the best way to handle thread-local > storage is. I can think of some different options: > > - a 'local' keyword to indicate count is thread-local > - dynamic scoping > > > But perhaps something like this would be good: > > class comparison_counter { > int count; > > public: > int report() { > return count; > } > > instance Ord int is > x < y = do > count <- count + 1 > primitive_int_less(x, y) > } > > If you combined that with some kind of dynamic scoping of type class > instances, for example: > > void thread_start() { > comparison_counter cc; > > // here the instance of Ord for int from 'cc' would override. > > print cc.report > } > > Naively is seems better to restrict the dynamic scoping to type classes, > rather than having full dynamic scoping for variables. > > > Keean. > > > > On 8 January 2015 at 23:02, Geoffrey Irving <[email protected]> wrote: >> >> On Thu, Jan 8, 2015 at 2:56 PM, Keean Schupke <[email protected]> wrote: >> > Thinking more about this, it would be better to have some kind of >> > enclosing >> > namespace that hides 'count' from outside interference. Something like: >> > >> > namespace mine { >> > int count >> > >> > export: >> > int report() { >> > return count; >> > } >> > >> > instance Ord int is >> > x < y = do >> > count <- count + 1 >> > primative_int_less(x, y) >> > } >> > >> > Something that isn't a class (which you have to initialise new instances >> > of), but is just hiding the definition of count. This would remove >> > concerns >> > about count being global, and is a bit like an abstract-data-type in >> > Ada. >> >> Can this system be extended to handle asynchronous access from >> multiple threads, each wanting their own copy of count? >> >> 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
