Refine the README in a couple of places.

This commit is contained in:
Chris Morgan 2014-06-12 18:15:15 +10:00
parent ea63cc90d1
commit 571142cfcf

View file

@ -3,11 +3,11 @@
[![Build Status](https://travis-ci.org/chris-morgan/anymap.svg?branch=master)](https://travis-ci.org/chris-morgan/anymap) [![Build Status](https://travis-ci.org/chris-morgan/anymap.svg?branch=master)](https://travis-ci.org/chris-morgan/anymap)
If youre familiar with Go and Go web frameworks, you may have come across the common “environment” pattern for storing data related to the request. Its typically something like ``map[string]interface{}`` and is accessed with arbitrary strings which may clash and type assertions which are a little unwieldy and must be used very carefully. If youre familiar with Go and Go web frameworks, you may have come across the common “environment” pattern for storing data related to the request. Its typically something like ``map[string]interface{}`` and is accessed with arbitrary strings which may clash and type assertions which are a little unwieldy and must be used very carefully. (Personally I would consider that it is just *asking* for things to blow up in your face.) In a language like Go, lacking in generics, this is the best that can be done; such a thing cannot possibly be made safe without generics.
This is madness. Hare-brained, stark, raving madness, just *asking* for things to blow up in your face. Unfortunately for people in Go, its the best that they can have because of its weak type system; such a thing cannot possibly be made safe without generics. As another example of such an interface, JavaScript objects are exactly the same—a mapping of string keys to arbitrary values. (There it is actually *more* dangerous, because methods and fields/attributes/properties are on the same plane.)
Fortunately, we can do better in Rust. Our type system is quite equal to easy, robust expression of such problems. Fortunately, we can do better than these things in Rust. Our type system is quite equal to easy, robust expression of such problems.
The ``AnyMap`` type is a friendly wrapper around a ``HashMap<TypeId, Box<Any>:'static>``, exposing a nice, easy typed interface, perfectly safe and absolutely robust. The ``AnyMap`` type is a friendly wrapper around a ``HashMap<TypeId, Box<Any>:'static>``, exposing a nice, easy typed interface, perfectly safe and absolutely robust.
@ -18,12 +18,16 @@ Instructions
make make
This includes building the documentation which you may find at ``doc/anymap/index.html``.
The documentation, with examples, [is also available online](http://www.rust-ci.org/chris-morgan/anymap/doc/anymap/struct.AnyMap.html).
Future work Future work
----------- -----------
I think that the only thing left for this is filling out additional methods from ``HashMap`` as appropriate. I think that the only thing left for this is filling out additional methods from ``HashMap`` as appropriate.
Its a very simple thing. Its a very simple thing. (The initial implementation time was under ten minutes.)
Author Author
------ ------