[Haskell-cafe] More on the random idea

Andrew Coppin andrewcoppin at btinternet.com
Sat May 26 14:41:19 EDT 2007


Donald Bruce Stewart wrote:
> The #haskell people have been working on this for about 3 years now.
> The result is the 'runplugs' program, which I've talked about in
> previous mails.
>
>     http://www.cse.unsw.edu.au/~dons/code/lambdabot/scripts/RunPlugs.hs
>
> It uses hs-plugins for the evaluation, along with the points about IO
> prevention via type checking, resource limits controlled by the OS, 
> language extension preventions, and a trusted (audited) module base.
>
> The security mechanisms were briefly described in the 2004 hs-plugins
> paper, if I recall, but otherwise, I don't think we've documented the 
> techniques. Maybe we should, as many issues have been encountered over
> the years, further and further constraining the kinds of things that are
> allowed.
>   


For me, the unfortunate thing is that there seems to be no interpreter 
for Haskell written in Haskell. (Except for GHC, which is *huge*.) We 
have a Haskell parser [which is complex beyond usability], but no 
interpreter. It would be nice if one existed, and I'm trying to 
implement one... but on the other hand, one doesn't want to say to 
people "hey, come learn Haskell, try this web interpreter" and then have 
them find it doesn't implement Haskell precisely. So it looks like I'm 
stuck with present technology - and that essentially means GHC. (Other 
compilers? What other compilers??)

As far as I know, hs-plugins works by taking an expression, writing it 
to a file, calling GHC to parse it, transform it to Core, optimise it, 
transform it to STG, optimise it, transform it to C--, optimise it, 
transform it to ANSI C, optimise it, pass it to GCC, compile it, link 
it, and *then* using the GHC runtime linker to load the generated object 
code into memory, type-check it, and, finally, execute it.

OTOH, GHCi just takes an expression, parses it and interprets it. This 
appears to be a *much* more lightweight approach. I have had some 
success in using the GHC API to write a program that is essentially GHCi 
- you type stuff in, it executes it. Now, if I could write a complete 
full-featured HTTP server and feed that into it instead of stdin and 
stdout, I could make a web server for executing Haskell... But, hmm, 
that's not going to happen any time soon.

...or, I could use GHC -e as I described earlier. But I have to look at 
figuring out how to prevent it doing Bad Things. (Lambdabot gives me an 
idea. Write a module that imports all the stuff you might want 
interactively, and process the user-supplied script to make sure it 
doesn't issue any imports, and then you can precisely control what 
functions the code can call.)


Whatever... I'd just like to see an online way to run Haskell, and since 
the Lambdabot webpage still shows no sign of working...



More information about the Haskell-Cafe mailing list