17.3.4 Installing a Language
So far, we have used the reader meta-language to access languages like "literal.rkt" and "dollar-racket.rkt". If you want to use something like #lang literal directly, then you must move "literal.rkt" into a Racket collection named "literal".
To install a collection, you can create a directory either in the main Racket installation or in a user-specific directory. Use find-collects-dir or find-user-collects-dir from setup/dirs to find the directory:
> (require setup/dirs) |
> (find-user-collects-dir) |
#<path:/home/racketeer/.racket/5.1/collects> |
Move "literal.rkt" to "literal/lang/reader.rkt" within the directory reported by find-collects-dir or find-user-collects-dir. That is, the file "literal.rkt" must be renamed to "reader.rkt" and placed in a "lang" sub-directory of the "literal" collection.
.... (the main installation or the user’s space) |
|- "collects" |
|- "literal" |
|- "lang" |
|- "reader.rkt" |
After moving the file, you can use literal directly after #lang:
#lang literal |
Technology! |
System! |
Perfect! |
See raco: Racket Command-Line Tools for more information on using raco.
You can also package a collection for others to install by using the raco pack command-line tool:
raco pack --collection literal.plt literal
Then, others can install the "literal" collection using raco setup:
raco setup literal.plt
See PLaneT: Automatic Package Distribution for more information about PLaneT packages.
A better approach may be to distribute your language as a PLaneT package. A drawback of using a PLaneT package is that users must type #lang planet followed by a PLaneT path to access the language. The great advantages are that the PLaneT package can be installed automatically, it can be versioned, and it co-exists more easily with other packages.