On Sun, May 29, 2011 at 8:56 PM, James Reeves <[email protected]> wrote:
> The documentation on records seems to indicate that they be used in
> place of structs, but is there any advantage to using a record if no
> protocols are assigned to it?
Access to a record's in-definition members should be faster than
access to arbitrary keys in a map, but that's it if no protocols are
used.
> For example, I've defined a TcpServer record as part of a library I'm
> developing:
>
> (defrecord TcpServer
> [port
> host
> backlog
> handler
> socket
> connections])
>
> (defn tcp-server [& {:as options}]
> {:pre [(:port options) (:handler options)]}
> (TcpServer.
> (:port options)
> (:host options "127.0.0.1")
> (:backlog options 50)
> (:handler options)
> (atom nil)
> (atom #{})))
>
> Is this idiomatic Clojure, or should I just use a map instead:
>
> (defn tcp-server [& {:as options}]
> (merge
> {:host "127.0.0.1"
> :backlog 50
> :socket (atom nil)
> :connections (atom #{})
> options))
I don't think either is non-idiomatic, but I'd probably just use the
map. It's shorter and simpler code, more widely interoperable with
other Clojure facilities, and the member access speedup using a record
is unlikely to matter much in code that is blocked on I/O nearly all
of the time anyway. If you were using it in CPU-intensive work, e.g. a
complex number datatype in heavy number crunching, then the speedup
would matter (although in that specific instance a 1.3
primitive-double vector of length 2 would probably beat a record for
speed unless records or deftypes can have unboxed primitive fields and
you can access these without boxing in 1.3).
--
Protege: What is this seething mass of parentheses?!
Master: Your father's Lisp REPL. This is the language of a true
hacker. Not as clumsy or random as C++; a language for a more
civilized age.
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en