aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2020-11-21 22:33:47 -0500
committerMarshall Lochbaum <mwlochbaum@gmail.com>2020-11-21 22:33:47 -0500
commita1c2cbe866fb59482391ed2744bbc73f8d6a4360 (patch)
treea59c160393c78c468e65b1c29bc1242436fdaa5b /docs
parent5b712898ece65a1a5a565606813ac4b35387638d (diff)
Update and trim running.md
Diffstat (limited to 'docs')
-rw-r--r--docs/running.html11
1 files changed, 5 insertions, 6 deletions
diff --git a/docs/running.html b/docs/running.html
index 656eca46..368392de 100644
--- a/docs/running.html
+++ b/docs/running.html
@@ -5,12 +5,11 @@
</head>
<div class="nav"><a href="https://github.com/mlochbaum/BQN">BQN</a> / <a href="index.html">main</a></div>
<h1 id="how-to-run-bqn">How to run BQN</h1>
-<p>BQN is in an early stage of development, and no implementation is complete yet. However, it's a relatively simple language to implement, and a few implementations come close. At the moment, dzaima/BQN is the most usable version, with good performance and error reporting.</p>
+<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). For scripting, only dzaima/BQN has the required I/O such as file functions. 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>This repository contains a BQN implementation written mainly in BQN: the bytecode <a href="https://github.com/mlochbaum/BQN/blob/master/src/c.bqn">compiler</a> is completely self-hosted, and the <a href="https://github.com/mlochbaum/BQN/blob/master/src/r.bqn">majority of the runtime</a> is written in BQN except that it is allowed to define primitives; some preprocessing turns the primitives into identifiers. The remaining part, a VM, can be implemented in any language to obtain a version of BQN running in that language. A <a href="https://github.com/mlochbaum/BQN/blob/master/docs/bqn.js">Javascript implementation</a> allows BQN to be run as a <a href="https://mlochbaum.github.io/BQN/try.html">client-side REPL</a> or in Node.js as a library.</p>
-<p>The bytecode is also the same as dzaima/BQN's format, and <a href="https://github.com/mlochbaum/BQN/blob/master/dc.bqn">an extension</a> to the compiler adjusts the slightly different block declarations to target dzaima+reference BQN. There is also <a href="https://github.com/mlochbaum/BQN/blob/master/wc.bqn">an earlier experiment</a> targetting <a href="https://en.wikipedia.org/wiki/WebAssembly">WebAssembly</a> that works only on a very small subset of BQN.</p>
-<p>This version is not yet suitable for serious programming. The runtime has full error checking but the compiler does not, so syntax errors can go unreported. It does not yet support function headers or multiple bodies. 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>All versions have automated tests in the <a href="https://github.com/mlochbaum/BQN/blob/master/test/">test</a> directory, with the self-hosted version (<a href="https://github.com/mlochbaum/BQN/blob/master/test/js">test/js</a>) and WebAssembly backend (<a href="https://github.com/mlochbaum/BQN/blob/master/test/dz_wasm.js">test/dz_wasm.js</a>) tested with Javascript using Node and the dzaima/BQN backend tested with BQN itself (<a href="https://github.com/mlochbaum/BQN/blob/master/test/dz_comp">test/dz_comp</a>).</p>
+<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 Node.js (it's tested this way), but there isn't any convenient way to use it offline right now.</p>
+<p>This repository contains a version of BQN 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. This version supports all primitives, except that it doesn't have full support for <a href="spec/inferred.html">inferred</a> properties. It's still missing syntax support for function headers or multiple bodies. 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>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>
<h3 id="dzaimabqn">dzaima/BQN</h3>
<p><a href="https://github.com/dzaima/BQN/">dzaima/BQN</a> is an implementation in Java created by modifying the existing dzaima/APL. It should be easy to run on desktop Linux and Android. It is still in development and has almost complete syntax support but incomplete primitive support.</p>
<h3 id="dzaimareference-bqn">dzaima+reference BQN</h3>
@@ -22,4 +21,4 @@
</pre>
<p>The left argument for <code><span class='Value'>•</span><span class='Function'>Import</span></code> or the shell arguments can contain up to two arguments for the script. The first is a file to run, and the second is BQN code to be run after it.</p>
<h3 id="bqn2ngn">BQN2NGN</h3>
-<p><a href="https://github.com/mlochbaum/BQN2NGN">BQN2NGN</a> is a prototype implementation in Javascript build to experiment with the langauge, which is now abandoned. It can be used online <a href="https://mlochbaum.github.io/BQN2NGN/web/index.html">here</a>. Major differences are that it has no Fold and Insert is spelled <code><span class='Modifier'>´</span></code> even though current BQN uses <code><span class='Modifier'>˝</span></code>, that it has a different version of <a href="doc/group.html">Group</a> (<code><span class='Function'>⊔</span></code>), and that it is missing Choose (<code><span class='Modifier2'>◶</span></code>). There are also some spelling differences, with Deduplicate (<code><span class='Function'>⍷</span></code>) spelled with <code><span class='Value'>∪</span></code> and Valences (<code><span class='Modifier2'>⊘</span></code>) spelled with <code><span class='Value'>⍠</span></code>. It is missing value blocks and function headers.</p>
+<p><a href="https://github.com/mlochbaum/BQN2NGN">BQN2NGN</a> is a prototype implementation in Javascript build to experiment with the langauge, which is now abandoned.</p>