Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Racket Interactive vs Compiled Performance

Tags:

Whether or not I compile a Racket program seems to make no difference to the runtime performance.

Is it just the loading of the file initially that is improved by compilation? In other words, does running racket src.rkt do a jit compilation on the fly, which is why I see no difference in compiling vs interactive?

Even for tight loops of integer arithmetic, where I thought some difference would occur, the profile times are equivalent whether or not I previously did a raco make.

Am I missing something simple?

PS, I notice that I can run racket against the source file (.rkt) or .zo file. Does racket automatically use the .zo if one is found that corresponds to the .rkt file, or does the .zo file need to be used explicitly? Either way, it makes no difference to the performance numbers I'm seeing.

like image 468
Scott Klarenbach Avatar asked Apr 13 '12 04:04

Scott Klarenbach


People also ask

Is racket compiled or interpreted?

Racket programs and expressions are compiled automatically and on-the-fly.

Does racket compile to machine code?

Yes, you're right. Racket compiles code in two stages: first, the code is compiled into bytecode form, and then when it runs it gets jitted into machine code. When you compile a file, you're basically creating the bytecode which saves on re-compiling it later.


1 Answers

Yes, you're right.

Racket compiles code in two stages: first, the code is compiled into bytecode form, and then when it runs it gets jitted into machine code. When you compile a file, you're basically creating the bytecode which saves on re-compiling it later. Since that's usually not something that takes a lot of time for small pieces of code, you won't see any noticeable difference in runtimes. For an extreme example, you can delete all *.zo files in the collection tree and start DrRacket -- it will take a lot of time to start since there's a ton of code, but once it does start, it would run almost as usual. (It would also be slow to click "run" since that will reload and recompile some files.) Another concern for bigger pieces of code is that the compilation process can make memory consumption higher, but that's also not an issue with smaller pieces of code.

See also the Performace chapter in the guide for hints on how to improve performance.

like image 198
Eli Barzilay Avatar answered Oct 18 '22 17:10

Eli Barzilay