aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-04-30 15:19:53 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-04-30 15:19:53 -0400
commita4f6739c204779ae06e31b40858dab55f353f33b (patch)
tree23c64be5bd2411bcbda83039e7a08f4f9ec35ceb /docs
parent1df2979a47cd40ec00d929c26b2aa4b05467069f (diff)
Performance is much better now
Diffstat (limited to 'docs')
-rw-r--r--docs/running.html2
-rw-r--r--docs/try.html3
2 files changed, 2 insertions, 3 deletions
diff --git a/docs/running.html b/docs/running.html
index d94bed9b..457941ce 100644
--- a/docs/running.html
+++ b/docs/running.html
@@ -8,7 +8,7 @@
<p>There are currently two active BQN implementations: the self-hosted one in this repository, and the independent dzaima/BQN. Neither is entirely complete but they are quite capable for pure programming tasks (say, implementing a compiler). dzaima/BQN has good performance while self-hosted is about a thousand times slower. I tend to develop parts of applications in the online REPL and move to dzaima/BQN scripts in order to run them.</p>
<h3 id="bqn">BQN</h3>
<p>The online REPL is <a href="https://mlochbaum.github.io/BQN/try.html">here</a>. The file <a href="https://github.com/mlochbaum/BQN/blob/master/docs/bqn.js">docs/bqn.js</a> is zero-dependency Javascript, and can be loaded from HTML or Node.js. For command line use, call the Node.js script <a href="https://github.com/mlochbaum/BQN/blob/master/bqn.js">bqn.js</a>, passing a file and <code><span class='Value'>•args</span></code>, or <code><span class='Function'>-</span><span class='Value'>e</span></code> to execute all remaining arguments directly and print the results. <a href="https://observablehq.com/@lsh/bqn">This notebook</a> shows how to run it in an Observable notebook.</p>
-<p>The version of BQN in this repository is implemented mainly in BQN itself—the compiler is entirely self-hosted, while the runtime is built from a small number of starting functions using preprocessed BQN. It completely supports the core language except for block headers and multiple body syntax, and a few cases of structural Under (<code><span class='Modifier2'>⌾</span></code>). The Javascript-based compiler is also slow, taking about 0.05 seconds plus 1 second per kilobyte of source (this is purely due to the slow runtime, as dzaima+reference achieves 1ms/kB with the same compiler once warmed up).</p>
+<p>The version of BQN in this repository is implemented mainly in BQN itself—the compiler is entirely self-hosted, while the runtime is built from a small number of starting functions using preprocessed BQN. It completely supports the core language except for block headers and multiple body syntax, and a few cases of structural Under (<code><span class='Modifier2'>⌾</span></code>). The Javascript-based compiler is also slow, taking about 0.01 seconds plus 0.3 seconds per kilobyte of source (this is purely due to the slow runtime, as dzaima+reference achieves 1ms/kB with the same compiler once warmed up).</p>
<p>Because self-hosted BQN requires only a simple virtual machine to run, it is <a href="implementation/vm.html">fairly easy</a> to embed it in another programming language by implementing this virtual machine. The way data is represented is part of the VM implementation: it can use native arrays or a custom data structure, depending on what the language supports. An initial implementation will be very slow, but can be improved by replacing functions from the BQN-based runtime with native code. As the VM system can be hard to work with if you're not familiar with it, I advise you to contact me to discuss this option it you are interested.</p>
<p>In progress VMs are <a href="https://github.com/dzaima/CBQN">CBQN</a> in C, and <a href="https://github.com/cannadayr/ebqn">ebqn</a> in Erlang. Although both of these execute BQN just like the JS version, neither is considered useful for any purpose yet. CBQN is likely to become the main high-performance BQN implementation but is currently only a few times faster than Javascript and has an interface that's only useful for testing. ebqn is extremely slow—hours to compile.</p>
<h3 id="dzaimabqn">dzaima/BQN</h3>
diff --git a/docs/try.html b/docs/try.html
index 865fd36c..8fa61889 100644
--- a/docs/try.html
+++ b/docs/try.html
@@ -32,8 +32,7 @@
<ul>
<li>You can type special characters with a back<em>slash</em> prefix, as shown by hovering over the character bar above. Documentation links for primitives are <a href="doc/primitive.html#functions">here</a>.</li>
<li>Any modifier with enter will execute, not just shift. The code window is vertically resizeable.</li>
- <li>Support for function headers and multiple bodies is missing.</li>
- <li>It's slow, but not <em>that</em> slow: usually most of the time is spent compiling your code, and sometimes from formatting the output. Chrome is faster than Firefox here, and speeds up over a few runs as JIT compilation kicks in.</li>
+ <li>Support for function headers and multiple bodies, and namespaces, is missing.</li>
</ul>
</p>