From 0c2c992bf40d51b5cba78994a4e496797e76f4a8 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 21 May 2010 07:16:18 -0600 Subject: [PATCH] reorder and revise dialects section of guide --- collects/scribblings/guide/dialects.scrbl | 114 ++++++++++------------ 1 file changed, 53 insertions(+), 61 deletions(-) diff --git a/collects/scribblings/guide/dialects.scrbl b/collects/scribblings/guide/dialects.scrbl index b6dc1f69d5..ab100cc93d 100644 --- a/collects/scribblings/guide/dialects.scrbl +++ b/collects/scribblings/guide/dialects.scrbl @@ -26,6 +26,59 @@ new languages. @; -------------------------------------------------- +@section[#:tag "more-hash-lang"]{More Rackets} + +``Racket'' is more of an idea about programming languages than a +language in the usual sense. Macros can extend a base language (as +described in @secref["macros"]), and alternate parsers can +construct an entirely new language from the ground up (as described in +@secref["languages"]). + +The @hash-lang[] line that starts a Racket module declares the +base language of the module. By ``Racket,'' we usually mean +@hash-lang[] followed by the base language @racketmodname[racket] or +@racketmodname[racket/base] (of which @racketmodname[racket] is an +extension). The Racket distribution provides additional languages, +including the following: + +@itemize[ + + @item{@racketmodname[typed/racket] --- like + @racketmodname[racket], but statically typed; see + @other-manual['(lib "typed-scheme/scribblings/ts-guide.scrbl")]} + + @item{@racketmodname[lazy] --- like @racketmodname[racket/base], but + avoids evaluating an expression until its value is needed; see + @other-manual['(lib "lazy/lazy.scrbl")]} + + @item{@racketmodname[frtime] --- changes evaluation in an even more + radical way to support reactive programming; see + @other-manual['(lib "frtime/scribblings/frtime.scrbl")]} + + @item{@racketmodname[scribble/base] --- a language, which looks more + like Latex than Racket, for writing documentation; see + @other-manual['(lib "scribblings/scribble/scribble.scrbl")]} + +] + +Each of these languages is used by starting module with the language +name after @hash-lang[]. For example, this source of this +document starts with @racket[@#,hash-lang[] scribble/base]. + +Furthermore, Racket users can define their own languages, as discussed +in @secref["languages"]. Typically, a language name maps to its +implementation through a module path by adding +@racketidfont{/lang/reader}; for example, the language name +@racketmodname[scribble/base] is expanded to +@racket[scribble/base/lang/reader], which is the module that +implements the surface-syntax parser. Some language names act as +language loaders; for example, @racket[@#,hash-lang[] +@#,racketmodname[planet] _planet-path] downloads, installs, and uses a +language via @seclink["top" #:doc '(lib +"planet/planet.scrbl")]{@|PLaneT|}. + +@; -------------------------------------------------- + @section[#:tag "standards"]{Standards} Standard dialects of Scheme include the ones defined by @|r5rs| and @@ -80,67 +133,6 @@ information about running @|r6rs| programs with Racket. @; -------------------------------------------------- -@section[#:tag "more-hash-lang"]{More Rackets} - -Like ``Scheme,'' even ``Racket'' is more of an idea about -programming languages than a language in the usual sense. Macros can -extend a base language (as described in @secref["macros"]), but macros -and alternate parsers can construct an entirely new language from the -ground up. - -The @hash-lang[] line that starts a Racket module declares the -base language of the module. By ``Racket,'' we usually mean -@hash-lang[] followed by the base language @racketmodname[racket] or -@racketmodname[racket/base] (of which @racketmodname[racket] is an -extension). The Racket distribution provides additional languages, -including the following: - -@itemize[ - - @item{@racketmodname[typed/racket] --- like - @racketmodname[racket], but statically typed; see - @other-manual['(lib "typed-scheme/scribblings/ts-guide.scrbl")]} - - @item{@racketmodname[lazy] --- like @racketmodname[racket/base], but - avoids evaluating an expression until its value is needed; see - @other-manual['(lib "lazy/lazy.scrbl")]} - - @item{@racketmodname[frtime] --- changes evaluation in an even more - radical way to support reactive programming; see - @other-manual['(lib "frtime/scribblings/frtime.scrbl")]} - - @item{@racketmodname[scribble/base] --- a language, which looks more - like Latex than Racket, for writing documentation; see - @other-manual['(lib "scribblings/scribble/scribble.scrbl")]} - -] - -Each of these languages is used by starting module with the language -name after @hash-lang[]. For example, this source of this -document starts with @racket[@#,hash-lang[] scribble/base]. - -Racket users can define their own languages. A language name maps -to its implementation through a module path by adding -@racketidfont{/lang/reader}. For example, the language name -@racketmodname[scribble/doc] is expanded to -@racket[scribble/doc/lang/reader], which is the module that implements -the surface-syntax parser. The parser, in turn, generates a -@racket[module] form, which determines the base language at the level -of syntactic forms an functions. - -Some language names act as language loaders. For example, -@racketmodname[s-exp] as a language uses the usual Racket parser -for surface-syntax reading, and then it uses the module path after -@racketmodname[s-exp] for the language's syntactic forms. Thus, -@racket[@#,hash-lang[] @#,racketmodname[s-exp] "mylang.rkt"] parses -the module body using the normal Racket reader, by then imports -the initial syntax and functions for the module body from -@racket["mylang.rkt"]. Similarly, @racket[@#,hash-lang[] -@#,racketmodname[planet] _planet-path] loads a language via -@seclink["top" #:doc '(lib "planet/planet.scrbl")]{@|PLaneT|}. - -@; -------------------------------------------------- - @section[#:tag "teaching-langs"]{Teaching} The @|HtDP| textbook relies on pedagogic variants of Racket that