<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>I can confirm that when I add a get-info function to the Pollen reader, it does work as expected in DrRacket. So perhaps Pollen doesn't "need" to change, but it will ;) Thank you for the help.</div><div><br></div><div>FWIW here's the accumulation of stumbles that led to my mistake:</div><div><br></div><div>+ AFAICT the #lang tutorial in the docs refers to get-info but not read-language. [1] Thus I never knew that read-language existed or what it did.</div><div><br></div><div>+ Based on the tutorial example [1], I had incorrectly concluded that get-info was an arbitrary private name, rather than a special name sought by read-language. </div><div><br></div><div>+ I also didn't appreciate that get-info is mandatory for proper DrRacket compatibility, not optional.</div><div><br></div><div>+ (get-info, of course, is also the name of a function in setup/getinfo [2])</div><div> </div><div>+ When there is no get-info function, DrRacket visually suggests that an error has occurred (red #lang line, no toolbar buttons) but doesn't print the actual error in the window (creating mystery)</div><div><br></div><div>+ You say that DrRacket doesn't cache any #lang information at startup. For whatever reason, I continue to find that relaunching makes a difference (i.e., if the #lang doesn't provide get-info at the beginning of a DrRacket session, adding one *during* the session will not fix the error; it will be noticed only on relaunch). I can't account for this behavior, but I can reliably reproduce it. This issue tripped me up, however, as it made it seem that get-info was not making a difference, so I eliminated it as the solution too soon.</div><div><br></div><div><br></div><div><br></div><div>[1] <a href="http://docs.racket-lang.org/guide/language-get-info.html?q=#lang&q=read-language">http://docs.racket-lang.org/guide/language-get-info.html?q=%23lang&q=read-language</a></div><div><br></div><div>[2] <a href="http://docs.racket-lang.org/raco/getinfo.html?q=get-info&q=#lang&q=read-language#(def._((lib._setup/getinfo..rkt)._get-info))">http://docs.racket-lang.org/raco/getinfo.html?q=get-info&q=%23lang&q=read-language#%28def._%28%28lib._setup%2Fgetinfo..rkt%29._get-info%29%29</a></div><div><br></div><div><br></div><br><div><div>On Jul 20, 2014, at 6:21 PM, Robby Findler <<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Yeah: I think that it is safe to say at this point that pollen doesn't need to change. Either read-language's docs (and various places in DrRacket and libraries) need to change or read-language needs to change and either way pollen will work afterwards. <div>
<br></div><div>My guess is that your language is the only one that doesn't define a get-info function itself but I can't check that theory right now. <br><div><br></div><div>You can probably make pollen work now by supplying a get-info proc that always returns the default value. (See the third and subsequent paragraphs here: <a href="http://docs.racket-lang.org/reference/Reading.html?q=read-language#%28def._%28%28quote._~23~25kernel%29._read-language%29%29">http://docs.racket-lang.org/reference/Reading.html?q=read-language#%28def._%28%28quote._~23~25kernel%29._read-language%29%29</a> ).<br>
<div><br></div><div>Robby<br><br>On Monday, July 21, 2014, Matthew Butterick <<a href="mailto:mb@mbtype.com">mb@mbtype.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
> It appears that read-language can return #f and what DrRacket does in<br>
> that case appears to be what you're seeing. Is that what you're<br>
> getting?<br>
<br>
Your theory seems correct. Yes, Pollen is the only #lang returning #f for read-language, e.g.:<br>
<br>
#lang racket/base<br>
(map<br>
 (λ(lang) (read-language (open-input-string (format "#lang ~a" lang))))<br>
    '(racket racket/base scratchy scribble/manual scribble/text rackjure pollen))<br>
<br>
'(#<procedure:language-info><br>
  #<procedure:language-info><br>
  #<procedure:...atchy/reader.rkt:26:2><br>
  #<procedure:language-info><br>
  #<procedure:language-info><br>
  #<procedure:language-info><br>
  #f)<br>
<br>
<br>
Moreover, if I use your main.rkt, it triggers the same problem in DrRacket (#lang line is red, no toolbar buttons)<br>
<br>
But beyond the issue of whether the docs or DrRacket is doing the right thing with the #f value, I'm unclear why Pollen is returning #f for read-language. One possibly unorthodox thing I'm doing here is that my #lang files rely on macro expansion. For instance, here's Pollen's main.rkt:<br>

<br>
<br>
#lang racket/base<br>
(require pollen/main-base)<br>
(define+provide-module-begin-in-mode world:mode-preproc)<br>
<br>
(module reader racket/base<br>
  (require pollen/reader-base)<br>
  (define+provide-reader-in-mode world:mode-auto))<br>
<br>
<br>
... where `define+provide-module-begin-in-mode` is a macro that creates the #%module-begin macro, and `define+provide-reader-in-mode` is a macro that creates the reader.<br>
<br>
This doesn't bother DrRacket when the file is being run, but perhaps this approach is incompatible with either read-language, or DrRacket's #lang validation?<br>
<br>
<br>
<br>
<br>
<br>
On Jul 20, 2014, at 4:50 PM, Robby Findler <<a href="javascript:;" onclick="_e(event, 'cvml', 'robby@eecs.northwestern.edu')">robby@eecs.northwestern.edu</a>> wrote:<br>
<br>
> It appears that read-language can return #f and what DrRacket does in<br>
> that case appears to be what you're seeing. Is that what you're<br>
> getting?<br>
><br>
> The docs say that read-language never returns #f (presumably it is<br>
> allowed to return #f when fail-thunk returns #f, but the relevant<br>
> fail-thunk here doesn't return #f) so I'm not sure if that's a docs<br>
> bug, in which case I should change drracket to cope with it or an<br>
> implementation bug.<br>
><br>
> But if I create a pollen directory, use 'rack pkg --link pollen' to<br>
> set it up and then put main.rkt with this content:<br>
><br>
> #lang racket/base<br>
> (module reader racket/base (provide read-syntax)<br>
>  (define (read-syntax a b)<br>
>     #'(module m racket/base)))<br>
><br>
> then I see this:<br>
><br>
> $  racket<br>
> Welcome to Racket v6.1.0.3.<br>
>> (read-language (open-input-string "#lang pollen"))<br>
> #f<br>
><br>
><br>
> Robby<br>
<br>
<br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</blockquote></div></div></div>
</blockquote></div><br></body></html>