[Larceny-users] profiling code

Eduardo Cavazos wayo.cavazos at gmail.com
Mon Feb 16 02:57:10 EST 2009


William D Clinger wrote:

>> (require 'profile)
> #t
>> (run-with-profiling
>    (lambda ()
>      (let* ((x1 (vector->list (make-vector 1000000 13)))
>             (x2 (append x1 '()))
>             (y (vector->list (make-vector 1000000 x1)))
>             (z (vector->list (make-vector 1000000 x2))))
>        (equal? y z))))


It would be nice if 'run-with-profiling' returned the result of the 
calling the thunk, so as to make it easier to slip into existing code.

It would also be nice to have a 'profile' macro which wrapped the 
expression in a thunk for you.

With those two changes, 'profile' would act much like 'time'.

This works for me:

----------------------------------------------------------------------

(define (run-with-profiling* thunk)
   (define val #f)
   (if (not (procedure? thunk))
       (assertion-violation 'run-with-profiling
                            "argument should be thunk"
                            thunk))
   (reset-profiler!)
   (start-profiler!)
   (set! val (thunk))
   (stop-profiler!)
   (report-profiler!)

   val)

(define-macro (profile expr)
   `(run-with-profiling* (lambda () ,expr)))
----------------------------------------------------------------------

If they are sound, can we add them to 'profile.sch'?

Ed



More information about the Larceny-users mailing list