[erlang-questions] towards a unified dict api

Fred Hebert <>
Sat Dec 24 00:04:11 CET 2011


On Fri, Dec 23, 2011 at 5:09 PM, Richard Carlsson <
> wrote:

> A thing I've been tinkering with on and off for years is making a unified
> API for dictionaries in Erlang (dict, orddict, gb_trees, ets, dets). This
> requires figuring out a set of function names and calling conventions that
> are mostly familiar but which don't already have a conflicting definition
> in one or more of the modules involved.
>
> In the end I went for using most of the dict module API unchanged, with
> some new synonyms, and a number of additional useful functions. I also made
> the dict module define a new 'dict' behaviour (even though it's just an
> interface rather than a complete behaviour).
>
>  One particular detail is that gb_trees (with its user-unfriendly name and
> rather different calling conventions) can now quite simply be used through
> the dict module as an ordered variant of dict, and you can pretend you
> never heard of the gb_trees module unless you want to use one of its
> specially implementation-dependent functions. An ordered dict can be
> created through dict:new([ordered_set]). This also resolved some major
> problems with clashing function definitions.


> The code (based on the OTP maint branch) can be found here:
>
> https://github.com/richcarl/otp/tree/dict-api
>
> The quickest way of having a look at the suggested API is to follow this
> link and scroll down to see the behaviour callback:
>
> https://github.com/richcarl/otp/blob/dict-api/lib/stdlib/src/dict.erl
>
>
> Reactions, suggestions, and test pilots are most welcome. I'm not ready to
> write an EEP until I feel the API is good enough. Things still on the
> TODO-list are: updating the docs for ets and dets, figuring out a good set
> of iterator functions, and maybe include QLC table/1/2 functions and
> match/select functions in the API. And then the same kind of unified API
> should be made for sets and probably also for sequences.
>

I'm wondering how that changes impact modules like 'sets', 'ordsets' and
'gb_sets', where ordsets were based on the same data structure as orddict,
sets the same as dict, and gb_sets were based on gb_trees' structure. There
was some kind of general relationship between all these modules that is now
being lost.

Otherwise, that sounds good.


>
> A Good Yule to y'all,
>
>  /Richard
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20111223/b1ddcd19/attachment.html>


More information about the erlang-questions mailing list