`raco exe ++lang pollen`?

Let’s say I have a source file like this:

#lang racket
(require racket/runtime-path pollen/core)
(define-runtime-path html-pm "index.html.pm")
(displayln (get-core html-pm))

If I compile this using raco exe, with ++lang pollen or ++lang pollen/markup supplied, an exception will be raised.

raco exe: cannot extract module language
  language: pollen
  info field not available: 'module-language

I’ve read part of source codes of the pollen project. It seems to me that the pollen language implements a reader submodule initialized with racket/base. But I wonder if the language’s reader implements a get-info function that supports the 'module-language key, which is used by raco exe according to the documentation, and how I can make this work properly.

I haven’t used raco exe at all but I pushed an update with a 'module-language key with value pollen, and your example seems to work now.

1 Like

I’ve successfully built the executable now. But I get another exception when I try running the executable.

$ ./test
.../private/reader-base.rkt:57:20: collection not found
  for module path: pollen/private/runtime-config
  collection: "pollen/private"
  in collection directories:
  compilation context...:
   /home/zhanghao/index.html.pm
  location...:
   .../private/reader-base.rkt:57:20
  context...:
   .../private/cm-minimal.rkt:696:0: compile-zo*
   .../private/cm-minimal.rkt:452:15
   .../private/cm-minimal.rkt:441:12: build
   .../private/cm-minimal.rkt:412:0: maybe-compile-zo
   .../private/cm-minimal.rkt:210:0: compile-root
   .../private/cm-minimal.rkt:105:4
   .../private/cache-utils.rkt:67:0: path->hash
   .../private/cache-utils.rkt:124:2: generate-dest-file
   .../file/cache.rkt:63:2: fetch-and-continue
   .../private/arrow-val-first.rkt:555:3
   .../private/cache-utils.rkt:114:0: cache-ref!
   .../private/more-scheme.rkt:377:2: hash-ref!
   .../pollen/cache.rkt:39:4: cached-require-base
   .../private/arrow-val-first.rkt:489:18
   .../zhanghao/test.rkt:4:0
   body of '#%mzc:test

I’m afraid I have no idea. I’ve never used raco exe.

I read again the documentation of raco exe ++lang and I think we can simply do the same thing as syntax/module-reader.

The language-module identifier is bound to the module-path that is used for the read module’s language as written directly or as determined through #:language.

The default-filtering function passed to the #:info function is intended to provide support for information that syntax/module-reader can provide automatically. Currently, it recognizes only the 'module-language key, for which it returns language-module; it returns the given default value for any other key.

As I understand it, pollen is not used as the read module’s language (namely, the expander handling the syntax object produced by the reader), according to the result of raco expand and the code in reader-base.rkt. But I’m not sure whether there is such a module path. Nevertheless, I sincerely hope these pieces of information can help.

Well, I’ve tried it again and fixed it with ++lib pollen/top ++lib pollen/private/runtime-config. There still leaves a question of safety and stability, though.