Common Lispのクラスの比較(defstruct VS defclass)

(defstruct SPerson name age ) (defclass CPerson()( (nam […]

(defstruct SPerson name age ) (defclass CPerson()( (nam […]

  • タグ:
  • タグはありません
(defstruct SPerson
name
age
)
(defclass CPerson()(
(name :initarg :name
:accessor :name)
(age :initarg :age)
))
(let (bob (n 10000000))
(format t "~%(make-SPerson):~A~%" (setf bob (make-SPerson :name "Bob" :age 25)))
(time(loop repeat n do (make-SPerson :name "Bob" :age 25)))
(format t "~%(SPerson-name bob):~A~%" (SPerson-name bob))
(time(loop repeat n do (SPerson-name bob)))
(format t "~%(make-instance 'CPerson):~A~%" (setf bob (make-instance 'CPerson :name "Bob" :age 25)))
(time(loop repeat n do (make-instance 'CPerson :name "Bob" :age 25)))
(format t "~%(:name bob):~A~%" (:name bob))
(time(loop repeat n do (:name bob)))
(format t "~%(slot-value bob 'name):~A~%" (slot-value bob 'name))
(time(loop repeat n do (slot-value bob 'name)))
)
(quit)
#|
(ClozureCL)
(make-SPerson):#S(SPERSON :NAME Bob :AGE 25)
(LOOP REPEAT N DO (MAKE-SPERSON :NAME "Bob" :AGE 25))
took 265,000 microseconds (0.265000 seconds) to run.
12,300 microseconds (0.012300 seconds, 4.64%) of which was spent in GC.
During that period, and with 4 available CPU cores,
234,375 microseconds (0.234375 seconds) were spent in user mode
0 microseconds (0.000000 seconds) were spent in system mode
320,000,064 bytes of memory allocated.
(SPerson-name bob):Bob
(LOOP REPEAT N DO (SPERSON-NAME BOB))
took 9,000 microseconds (0.009000 seconds) to run.
During that period, and with 4 available CPU cores,
15,625 microseconds (0.015625 seconds) were spent in user mode
0 microseconds (0.000000 seconds) were spent in system mode
64 bytes of memory allocated.
(make-instance 'CPerson):#<CPERSON #x2100619C3D>
(LOOP REPEAT N DO (MAKE-INSTANCE 'CPERSON :NAME "Bob" :AGE 25))
took 6,937,000 microseconds (6.937000 seconds) to run.
31,695 microseconds (0.031695 seconds, 0.46%) of which was spent in GC.
During that period, and with 4 available CPU cores,
6,859,375 microseconds (6.859375 seconds) were spent in user mode
15,625 microseconds (0.015625 seconds) were spent in system mode
640,000,064 bytes of memory allocated.
(:name bob):Bob
(LOOP REPEAT N DO (:NAME BOB))
took 198,000 microseconds (0.198000 seconds) to run.
During that period, and with 4 available CPU cores,
203,125 microseconds (0.203125 seconds) were spent in user mode
0 microseconds (0.000000 seconds) were spent in system mode
64 bytes of memory allocated.
(slot-value bob 'name):Bob
(LOOP REPEAT N DO (SLOT-VALUE BOB 'NAME))
took 134,000 microseconds (0.134000 seconds) to run.
During that period, and with 4 available CPU cores,
125,000 microseconds (0.125000 seconds) were spent in user mode
0 microseconds (0.000000 seconds) were spent in system mode
64 bytes of memory allocated.
(SBCL)
(make-SPerson):#S(SPERSON :NAME Bob :AGE 25)
Evaluation took:
0.153 seconds of real time
0.156250 seconds of total run time (0.156250 user, 0.000000 system)
[ Run times consist of 0.031 seconds GC time, and 0.126 seconds non-GC time. ]
101.96% CPU
487,882,134 processor cycles
320,012,176 bytes consed
(SPerson-name bob):Bob
Evaluation took:
0.009 seconds of real time
0.000000 seconds of total run time (0.000000 user, 0.000000 system)
0.00% CPU
30,012,445 processor cycles
0 bytes consed
(make-instance 'CPerson):#<CPERSON {1002A85623}>
Evaluation took:
0.196 seconds of real time
0.203125 seconds of total run time (0.203125 user, 0.000000 system)
[ Run times consist of 0.016 seconds GC time, and 0.188 seconds non-GC time. ]
103.57% CPU
14 lambdas converted
625,230,977 processor cycles
640,351,952 bytes consed
(:name bob):Bob
Evaluation took:
0.047 seconds of real time
0.046875 seconds of total run time (0.046875 user, 0.000000 system)
100.00% CPU
150,816,650 processor cycles
0 bytes consed
(slot-value bob 'name):Bob
Evaluation took:
0.048 seconds of real time
0.046875 seconds of total run time (0.046875 user, 0.000000 system)
97.92% CPU
149,533,983 processor cycles
0 bytes consed
|#
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX