[racket] GUI, places, exe
Since "test.rkt" refers to "test-place.rkt" only dynamically, `raco
exe` can't tell that "test-place.rkt" needs to be included in the
executable.
You can set up a connection that `raco exe` sees by using
`define-runtime-module-path-index'.
Unfortunately, I see that using a module path index is tricky, because
`dynamic-place` wants a module path instead of a module path index.
(Probably we should improve `dynamic-place`.) the example below shows
how to convert.
test.rkt
--------
#lang racket/gui
(require racket/runtime-path)
(define-runtime-module-path-index test-place "test-place.rkt")
(define test-place-module
;; `dynamic-place` needs a module path, not a module path index:
(let ([n (resolved-module-path-name
(module-path-index-resolve test-place))])
(if (path? n)
n
`(quote ,n))))
(define (main)
(define p
(dynamic-place test-place-module 'worker))
(place-channel-put p 1)
(place-channel-get p))
(main)
At Sat, 15 Feb 2014 18:33:16 +0400, Roman Klochkov wrote:
> test.rkt
> -----
> #lang racket/gui
>
> (define (main)
> (define p
> (dynamic-place "test-place.rkt" 'worker))
> (place-channel-put p 1)
> (place-channel-get p))
>
> (main)
>
> test-place.rkt
> -----
> #lang racket/base
> (require racket/place)
> (provide worker)
>
> (define (worker ch)
> (define in (place-channel-get ch))
> (place-channel-put ch (+ in 1)))
>
> ----
> Run test.rkt in DrRacket. OK. Gives 2.
>
> Create excutable / Distribution. Got test.zip. Unpack it to C:\test. Run
> Fail. Gives
>
> default-load-handler: cannot open module file
> module path: #<path:C:\test\test-place.rkt>
> path: C:\test\test-place.rkt
> system error: File not found; errno=2
> context...:
> standard-module-name-resolver
>
>
> Суббота, 15 февраля 2014, 6:55 -07:00 от Matthew Flatt <mflatt at cs.utah.edu>:
> >At Sat, 15 Feb 2014 16:14:51 +0400, Roman Klochkov wrote:
> >> When I try to use places with racket/gui in one file, it gives me a error,
> >> because of double gui initialization.
> >>
> >> When I use places in separate file via dynamic-place, it works, until I
> make
> >> an executable.
> >> Then the executable requests all sources for my place.rkt, uncluding all
> >> required collects.
> >>
> >> Am I doing something wroing? Please help!
> >
> >Can you provide an example?
> >
> >I tried:
> >
> > x.rkt
> > -----
> > #lang racket/gui
> > (require "y.rkt")
> > (module+ main (go))
> >
> > y.rkt
> > -----
> > #lang racket
> > (provide go)
> > (define (go) (place-wait (place p 10)))
> >
> >and "x.rkt" works both when run directory or as separate executable.
> >
> >In contrast,
> >
> > z.rkt
> > -----
> > #lang racket/gui
> > (define (go) (place-wait (place p 10)))
> > (module+ main (go))
> >
> >fails in both modes (as you report and as expected).
> >
>
>
> --
> Roman Klochkov