44 lines
1.4 KiB
Racket
44 lines
1.4 KiB
Racket
#lang scribble/doc
|
|
@(require "mz.ss"
|
|
(for-label racket/fasl))
|
|
|
|
@(define fasl-eval (make-base-eval))
|
|
@(interaction-eval #:eval fasl-eval (require racket/fasl))
|
|
|
|
@title[#:tag "fasl"]{Fast-Load Serialization}
|
|
|
|
@note-lib-only[racket/fasl]
|
|
|
|
@deftogether[(
|
|
@defproc[(s-exp->fasl [v any/c] [out (or/c output-port? #f) #f]) (or/c (void) bytes?)]
|
|
@defproc[(fasl->s-exp [in (or/c input-port? bytes?)]) any/c]
|
|
)]{
|
|
|
|
The @racket[s-exp->fasl] function serializes @racket[v] to a byte
|
|
string, printing it directly to @racket[out] if @racket[out] is an
|
|
output port or return the byte string otherwise. The
|
|
@racket[fasl->s-exp] function decodes a value from a byte string
|
|
(supplied either directly or as an input port) that was encoded with
|
|
@racket[s-exp->fasl].
|
|
|
|
The @racket[v] argument must be a value that could be @racket[quote]d
|
|
as a literal, because @racket[s-exp->fasl] essentially uses
|
|
@racket[(compile `(quote ,v))] to encode the value using Racket's
|
|
built-in fast-load format for bytecode.
|
|
|
|
The byte-string encoding produced by @racket[s-exp->fasl] is specific
|
|
to a version of Racket. That is, the resulting byte string can be
|
|
decoded back to @racket[v] only using the same version with which it
|
|
was encoded.
|
|
|
|
@mz-examples[
|
|
#:eval fasl-eval
|
|
(define fasl (s-exp->fasl (list #("speed") 'racer #\!)))
|
|
fasl
|
|
(fasl->s-exp fasl)
|
|
]}
|
|
|
|
@; ----------------------------------------------------------------------
|
|
|
|
@close-eval[fasl-eval]
|