Mon, 28 Jul 2014 13:51:12 -0400 от "Alexander D. Knauth" <[email protected]>: > >On Jul 28, 2014, at 11:41 AM, Roman Klochkov < [email protected] > wrote: > >> I tried to make it with module ..... > >> (require 'm) >> >> Works just fine > >Yes because GENSYM was provided by ‘m, but if it’s a #lang then that doesn’t >matter unless you specifically require >experiment-with-hygenic-reader-extensions/lang/reader. And as I say below, I >shouldn’t have to do that, and I shouldn’t have to provide GENSYM either. >Read macros return source code. So there are no other way. > > >> I'm not very proficient with lang, but you should require module with >> `make-reader' to you last module. >> >> I installed your package via `raco pkg install >> git://github.com/AlexKnauth/experiment-with-hygenic-reader-extensions', but >> >> $ /usr/racket/bin/racket try-it.rkt >> default-load-handler: cannot open module file >> module path: experiment-with-hygenic-reader-extensions/lang/reader >> path: >> /home/monk/.racket/6.0.1/pkgs/experiment-with-hygenic-reader-extensions/experiment-with-hygenic-reader-extensions/lang/reader.rkt >> system error: No such file or directory; errno=2 >> >> Maybe something wrong. > >Hmm, it doesn't do that for me. >But I’m just wondering, when you look at >…/pkgs/experiment-with-hygenic-reader-extensions, does it have >…extensions/langreader.rkt instead of …extensions/lang/reader.rkt ? Yes, >…extensions/langreader.rkt > > >> I think you should add (require (submod >> experiment-with-hygenic-reader-extensions/lang/reader reader)) to try-it. Or >> make another module with make-reader, which will be required by lang and >> result program. > >Well another good thing about hygienic macros and syntax-objects is >encapsulation so that a macro can use GENSYM without having to provide GENSYM, >so that GENSYM does not have visible to the user of the macro. So you >shouldn’t have to add a (require experiment-…/lang/reader) to try-it.rkt. Yes. >Because macros in Scheme/Racket don't build code, they build syntax. But >read-macros build source code (in the meaning of "program text"). Don't know >why, maybe because syntax context, returned by read-syntax should be current >context, not the context of language definition. > > >But for some reason that’s not always working for reader extensions. > >It seems to work when the binding is from racket/base and there’s no local >binding conflicting with it (but module-level bindings conflicting with it are >ok), but not when it’s from a different module other than racket/base? It >always work, when the binding is from current module (if it doesn't require >racket/base, then its bindings won't work also). > > >I don’t know. > >> >> Mon, 28 Jul 2014 11:08:20 -0400 от "Alexander D. Knauth" < >> [email protected] >: >>> Well that works fine when it’s in the same module (or namespace), but when >>> I put it in a #lang, it breaks and I get this error: >>> experiment-with-hygenic-reader-extensions/try-it.rkt: >>> #lang experiment-with-hygenic-reader-extensions >>> $ >>> ; g15667: unbound identifier in module in: g15667 >>> >>> That’s one problem with unhygienic reader extensions. >>> Since you used (datum->syntax #f ‘(GENSYM …)), it eventually took on the >>> lexical context of try-it.rkt, where the GENSYM name isn’t there. >>> >>> Though strangely, if I put some lexical context on GENSYM by using >>> (datum->syntax #f `(,#'GENSYM …)), then it gives me this error: >>> experiment-with-hygenic-reader-extensions-2/try-it.rkt: >>> #lang experiment-with-hygenic-reader-extensions-2 >>> $ >>> ; require: namespace mismatch; >>> ; reference to a module that is not available >>> ; reference phase: 0 >>> ; referenced module: >>> “…/experiment-with-hygenic-reader-extensions-2/lang/reader.rkt" >>> ; referenced phase level: 0 in: g24 >>> >>> https://github.com/AlexKnauth/experiment-with-hygenic-reader-extensions >>> > >> >> >> -- >> Roman Klochkov > -- Roman Klochkov
____________________ Racket Users list: http://lists.racket-lang.org/users

