| PasteRack.org | ||
| Paste # 24542 | ||
| 2020-07-13 02:15:02 | ||
Fork as a new paste. | ||
Paste viewed 309 times. | ||
Tweet | ||
Embed: | ||
#lang racket/base
(require ; racket/fixnum
(rename-in racket/flonum
(fl+ safe-fl+))
disassemble
(rename-in racket/unsafe/ops
(unsafe-fx= fx=)
(unsafe-fx- fx-)
(unsafe-fl+ fl+)
(unsafe-fx> fx>)
))
(define (count init)
(let loop ([i 1000] [x init])
(if (fx= i 0)
x
(loop (fx- i 1) (fl+ x 1.0)))))
(define (count1 init)
(let loop ([i 1000] [x (safe-fl+ init)]) ; <-- force `init` as a flonum
(if (fx= i 0)
(safe-fl+ x) ;; <-- hint to allocate result flonum here
(loop (fx- i 1) (fl+ x 1.0)))))
(define eloop #f)
(define (count2 u su v sv)
(let loop ([i 1000]
[u (safe-fl+ u)]
[v (safe-fl+ v)]
[su (safe-fl+ su)]
[sv (safe-fl+ sv)]
)
(set! eloop loop)
(if (fx> i 0)
(loop (fx- i 1)
(fl+ u su)
(fl+ v sv)
su
sv
)
(safe-fl+ u v))))
(disassemble count2)
(count2 1.0 1.0 1.0 1.0)
(disassemble eloop)
=>
standard-module-name-resolver: collection not found for module path: disassemble collection: "disassemble" in collection directories: /home/pasterack/.racket/7.3/collects /home/pasterack/racket73/collects ... [166 additional linked and package directories] context...: show-collection-err standard-module-name-resolver syntax-local-module-exports /home/pasterack/racket73/collects/racket/require-transform.rkt:266:2: expand-import /home/pasterack/racket73/collects/racket/private/reqprov.rkt:571:24 /home/pasterack/racket73/collects/racket/private/reqprov.rkt:559:5 /home/pasterack/racket73/collects/racket/require-transform.rkt:266:2: expand-import /home/pasterack/racket73/collects/racket/private/reqprov.rkt:266:21: try-next /home/pasterack/racket73/collects/racket/private/reqprov.rkt:348:21: try-next /home/pasterack/racket73/collects/racket/private/reqprov.rkt:243:2: require apply-transformer-in-context apply-transformer52 dispatch-transformer41 do-local-expand50 /home/pasterack/racket73/collects/syntax/wrap-modbeg.rkt:46:4: do-wrapping-module-begin apply-transformer-in-context ...