Gauche > Archives > 2026/02/18

2026/02/18 16:23:36 UTCkaki
#
メタクラスと親クラスのメタクラスの互換性って特にチェックされないっぽいですけど、継承関係は無くてもいいんですか?自動にすると全部のメタクラスを継承したメタクラスが生成されますよね。
#
(define-class <a-super-meta> (<class>)
  ())

(define-class <a-sub-meta> (<class>)
  ())

(define-class <a-super> ()
  ()
  :metaclass <a-super-meta>)

(define-class <a-sub> (<a-super>)
  ()
  :metaclass <a-sub-meta>)

;; <a-super-meta> と <a-sub-meta> は他人だけどいいのか?
2026/02/18 16:33:05 UTCkaki
#
話は変わって、array-for-each-index のドキュメントに "インデックスオブジェクトを…渡すことで、 より良い性能を引き出すことができます" ってあるんですけど、arrayのrankが低いうちは最適化されててインデックスオブジェクト渡さない形式の方が速そうで気になりました。
#
gosh> (use gauche.array)
gosh> (time (rlet1 n 0 (array-for-each-index (make-array (shape 0 1000 0 10000)) (^ (i j) (inc! n (+ i j))))))
;(time (rlet1 n 0 (array-for-each-index (make-array (shape 0 1000 0 1000 ...
; real   2.270
; user   2.210
; sys    0.050
54990000000
gosh> (time (rlet1 n 0 (array-for-each-index (make-array (shape 0 1000 0 10000)) (^v (inc! n (+ (s32vector-ref v 0) (s32vector-ref v 1)))) (s32vector 0 0))))
;(time (rlet1 n 0 (array-for-each-index (make-array (shape 0 1000 0 1000 ...
; real   3.058
; user   3.030
; sys    0.010