13.10 Fast-Load Serialization
(require racket/fasl) | package: base |
procedure
(s-exp->fasl v [ out #:keep-mutable? keep-mutable?]) → (or/c (void) bytes?) v : any/c out : (or/c output-port? #f) = #f keep-mutable? : any/c = #f
procedure
(fasl->s-exp in [ #:datum-intern? datum-intern?]) → any/c in : (or/c input-port? bytes?) datum-intern? : any/c = #t
The v argument must be a value that could be quoted
as a literal—
Like (compile `',v), s-exp->fasl does not preserve graph structure, support cycles, or handle non-prefab structures. Compose s-exp->fasl with serialize to preserve graph structure, handle cyclic data, and encode serializable structures. The s-exp->fasl and fasl->s-exp functions consult current-write-relative-directory and current-load-relative-directory, respectively, in the same way as bytecode saving and loading to store paths in relative form, and they similarly allow and convert constrained srcloc values (see Printing Compiled Code).
Unless keep-mutable? is provided as true to s-exp->fasl, then mutable values in v are replaced by immutable values when the result is decoded by fasl->s-exp. Unless datum-intern? is provided as #f, then any immutable value produced by fasl->s-exp is filtered by datum-intern-literal. The defaults make the composition of s-exp->fasl and fasl->s-exp behave like the composition of write and read.
The byte-string encoding produced by s-exp->fasl is independent of the Racket version, except as future Racket versions introduce extensions that are not currently recognized. In particular, the result of s-exp->fasl will be valid as input to any future version of s-exp->fasl.
> (define fasl (s-exp->fasl (list #("speed") 'racer #\!))) > fasl #"racket/fasl:\0\24\34\3 \1\23\5speed\16\5racer\r!"
> (fasl->s-exp fasl) '(#("speed") racer #\!)
Changed in version 6.90.0.21 of package base: Made s-exp->fasl format version-independent and added the #:keep-mutable? and #:datum-intern? arguments.