[racket-dev] dependencies and racket

From: Daniel Farina (daniel at heroku.com)
Date: Thu Dec 29 19:59:59 EST 2011

Hello list,

I've been playing with Racket.  I'm impressed, especially with the
documentation (both its content and its presentation), the contract
system, and its performance.  I have been investigating writing a
build pack for Heroku to attempt deploying Racket projects with ease.

A blocker, though, where I've hit a bit of a documentation gap is how
to idiomatically itemize and download dependencies for a Racket
program so that the program can exist at run-time without calling
PlaneT whenever an application backend starts and hits a locally
unfulfilled 'require'.  The goal is that a program written, say, three
years ago should be able to run the same way it did when it was
written, so it's really useful to freeze all the dependencies into the
file system somehow and preserve it.  To prevent all the ills that can
occur if a chunk of software starts up needing an old library as well
as the accidental hammering of PLT servers it may also be a good idea
to have a mechanism to *disable* network-sourcing of code at run-time.

raco distribute seems pretty close and useful for other reasons, but
upon my naive inspection, it seems to not save the planet cache
required for the program (I guess dynamic-require makes that
impossible to do soundly in a complete way).  Maybe I'm wrong?

This question is probably pretty similar to: "If I wanted to develop
non-network connection desktop application X, how do I make sure that
I have *everything* the user needs in my distributable".

Cheers, and thanks for so many years of excellent work.


Posted on the dev mailing list.