# HG changeset patch # User Linus Björnstam # Date 1563895887 -7200 # Tue Jul 23 17:31:27 2019 +0200 # Node ID c4834f91d0e7632448ef7e889eee2a429526bb48 # Parent d0269ce64b88cf8f47f3a96818a4370047395500 Added (ice-9 threads) to the used modules, since it was removed from (guile). Added a custom printer. diff --git a/fector.scm b/fector.scm --- a/fector.scm +++ b/fector.scm @@ -27,6 +27,11 @@ ;; since a fiber may be re-scheduled on a different thread. If anyone has a low-cost fix ;; for this i'd love to hear about it. +;; TODO: Evaluate using RRB-trees for the fectors. This would allow efficient appends and splices +;; at very little cost for guile 3 (which can generate fast code paths). RRB-trees are a +;; strict superset of the data structure used here, but with relaxed rules about how many +;; elements in a node. What this means for fectors is: more expensive lookups AFTER a splices +;; or append has been made. ;; TODO: why is fector-ref so much slower than vlist-ref? ;; have a look at immer pvectors to see if there is anything they are doing except being ;; c++. @@ -34,10 +39,15 @@ ;; TODO: Rewrite (cond ... (else (cond ...)). ;; TODO: Should we allow for regular fectors in transient procedures with implicit conversion? ;; It is comfortable, but just mixing it is bad style. +;; TODO: Make a fector-generator that will provide a nice way to iterate through the fector +;; that also has a configurable start and end. This could be usable when writing +;; procedures like fector-copy that allows for subfectors to be copied. (define-module (fector) #:use-module (srfi srfi-9) + #:use-module ((srfi srfi-9 gnu) #:select (set-record-type-printer!)) #:use-module (ice-9 atomic) #:use-module (ice-9 match) + #:use-module (ice-9 threads) #:export (fector? transient-fector? transient-fector @@ -685,3 +695,13 @@ (if (= -1 index) sum (loop (1- index) (+ sum (fector-ref fec index)))))) + + +(define (display-fector f port) + (if (transient-fector? f) + (display "#transient-fector") + (display "#fector")) + (display (fector->list f) port)) + +(set-record-type-printer! display-fector) +(set-record-type-printer! display-fector)