Оказывает это просто (по крайней мере, версию 1.3), такой вот код:
(asdf:operate 'asdf:load-op :lift)
(defpackage :clozure.lift.test
(:use :cl :lift)
(:export :test))
(in-package #:clozure.lift.test)
(deftestsuite clozure-lift-test () ())
(addtest (clozure-lift-test)
test1
(ensure-same 6000
(length (let ((str ""))
(dotimes (i 1000)
(setf str
(concatenate 'string
str
"Привет")))
(length str)))))
(defun test ()
(run-tests :suite 'clozure-lift-test :report-pathname nil))
Приводит к
An unhandled error condition has been signalled: value #<BOGUS object @ #x14BF07EE> is not of the expected type SEQUENCE.
Теперь контрольный выстрел:
(clozure.lift.test:test)
В итоге, ошибка сегментирования и скоропостижный конец...
А какая версия CCL? Какая система?
ОтветитьУдалитьУ меня повторить ошибку не получается:
Start: CLOZURE-LIFT-TESTAn unhandled error condition has been signalled: value 6000 is not of the expected type SEQUENCE.
#<Results for CLOZURE-LIFT-TEST 1 Test, 1 Error>
x86 (32-bit) (но на AMD64), Gentoo Linux, ClozureCL-1.3
ОтветитьУдалитьЭто дома. На работе софт примерно тот же самый, но железо intel-овское. Там этот код проходит нормально, но чудеса уже в других местах наблюдаются.
В общем, можно выделить два фактора "смерти" (которые проявляются не вполне очевидным образом): русский текст и работа с FFI. Ну и как катализатор - lift, нормально работающий код начинает под управление lift вытворять чудеса вредительства, кажется что-то на уровне работы с hashtable. В общем, наблюдается поведение характерно для С-шных программ, делающих что-то плохое с памятью и начинающих валиться в самых разнообразных местах.