Plaster
New
List
Login
common-lisp
default
anonymous
2023.09.02 06:44:40
(ql:quickload :trivial-gray-streams) (defpackage :this-pkg (:use :cl :trivial-gray-streams)) (in-package :this-pkg) (defstruct my-stream str i) (defmethod stream-read-char ((s my-stream)) (declare (optimize (speed 3) (safety 0) (debug 0))) (with-slots (str i) s (let ((ret (or (ignore-errors (elt str i)) :eof))) (incf i) ret))) (defun make-test-stream () (make-my-stream :i 0 :str (make-array 1234567 :initial-element #\a))) (defun my-read-char (s) (declare (optimize (speed 3) (safety 0) (debug 0)) (my-stream s)) (with-slots (str i) s (let ((ret (or (ignore-errors (elt str i)) :eof))) (incf i) ret))) (let ((s1 (make-test-stream)) (s2 (make-test-stream))) (time (loop for i from 0 to 1234567 do (stream-read-char s1))) (time (loop for i from 0 to 1234567 do (my-read-char s2))))
Raw
Annotate
Repaste
Edit