#もうeuslispいやだ...SBCLへ移行中ですwww
#そういえば質問があります.
##SBCLで使っていて、異常に遅い気がします
#CL-USER> (time (dotimes (i 100100) (make-marray 'single-float :dimensions 3)))
Evaluation took:
5.782 seconds of real time
5.450075 seconds of total run time (5.320569 user, 0.129506 system)
[ Run times consist of 0.272 seconds GC time, and 5.179 seconds non-GC time. ]
94.26% CPU
16,109,013,564 processor cycles
712,726,448 bytes consed
#ふつうのarrayだと
#CL-USER> (time (dotimes (i 100100) (make-array 3 :element-type 'single-float)))
Evaluation took:
0.000 seconds of real time
0.000040 seconds of total run time (0.000039 user, 0.000001 system)
100.00% CPU
101,041 processor cycles
0 bytes consed
#なんでこんなに遅いんでしょ?
#CでGSL使うのはもちろんもっと速いです
#CL-USER> (disassemble (lambda () (make-marray 'single-float :dimensions 3)))
; disassembly for (LAMBDA ())
; 1227D04E: 8B1518D02712 MOV EDX, [#x1227D018] ; 'SINGLE-FLOAT
; no-arg-parsing entry point
; 54: 8B3D1CD02712 MOV EDI, [#x1227D01C] ; :DIMENSIONS
; 5A: BE0C000000 MOV ESI, 12
; 5F: 8B0520D02712 MOV EAX, [#x1227D020] ; #<FDEFINITION object for MAKE-MARRAY>
; 65: B90C000000 MOV ECX, 12
; 6A: FF75F8 PUSH DWORD PTR [EBP-8]
; 6D: FF6005 JMP DWORD PTR [EAX+5]
; 70: 0F0B0A BREAK 10 ; error trap
; 73: 02 BYTE #X02
; 74: 18 BYTE #X18 ; INVALID-ARG-COUNT-ERROR
; 75: 4D BYTE #X4D ; ECX
#あれー、どこが違うんだろう、と思ったらgsl:make-marrayなんですねw 詳しい人いないかなー
#とりあえず、Clozureでも同じような感じでした
#formatのローマ数字のオプションは「MacLISP時代、学生だったGLSが夏休みにふざけて組み込んだ」説をずっと信じてました。
#実は違ったりするのか...
#formatネタ
##循環リストで ~? を使うと色々できそうな気がしました。
#おお! これは凄い!
#formatのR指示子とGLSの関係については目下全力で調査しておりますw 噂の出所は私だと思います、すいませんw
#formatについてしらべていて、古いMacLISPの記録を眺めているのですが、doとdefunが30歳になってました
#3/1/69 JONL
THE CURRENT VERSION OF LISP, "LISP 102", HAS
THE FOLLOWING AS-YET UNDOCUMENTED FEATURES:
1)"DEFUN" IS AN FSUBR USED TO DEFINE
FUNCTIONS. EXAMPLES ARE
(DEFUN ONECONS (X) (CONS 1 X))
WHICH IS EQUIVALENT TO
(DEFPROP ONECONS
(LAMBDA (X) (CONS 1 X)
EXPR)
AND (DEFUN SMASH FEXPR (L) (RPLACD L NIL))
IS EQUIVALENT TO
(DEFPROP SMASH
(LAMBDA (L) (RPLACD L NIL))
FEXPR)
THE NOVEL FEATURE OF "DEFUN" IS THAT ONE NEED
NOT BE SO CONCERNED WITH BALANCING
PARENTHESES AT THE VERY END OF THE FUNCTION
DEFINITION, SINCE THE TYPE FLAG MAY BE
OMITTED IF IT IS "EXPR", AND APPEARS NEAR
THE FRONT OF THE "DEFUN" LIST IF IT IS SOME
OTHER. ALSO, THE "LAMBDA" NEED NOT BE
DIRECTLY INSERTED.
2)A FAST "DO" SIMILAR TO THE FORTRAN
DO FEATURE NOW EXISTS. THE SYNTAX IS
(DO ATOM INITIALVALUE STEPFUN ENDTEST
STATEMENT1
.
.
.
STATEMENTN)
#いや、すいません、40歳だったw