Kernel is ideal for creating small embedded languages, where you can selectively expose parts of the parent language to perform general purpose computation, without giving any access to sensitive code.<p>Kernel is like Scheme, except environments are first class objects which you can mutate and pass around. A typical use for such environment is for the second argument of <i>$remote-eval</i>, to limit the bindings available to the evaluator. If you treat an eDSL as a set of symbols representing it&#x27;s vocabulary and grammar, then you bind them to a new environment with <i>$bindings-environment</i>, then passing a piece of code X to eval with this resulting argument as the second environment, will ensure X can only access those bindings (and built-in symbols which result from parsing Kernel, such as numbers), and nothing else.<p>There&#x27;s a function <i>make-kernel-standard-environment</i> for easy self-hosting.<p>Trivial examples:<p><pre><code>    ($define! x 1)
    ($remote-eval (+ x 2) (make-kernel-standard-environment))
    &gt; error: unbound symbol: x

    ($define! y 2)
    ($remote-eval (+ x y) (make-environment ($bindings-&gt;environment (x 1))
                                            (make-kernel-standard-environment)))
    &gt; error: unbound symbol: y

    ($remote-eval (+ x y) ($bindings-&gt;environment (x 1) (y 2) (+ +)))
    &gt; 3

    ($define! x 1)
    ($define! y 2)
    ($remote-eval (+ x y) (get-current-environment))
    &gt; 3
</code></pre>
<i>$remote-eval</i> is a helper function in the standard library which evaluates the second argument in the dynamic environment to get the target environment, then evaluates the first argument in that. The purpose of this is to provide a blank static-environment for o to be evaulated, so no bindings from the current static environment where <i>$remote-eval</i> is called from are made accessible to the first argument.<p><pre><code>   ($define! $remote-eval ($vau (o e) d (eval o (eval e d))))
</code></pre>
If you&#x27;re familiar with Scheme, you may notice the absensce of quote.<p>And contrary to the opinions in the article, Kernel is the most expressively powerful language I know, and I&#x27;d recommend everyone learn it. You have a powerful but small and simple core language, from which you can derive your DSLs with as little or much power as you want them to have.