[racket] examples of hooking a #lang into DrRacket?

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Sun Jul 20 19:23:38 EDT 2014

DrRacket doesn't do anything with packages during startup that's
related to this. It doesn't do anything with the language at startup
either, but it does cache information about the language to avoid
querying the language while you are editing the file. Editing the
"#lang" line invalidates this cache but otherwise DrRacket won't
notice changes to your language's implementation (well, it won't
notice changes that affect thing like the buttons and whatnot that
you're looking for -- running your program is a separate process).

What happens when you do

  (read-language (open-input-port "#lang pollen"))

?

Robby


On Sun, Jul 20, 2014 at 1:21 PM, Matthew Butterick <mb at mbtype.com> wrote:
> That's a helpful clue, but DrRacket still seems to be making some kind of mysterious & negative judgment about the package when it starts up:
>
>
> 1) I created a branch in my github repo called pollen/scratchy that only consists of the file shown below, and switched to that branch.
>
> 2) Consistent with your result, when I launch DrRacket, '#lang pollen' is now black and buttons show up. Scratchy code works. That's promising.
>
> 3) With DrRacket still running, I switch my github branch back to pollen/master.
>
> 4) '#lang pollen' stays black, and buttons still appear, though now it's behaving as pollen. This is good news, but ...
>
> 5) ... when I quit DrRacket and restart (staying on pollen/master), '#lang pollen' is red once again, and no buttons.
>
> 6) Moreover, switching to pollen/scratchy while DrRacket is running does not fix the problem.
>
> 7) But if I quit DrRacket again, staying with pollen/scratchy, and relaunch DrRacket, I return to the state described in step (2).
>
>
> Sorry for the convoluted description. I'm curious if there's some extra package-validation step that DrRacket performs at startup that could account for this behavior, as that seems to be the pattern that triggers the problem.
>
>
>
>
> On Jul 19, 2014, at 11:05 PM, Robby Findler <robby at eecs.northwestern.edu> wrote:
>
>> I did these steps:
>>
>> "raco pkg install scratchy"
>> mkdir pollen
>> raco pkg install --link pollen
>> cat <the code from your message> > pollen/main.rkt
>>
>> and after that, drracket turns #lang pollen black for me.
>>
>> Robby
>>
>>
>> On Sun, Jul 20, 2014 at 12:48 AM, Matthew Butterick <mb at mbtype.com> wrote:
>>> Still having some trouble with this:
>>>
>>> When I use '#lang scratchy' in DrRacket, the #lang line is black and the DrRacket toolbar buttons show up, as they should.
>>>
>>> After some trial & error, what I found is that if I simply change pollen/main.rkt to use the Scratchy parser and reader, like so:
>>>
>>> ;;--------------------------------pollen/main.rkt
>>> #lang racket/base
>>>
>>> (require scratchy/scratchy)
>>> (provide (all-from-out scratchy/scratchy))
>>>
>>> (module reader racket/base
>>>  (require scratchy/reader)
>>>  (provide (all-from-out scratchy/reader)))
>>>
>>>
>>> ... then '#lang pollen' invokes the Scratchy parser & reader correctly (= it will run sample Scratchy code).
>>>
>>> Unfortunately the '#lang pollen' line still shows up in red, and there are still no DrRacket toolbar buttons (and still no error message in the bottom of the window)
>>>
>>> Since a brain transplant hasn't fixed the problem, what else might DrRacket be looking for to validate '#lang pollen'?
>>>
>>>
>>>
>>> On Jul 14, 2014, at 12:53 AM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
>>>
>>>> The most relevant section of the documentation is
>>>>
>>>> http://docs.racket-lang.org/guide/language-get-info.html
>>>>
>>>>
>>>> The Scratchy language is intended to be an example:
>>>>
>>>> https://github.com/mflatt/scratchy
>>>>
>>>>
>>>> You could also check "reader.rkt" as part of
>>>>
>>>> http://queue.acm.org/downloads/2011/racket/6-color/README.txt
>>>> http://queue.acm.org/downloads/2011/racket/6-color/txtadv.rkt
>>>> http://queue.acm.org/downloads/2011/racket/6-color/world.rkt
>>>> http://queue.acm.org/downloads/2011/racket/6-color/lang/color.rkt
>>>> http://queue.acm.org/downloads/2011/racket/6-color/lang/reader.rkt
>>>>
>>>> which is from "Creating Languages in Racket" in "Queue". The
>>>> "reader.rkt" module has the relevant part at the end:
>>>>
>>>> ;; DrRacket asks `get-info' for a 'color-lexer module:
>>>> (require racket/runtime-path)
>>>> (define-runtime-path color-lexer-path "color.rkt")
>>>> (define (get-info in mod line col pos)
>>>>  (lambda (key default)
>>>>    (case key
>>>>      [(color-lexer)
>>>>       (dynamic-require color-lexer-path 'color-lexer)]
>>>>      [else default])))
>>>>
>>>> The Scratchy example is more recent and I think better organized,
>>>> though.
>>>>
>>>>
>>>> At Mon, 14 Jul 2014 00:18:27 -0700, Matthew Butterick wrote:
>>>>> Pollen source files run fine in DrRacket. But the `#lang pollen` line shows up
>>>>> as red (though no error is reported in the bottom of the window) and no toolbar
>>>>> buttons are available. So something is not quite right.
>>>>>
>>>>> I gather that this has something to do with telling DrRacket about
>>>>> language-specific capabilities. [1]
>>>>>
>>>>> However, many of the custom #langs in Racket use the standard #lang s-exp
>>>>> syntax/module-reader, which seems to eliminate these problems from the start.
>>>>>
>>>>> Q: To supplement the documentation, are there particular #langs that show
>>>>> examples of this kind of configuration file?
>>>>>
>>>>> [1]
>>>>> http://docs.racket-lang.org/tools/Language-Specific_Capabilities.html?q=Customiz
>>>>> ing%20DrRacket%u2019s%20Behavior
>>>>
>>>
>>>
>>> ____________________
>>>  Racket Users list:
>>>  http://lists.racket-lang.org/users
>
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users

Posted on the users mailing list.