thought i share it: it's 10000 octets-to-string call on the 14k long tests/utf-8.txt, using a recent sbcl x86 64.
(sb-ext:octets-to-string octets :external-format :utf-8)
Evaluation took: 11.451 seconds of real time 11.336708 seconds of total run time (11.192699 user, 0.144009 system) [ Run times consist of 0.692 seconds GC time, and 10.645 seconds non-GC time. ] 99.00% CPU 20,560,951,683 processor cycles 1,927,564,096 bytes consed
(trivial-utf-8:utf-8-bytes-to-string octets):
Evaluation took: 7.381 seconds of real time 7.300456 seconds of total run time (7.248453 user, 0.052003 system) [ Run times consist of 0.564 seconds GC time, and 6.737 seconds non-GC time. ] 98.90% CPU 13,252,911,624 processor cycles 1,524,620,560 bytes consed
(babel:octets-to-string octets :encoding :utf-8 :errorp t)
Evaluation took: 3.173 seconds of real time 3.144197 seconds of total run time (3.112195 user, 0.032002 system) [ Run times consist of 0.120 seconds GC time, and 3.025 seconds non-GC time. ] 99.09% CPU 5,697,700,848 processor cycles 305,120,336 bytes consed
babel with instantiating the encodings using (safety 0)
Evaluation took: 2.405 seconds of real time 2.380149 seconds of total run time (2.356148 user, 0.024001 system) [ Run times consist of 0.208 seconds GC time, and 2.173 seconds non-GC time. ] 98.96% CPU 4,318,993,638 processor cycles 305,120,000 bytes consed
(deftest x () (let* ((*default-character-encoding* :utf-8) (octets (with-open-file (in (asdf:system-relative-pathname :babel "tests/utf-8.txt") :element-type '(unsigned-byte 8)) (let* ((data (loop for byte = (read-byte in nil nil) until (null byte) collect byte))) (make-array (length data) :element-type '(unsigned-byte 8) :initial-contents data))))) (cl:time (loop repeat 10000 do (octets-to-string octets :encoding :utf-8 :errorp t) ;;(trivial-utf-8:utf-8-bytes-to-string octets) ;;(sb-ext:octets-to-string octets :external-format :utf-8) ))))