Hi racket-users!
I've recently become interested in Lisp/Scheme and have started to hack
in Racket. The excellent documentation, the fast integrated search, and
DrRacket have made that a real pleasure.
Thank you for that!
I've been working on a tool to convert notes from the reMarkable 2
tablet to SVG files. At the core is the conversion of (x, y) coordinate
pairs from two `flvector`s to a string of the form "x1,y1 x2,y2 x3,y3".
```
(define (xy->string x y)
(string-append
(~r x #:precision 1) ","
(~r y #:precision 1)))
(define (xy-vectors->string x-vec y-vec)
(for/fold ((coordinates "")
(separator "")
#:result coordinates)
((x (in-flvector x-vec))
(y (in-flvector y-vec)))
(values (string-append
coordinates
separator
(xy->string x y))
" ")))
```
This is currently the bottleneck for large conversion jobs.
Profiling these functions with `profile-flame-graph` resulted in
https://gist.githubusercontent.com/amotta/cfe4b19e24455af219521c9e94455c67/raw/dbbc87bd2f6dd4e27c33831749baa90fffdaed55/flvector-to-coordinates-string-flamegraph.svg
The full profiling script is available at
https://gist.github.com/amotta/e76197082bb1bf63538ede01872917f3
Roughly 90% of time is spent in `contract/private/arrow-val-first.rkt`.
Based on my very limited understanding of Racket, it seems that ~38% of
time is spent handling keyword arguments (presumably `#:precision 1`?).
The `catnp` function (the conversion from flonum to string, I think)
takes up only ~11% of time.
Is this interpretation of the flame graph correct? If so, are there any
obvious blunders on my part? Any ideas for how to speed up this code?
Best wishes,
Alessandro
--
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/racket-users/0139e84f-be70-2bb8-14ac-0159915e7681%40gmail.com.