Re: compile-time deserialization

Kristian Lein-Mathisen <[email protected]>
Newsgroups gmane.lisp.scheme.chicken
Message-ID <CAAGQtHzOtZ--TZWhE2yGH_+tnjOC44=2e67tRE+Uu-kKN4HH6g@mail.gmail.com>
Hi,

You could try to put everything you're doing with read-string / read /
open-input-file inside syntax. For example:

~/tmp> cat ./compile-time-io.scm
(define file-contents
  (let-syntax
      ((load
        (er-macro-transformer
         (lambda (x r t)
           (import chicken.io chicken.port)
           `(quote
             ,(with-input-from-file
                 "/proc/cpuinfo"
               read-lines))))))
    (load)))

(write file-contents)
(newline)

~/tmp> csc compile-time-io.scm && ./compile-time-io
( "Processor\t: AArch64 Processor rev 14 (aarch64)"
  "processor\t: 0"
  "BogoMIPS\t: 38.40" ... )

~/tmp> grep BogoMIPS ./compile-time-io
grep: ./compile-time-io: binary file matches


K.

On Tue, Dec 26, 2023, 21:07 Al <[email protected]> wrote:

> Hi, suppose I need to reference data from "file.txt" in my Scheme
> program. I could use read-char / read / open-input-file etc (or other
> (chicken io) procedures) to read the the contents of the file into a
> variable.
>
> However, such deserialization happens at run-time. If I compile my
> program into an executable, it will try to open "file.txt" at run-time.
> How can I arrange for "file.txt" to be read at compile-time, and inlined
> into the executable, so that the executable doesn't require access to
> the original file?
>
> The only way I can think of is to convert "file.txt" to a scheme string
> definition in a separate file:
>
> ; file.scm
> (define file-contents " ... ")
>
> and include it via (include "file.scm"). Then the definition would occur
> at compile-time.
>
> But of course this requires encoding (possibly binary) files as scheme
> strings, and probably an extra Makefile step to convert file.txt into
> file.scm. This is not attractive -- are there other options?
>
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.