kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

Typed Racketのお勉強 (12)

7 Optimization in Typed Racket

Typed Racketは型の情報を活かして最適化を行います

  • 最適化を止めるには#lang typed/racket #:no-optimizeを使う
  • RealよりもFloatといったように、型を具体的に指定すると効果的
  • リストがnullでないことがわかっている場合は明示してやるとnullチェックが省略される

たとえば整数2個のリストだとわかっていれば

(: sum2 (-> (Listof Integer) Integer))
(define (sum2 l) (+ (car l) (cadr l)))

((Listof Integer)は0個以上のIntegerのリスト)
よりも

(: sum2 (-> (List Integer Integer) Integer))
(define (sum2 l) (+ (car l) (cadr l)))

の方がいいということですね
Vectorも同様
といってもStructでいいケースではStructを使ったほうが適切で速くなります