In Whalesong, I've been watching where the compile-time is going,
because I want to make it more pleasant to use.  When I compile hello
world, it takes about three seconds to complete the compile on my
machine.

Out of a lark, I wanted to see what the base-line was for just loading
up the modules and not doing any work at all:

#############################################
$ time whalesong
[command line usage output cut]

real    0m1.872s
user    0m1.592s
sys     0m0.152s
#############################################

Oh dear.  Ok, so I must be doing something terribly wrong, because it
looks like the majority of the time is simply from loading Whalesong's
modules in the first place.

Is there something built into Racket that lets me see how long it
takes for modules to invoke?  If not, I guess I can just annotate each
of my modules to see where the time's taking.



In any event, I'm definitely doing raco make, so something else is
accounting for the time.  While trying to trace it, I saw something
unusual.  Here's a reduced test case.  Let's say that I have the
following test file that I'm calling "load.rkt":

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#lang racket/base
(require (planet dyoo/whalesong/whalesong-helpers)
         #;(planet dyoo/whalesong/make/make-structs))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

To note: whalesong-helpers.rkt itself does a require of make-structs.
I first have load.rkt where the require to make-structs is commented
out.

I measure the time it takes to run load.rkt:

######################################################
dyoo@thunderclap:~/work/whalesong$ raco make load.rkt
dyoo@thunderclap:~/work/whalesong$ time racket load.rkt

real    0m1.856s
user    0m1.608s
sys     0m0.140s
######################################################

I then uncomment the require in my load.rkt, recompile, and measure again.



######################################################
dyoo@thunderclap:~/work/whalesong$ raco make load.rkt
dyoo@thunderclap:~/work/whalesong$ time racket load.rkt

real    0m2.028s
user    0m1.808s
sys     0m0.104s
######################################################

I'm observing about a 100ms cost here for something that I expected to
be a no-op, because the module has already been required.


The reason I think Typed Racket might be involved is because
make-structs is written in #lang typed/racket/base.  When I do a
similar experiment, replacing the require to make-structs with a
module in #lang racket/base, I don't see the introduced delay:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dyoo@thunderclap:~/work/whalesong$ cat load.rkt
#lang racket/base

(require (planet dyoo/whalesong/whalesong-helpers)
         (planet dyoo/whalesong/js-assembler/package))
dyoo@thunderclap:~/work/whalesong$ raco make load.rkt
dyoo@thunderclap:~/work/whalesong$ time racket load.rkt

real    0m1.792s
user    0m1.548s
sys     0m0.152s
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


Is that something that's supposed to happen?  I guess I'm just trying
to understand the repercussions of requiring a module from Typed
Racket into regular Racket.
_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

Reply via email to