New names for some operations taylanbayirli@xxxxxx (13 Sep 2015 12:13 UTC)
|
Re: New names for some operations
John Cowan
(13 Sep 2015 19:01 UTC)
|
Re: New names for some operations
taylanbayirli@xxxxxx
(13 Sep 2015 20:19 UTC)
|
Re: New names for some operations
John Cowan
(13 Sep 2015 22:20 UTC)
|
Re: New names for some operations
taylanbayirli@xxxxxx
(14 Sep 2015 08:29 UTC)
|
Re: New names for some operations
Shiro Kawai
(13 Sep 2015 23:28 UTC)
|
Re: New names for some operations
John Cowan
(13 Sep 2015 23:45 UTC)
|
Re: New names for some operations
Shiro Kawai
(13 Sep 2015 19:27 UTC)
|
Re: New names for some operations
taylanbayirli@xxxxxx
(13 Sep 2015 20:04 UTC)
|
Re: New names for some operations
John Cowan
(13 Sep 2015 20:11 UTC)
|
Re: New names for some operations
Shiro Kawai
(13 Sep 2015 20:25 UTC)
|
Re: New names for some operations
taylanbayirli@xxxxxx
(13 Sep 2015 21:46 UTC)
|
Re: New names for some operations
taylanbayirli@xxxxxx
(14 Sep 2015 09:39 UTC)
|
Re: New names for some operations
Arthur A. Gleckler
(13 Sep 2015 19:42 UTC)
|
Re: New names for some operations
taylanbayirli@xxxxxx
(13 Sep 2015 19:57 UTC)
|
Re: New names for some operations
Arthur A. Gleckler
(14 Sep 2015 03:25 UTC)
|
Re: New names for some operations
John Cowan
(14 Sep 2015 03:38 UTC)
|
After talking with Mark Weaver on IRC I decided to do some renames. His input was in line with input I had also gotten from Taylor Campbell a while ago: it's bad to expose any operations with nondeterministic order of applications/results. Radical solutions involve 1. dropping such operations entirely or keeping them very minimal, 2. specifying ordered hash tables like in PyPy. But these are obviously very radical. If anyone knows a good solution, please share. For now, I just try to make the API's pitfalls more open to sight via different names for some operations. There's also the secondary reason that I've deviated from typical argument order for operations in the for-each and map family. *** Here's the renames and their rationale: - hashtable-for-each -> hashtable-walk Two reasons: the argument order is now different from a typical for-each, and more importantly, a for-each operation typically does its applications in a well-specified order, whereas this one does them in unspecified order. Actually "walk" does sound like it has an order, so I'm open to even better suggestions. - hashtable-map! -> hashtable-update-all! Again, argument order for one, and different semantics for two. "Update-all!" also makes the semantics very clear in analogy to the singular "update!" operation. - hashtable-fold -> hashtable-sum Once again, argument order for one, and more importantly different semantics. "Sum" is a good name because it makes it obvious that the given procedure should be associative and commutative in a sense. - hashtable-map->list -> hashtable-map->lset The resulting list should be treated as a set. Semantically this goes very well with its implementation in terms of hashtable-sum, where the consing up of the result list can be considered associative and commutative because at every application it takes the union of the so-far accumulated set and the one-element set of the current result; set-union is an associative and commutative operation. *** To a casual onlooker, all this might seem extremely pedantic. But I could not possibly ignore the advice of two very experienced Schemers, especially combined together. The best way to go actually is probably to reduce one's use of traditional hash tables altogether (Mark's position), because they're inherently imperative, but I hope that these names offer an intermediate solution. Taylan