[erlang-questions] towards a unified dict api

Richard Carlsson carlsson.richard@REDACTED
Fri Dec 23 23:09:00 CET 2011


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.

A Good Yule to y'all,

   /Richard



More information about the erlang-questions mailing list