Note that there are some explanatory texts on larger screens.

plurals
  1. POEmbedding a Low Performance Scripting Language in Python
    text
    copied!<p>I have a web-application. As part of this, I need users of the app to be able to write (or copy and paste) very simple scripts to run against their data.</p> <p>The scripts really can be very simple, and performance is only the most minor issue. And example of the sophistication of script I mean are something like:</p> <pre><code>ratio = 1.2345678 minimum = 10 def convert(money) return money * ratio end if price &lt; minimum cost = convert(minimum) else cost = convert(price) end </code></pre> <p>where price and cost are a global variables (something I can feed into the environment and access after the computation). </p> <p>I do, however, need to guarantee some stuff.</p> <ol> <li><p>Any scripts run cannot get access to the environment of Python. They cannot import stuff, call methods I don't explicitly expose for them, read or write files, spawn threads, etc. I need total lockdown.</p></li> <li><p>I need to be able to put a hard-limit on the number of 'cycles' that a script runs for. Cycles is a general term here. could be VM instructions if the language byte-compiled. Apply-calls for an Eval/Apply loop. Or just iterations through some central processing loop that runs the script. The details aren't as important as my ability to stop something running after a short time and send an email to the owner and say "your scripts seems to be doing more than adding a few numbers together - sort them out."</p></li> <li><p>It must run on Vanilla unpatched CPython.</p></li> </ol> <p>So far I've been writing my own DSL for this task. I can do that. But I wondered if I could build on the shoulders of giants. Is there a mini-language available for Python that would do this?</p> <p>There are plenty of hacky Lisp-variants (Even one I wrote on Github), but I'd prefer something with more non-specialist syntax (more C or Pascal, say), and as I'm considering this as an alternative to coding one myself I'd like something a bit more mature.</p> <p>Any ideas?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload