Hi,
I'm trying out vertigo and hoping you can help me figure out what I am
missing, I get an error when I use get-in:
; nREPL 0.1.8-preview
user> (use 'vertigo.structs)
nil
user> (def-typed-struct ints-and-floats :ints (array uint32 10) :floats
(array float32 10))
#'user/ints-and-floats
user> (def x {:ints (range 10) :floats (map float (range 10))})
#'user/x
user> (require '[vertigo.core :as v])
nil
user> (def ^:ints-and-floats s (v/marshal-seq ints-and-floats [x]))
#'user/s
user> (v/get-in s [:floats 4])
IllegalArgumentException Invalid field '4' for type ints-and-floats
vertigo.core/validate-lookup (core.clj:177)
user> (v/get-in s [4 :floats])
IllegalArgumentException java.nio.Buffer.position (Buffer.java:216)
Thanks,
Ezra
On Tuesday, July 9, 2013 11:56:03 PM UTC-4, Zach Tellman wrote:
>
> Last year, I gave a talk at the Conj on my attempt to write an AI for the
> board game Go. Two things I discovered is that it was hard to get
> predictable performance, but even once I made sure I had all the right type
> hints, there was still a lot of room at the bottom for performance
> improvements. Towards the end [1], I mentioned a few ideas for
> improvements, one of which was simply using ByteBuffers rather than objects
> to host the data. This would remove all the levels of indirection, giving
> much better cache coherency, and also allow for fast unsynchronized
> mutability when the situation called for it.
>
> So, ten months and several supporting libraries [2] [3] later, here it is:
> https://github.com/ztellman/vertigo
>
> At a high level, this library is useful whenever your datatype has a fixed
> layout and is used more than once. Depending on your type, it will give
> you moderate to large memory savings, and if you're willing to forgo some
> of core library in favor of Vertigo's operators, you can get significant
> performance gains on batch operations. And, in the cases where performance
> doesn't matter, it will behave exactly like any other Clojure data
> structure.
>
> I want to point out that something like this would be more or less
> impossible in Java; reading from an offset in a ByteBuffer without the
> compile-time inference and validation provided by this library would be
> pointlessly risky. There's not a lot of low-level Clojure libraries, but
> there's an increasing amount of production usage where people are using
> Clojure for performance-sensitive work. I'm looking forward to seeing what
> people do with Vertigo and libraries like it.
>
> Zach
>
> [1]
> http://www.youtube.com/watch?feature=player_detailpage&v=v5dYE0CMmHQ#t=1828s
> [2] https://github.com/ztellman/primitive-math
> [3] https://github.com/ztellman/byte-streams
>
--
--
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
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.