On Sun, Feb 21, 2021 at 2:35 PM [email protected] <[email protected]> wrote:
>
> #lang web-server is brilliant. This #lang is, in my view, a really excellent 
> example of Racket's take on language-oriented programming. I find that the 
> performance of continuations is just fine, given my limited use of them, and 
> after a while you get used to the limitations and just program around them.

Thanks, a lot of people contributed a ton to it, specifically: Greg
Pettyjohn, John Clements, Joe Marshall, Shriram Krishnamurthi,
Matthias Felleisen.

>
> One thing that always bothers me about #lang web-server, though, is that 
> there are a lot of provisos in the documentation. I'm talking about section 
> 3.2, "Usage Considerations", of 
> https://docs.racket-lang.org/web-server/stateless.html, in the part after 
> "However, there are some considerations you must make." Here a couple of 
> questions:
>
> + " [#lang web-server] will create an immense number of lambdas and 
> structures your program did not normally contain. The performance implication 
> of this has not been studied with Racket."
>
> This seems to me like an interesting research question. Has this question 
> been taken up? I've tried taking a look on Google Scholar for any follow-up. 
> I looked at citations of Jay's "Automatically RESTful web applications" and 
> "The two-state solution: native and serializable continuations accord", but 
> nothing stuck out to me (...which is not to say that there may have missed 
> something).


I never did any more research about this. I think you could take the
traditional Scheme benchmarks ---
https://github.com/racket/racket/tree/master/pkgs/racket-benchmarks/tests/racket/benchmarks/common
--- and add `#lang web-server` to the top and see what happens.

>
> + Some limitations of #lang web-server seem don't seem obviously necessary, 
> at least to someone who's not very familiar with the precise details of the 
> underlying program transformations. You get used to them, but you wonder if 
> there's some accessible world in which they work. For example: "You may not 
> use parameterize, because parameterizations are not serializable." Is that 
> inherently so (that is, there's no way around that, no matter how clever you 
> tweak the program transformations on which #lang web-server rests), or is 
> that just a conequence of the particular approach taken (maybe it's possible, 
> but no one has done it yet). Has there been any fresh thinking about these 
> limitations?

In some sense, everything is possible, because we can just change the
way the VM works... the existing `#lang web-server` is designed to
never require modifications down there. In the case of `parameterize`,
the problem is a matter of security. Consider the following program:

```
#lang racket
(define p (make-parameter #t))
(define (launch-the-missiles!)
 (when (p) .....))
(define (run-code-downloaded-from-youtube f)
 (parameterize ([p #f]) (f)))
```

We don't want the code from YouTube to be able to launch the missiles.
Suppose that parameterizations were serializeable, then the YouTube
code could be something like:

```
(lambda ()
 (call-with-parameterization
  (read (with-input-string (hack-the-planet (with-output-to-string
(lambda () (write (current-parameterization)))))
  launch-the-missiles!))
```

where `hack-the-planet` changes the `#f` to `#t`. That's why you can't
inspect parameterizations or enumerate the keys in a continuation mark
set.

In general, all of the limitations of `#lang web-server` are because
of things like this.

Jay

--
Jay McCarthy
Associate Professor @ CS @ UMass Lowell
http://jeapostrophe.github.io
Vincit qui se vincit.

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CAJYbDam9-SkkRrKQSWzmAUuJTf0%3D5wAXOjJDAY0aaDe95XK-Wg%40mail.gmail.com.

Reply via email to