Matthew Flatt writes: > At Sun, 05 Aug 2018 11:40:25 -0400, Christopher Lemmer Webber wrote: >> Eventually I would like to write a multiplayer game in Racket where >> users can write and execute code safely [...] >> >> In a sense, it would sound as if Racket's #lang support would be perfect >> for this. But in fact there is a problem with the #lang approach here: >> while a #lang, once selected, can constrain the language features >> available, the fact that one can select a #lang itself indicates that >> doing "#lang w7" is not the right approach. > > The `get-info` function of `setup/getinfo` may be a useful model of how > to make a constrained `#lang` work for your purposes. > > An "info.rkt" for collection or package info must be written in `#lang > info` to constrain the things that an "info.rkt" file can do. The > requirement to use `#lang info` is enforced by not loading the modules > directly, but by using `get-info`, which checks the module's language > before doing anything interesting (such as expanding the module). > > The implementation has two main parts: > > * Set `current-reader-guard` to ensure that no readers are used other > than the intended language's reader. > > * Check the result of `read-syntax` to make sure it's a module that > uses the right language.
Cool. I'll take a look into that, thanks :) I'm still not sure entirely about how do the module-functionality-endowment bit rather than the module-requiring approach, but I think units might still be the right answer... I'll give it a try. -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.