[Style] some of Robby's suggestions

This commit is contained in:
Matthias Felleisen 2011-02-21 15:00:32 -05:00 committed by Eli Barzilay
parent e45a2e4b38
commit 05ae784d1f
5 changed files with 98 additions and 13 deletions

View File

@ -42,9 +42,10 @@ racket
@; ----------------------------------------------------------------------------- @; -----------------------------------------------------------------------------
@section{Conditionals} @section{Conditionals}
Like definitional constructs, conditionals come in many flavors, too. Because Like definitional constructs, conditionals come in many flavors,
@scheme[cond] and its relatives now allow local uses of @scheme[define], you too. Because @scheme[cond] and its relatives (@scheme[case],
should prefer them over @scheme[if]. @scheme[match], etc) now allow local uses of @scheme[define], you should
prefer them over @scheme[if].
@compare[ @compare[
@racketmod[#:file @racketmod[#:file
@ -71,3 +72,6 @@ racket
(curved fst (chk rst))))) (curved fst (chk rst)))))
] ]
] ]
Of course you should also favor @scheme[cond] (and its relatives) over
@scheme[if] to match the shape of the data definition.

View File

@ -123,8 +123,8 @@ Making code fast is an endless task.
Making code @emph{reasonably} fast is the goal. Making code @emph{reasonably} fast is the goal.
It is especially the goal for all pieces of the code base that are reused It is especially the goal for all pieces of the code base that are reused
elsewhere. Write them using @racketmod[racket] so that they don't affect elsewhere. Write them using @rkt/base[] so that they don't affect the
the load-time for scripts. See the next section. load-time for scripts. See the next section.
As with correctness, performance demands some "testing". At a minimum, As with correctness, performance demands some "testing". At a minimum,
exercise your code on some reasonably large inputs. Add a file to the test exercise your code on some reasonably large inputs. Add a file to the test
@ -156,5 +156,7 @@ And as you read on, keep in mind that we are not perfectionists. We produce
So what is the major lesson of this section? When you fix a bug, make sure So what is the major lesson of this section? When you fix a bug, make sure
to commit (1) the code delta, (2) the new test case, and (3) the revised to commit (1) the code delta, (2) the new test case, and (3) the revised
docs (if applicable) in one batch. If the creation of a single commit is docs (if applicable) in one batch. If the creation of a single commit is
to complex, please push all pieces at once so that the readers can see how too complex of if you wish to factor out one of the commits, please push
things belong together. all pieces at once. That way the code base is always in a state where
code, tests, and documentation are in sync, and readers of commit messages
can evaluate changes completely.

View File

@ -1,8 +1,9 @@
#lang racket #lang s-exp racket
; things to be shared among all sections of the style guide ; things to be shared among all sections of the style guide
(require (for-label racket) (require (for-label racket)
scribble/base
scribble/manual scribble/manual
scribble/struct scribble/struct
(only-in scribble/core table-columns style) (only-in scribble/core table-columns style)
@ -12,10 +13,17 @@
(provide (for-label (all-from-out racket)) (provide (for-label (all-from-out racket))
(all-from-out scribble/manual)) (all-from-out scribble/manual))
(provide compare) (provide
compare ;; create a comparison box for two code snippets
;; good ;; label a code fragment 'good' [doesn't work]
;; bad ;; label a code fragment 'bad' [doesn't work]
rkt rkt/base rkt/gui)
;; compare: two elements, (define (rkt) (racketmodname racket))
(define (rkt/base) (racketmodname racket/base))
(define (rkt/gui) (racketmodname racket/gui))
;; compare: two code snippets, in two columns: left is good, right is bad
(define (compare stuff1 stuff2) (define (compare stuff1 stuff2)
(define stuff (list (list stuff1) (list stuff2))) (define stuff (list (list stuff1) (list stuff2)))
(define space (style #f (list (attributes '((width . "500") (valign . "top")))))) (define space (style #f (list (attributes '((width . "500") (valign . "top"))))))
@ -25,3 +33,35 @@
(attributes '((border . "1") (cellpadding . "10"))) (attributes '((border . "1") (cellpadding . "10")))
(table-columns (make-list (length stuff) space)))) (table-columns (make-list (length stuff) space))))
(apply map (compose make-flow list) stuff))) (apply map (compose make-flow list) stuff)))
;; ===================================================================================================
;; the following doesn't work
;; label a piece of syntax good or bad
(define-syntax-rule
(good form code ...)
(racketmod #:file
(tt "good")
racket
form
code
...))
(define-syntax-rule
(bad form code ...)
(labeled-code
"bad"
form
code
...))
(define-syntax-rule
(labeled-code lbl:string form code ...)
;; ===>
(racketmod
#:file
(tt lbl:string)
racket
form
code
...))

View File

@ -3,9 +3,6 @@
@(require "shared.rkt") @(require "shared.rkt")
@; ----------------------------------------------------------------------------- @; -----------------------------------------------------------------------------
@(define (rkt) @racketmodname[racket])
@(define (rkt/base) @racketmodname[racket/base])
@(define (rkt/gui) @racketmodname[racket/gui])
@title{Some Performance Hints} @title{Some Performance Hints}

View File

@ -103,6 +103,48 @@ racket
...) ...)
] ]
] ]
All of the arguments to a function belong on a single line unless the line
becomes too long, in which case you want to put each argument expression on
its own line
@compare[
@racketmod[#:file
@tt{good}
racket
(place-image img 10 10 background)
(code:comment #, @t{and})
(composition img
(- width hdelta)
(- height vdelta)
bg)
]
@racketmod[#:file
@tt{bad}
racket
(composition ufo-with-flames
10 v-delta bg)
]]
Here is an exception:
@racketmod[#:file
@tt{good}
racket
(overlay/offset (rectangle 100 10 "solid" "blue")
10 10
(rectangle 10 100 "solid" "red"))
]
In this case, the two arguments on line 2 are both short and conceptually
related.
@margin-note{We need more of these rules} @margin-note{We need more of these rules}
@; ----------------------------------------------------------------------------- @; -----------------------------------------------------------------------------