PERCHAR-VS-BUFFERING> (format t "~A-~A~%"
(lisp-implementation-type)
(lisp-implementation-version))
SBCL-1.3.20
NIL
Код здесь: https://pastebin.com/f6RtgQPE
Заранее извиняюсь за на коленке налабанный говнокод.
Для экспериментов нашёл свою старую курсовую в LaTeX и, редактируя и копипастя, раздул файл до 200M.
Вот результаты экспериментов у меня:
PERCHAR-VS-BUFFERING> (let ((*buffer-size* (* 4 (expt 2 10))))
(time
(with-open-file (*standard-input* #P"text3.tex")
(let ((lv (multiple-value-list (run-perchar))))
(setf *x* lv)
(first lv)))))
Evaluation took:
4.092 seconds of real time
4.092759 seconds of total run time (4.042829 user, 0.049930 system)
100.02% CPU
9,427,500,968 processor cycles
7,733,248 bytes consed
114337080
PERCHAR-VS-BUFFERING> (defparameter *x2* *x*)
*X2*
PERCHAR-VS-BUFFERING> (let ((*buffer-size* (* 4 (expt 2 10))))
(time
(with-open-file (*standard-input* #P"text3.tex")
(let ((lv (multiple-value-list (run-with-buffering))))
(setf *x* lv)
(first lv)))))
Evaluation took:
3.162 seconds of real time
3.162505 seconds of total run time (3.117984 user, 0.044521 system)
100.03% CPU
7,284,480,890 processor cycles
7,765,280 bytes consed
114337080
PERCHAR-VS-BUFFERING> (equal *x* *x2*)
T
PERCHAR-VS-BUFFERING>
Как некоторые могут догадаться экспериментировали с делающими одно и то же программами, но немного разными путями. Задачку выбрал несложную чисто для эксперимента.
От многоуважаемой публики прошу аналитику и замечания по техническим аспектам, а также предложения улучшить эксперимент.
PS для некоторых проверок запускал wc -m. Хотя задача у него гораздо проще чем у реализаций на CL, но что примечательно - он проигрывал в скорости от самой медленной реализации на CL более чем на 800 мс.
PS2 Жирный и тупой троллинг от хомячков т.н. мейнстрима и других д**ов здесь не нужен