When you run #lang racket '#(1 1 1)
the output is '#(1 1 1) When you run #lang scheme '#(1 1 1) the output is #(1 1 1) The difference in output (i.e., whether there's a leading quote) is because the `racket' and `scheme' languages arrange different run-time configuration of printing parameters. The language of a program's main module determines the configuration that is used. Until version 5.3.4.8, this run-time configuration was implemented via the `#lang' reader, which attached a syntax property to the module, which was preserved in the bytecode and accessed via `module->language-info', which produced a vector that referred to another module and a name of one of its exports, and so on... The complex chain of indirections was designed to enable loading code for different times at the right time --- but that's what submodules are for. Now, command-line `racket', DrRacket, and `raco exe' look for a `configure-runtime' submodule of a program's main module to be run before the main module. This is a much simpler and more general way to set up run-time parameters. For example, the output of #lang racket (module configure-runtime racket/base (print-vector-length #t)) '#(1 1 1) is '#3(1) since the `configure-runtime' module above turns on vector lengths. Normally, you don't write a `configure-runtime' submodule, and a language's `#%module-begin' introduces a suitable declaration automatically. The `racket' (and `racket/base') language adds a `configure-runtime' submodule to a module body unless there's already an immediate declaration (i.e., not under `begin' and not introduced by a macro). Besides being simpler to write and read, using a submodule is more general than a reader-added property. I think Carl once asked for a way to add runtime configuration at the macro level instead of the reader level, and now that's available. I haven't yet re-written the Guide's chapter 17 to use submodules, but I'm planning to do that next. _________________________ Racket Developers list: http://lists.racket-lang.org/dev