On 09/05/2013 08:42 AM, Konrad Hinsen wrote:
Scott Klarenbach writes:

  > Check out some of the functional data structures found here:
  >
  > http://www.ccs.neu.edu/racket/pubs/sfp10-kth.pdf
  >
  > VLists may be of particular interest in your case.

That's the stuff in the pfds package, right?

   https://pkg.racket-lang.org/info/pfds

Interesting indeed, makes me think of Clojure vectors. And written to
be used as a drop-in replacement for lists. I'll play with that as
well!

The implementation is in Typed Racket as well, so should I expect the
same performance problems as with arrays when I work in plain Racket?

Yes. A first-order data structure gets traversed every time it passes from untyped to typed code, to ensure its structure conforms to its type. This makes all operations Omega(n) in untyped code; i.e. an O(log(n)) operation becomes O(n), and an O(n*log(n)) operation remains O(n*log(n)).

The best advice I have is to keep performance-critical loops either all typed or all untyped, unless the only things that cross the contract boundary are flat first-order datums like flonums, strings and vectors. (The math library's flonum functions, for example, are plenty fast to call from untyped code.) Speeding up the contract boundary is an active area of research, so I expect to have to modify this advice in the future.

Neil ⊥

____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to