diff options
| author | Marshall Lochbaum <mwlochbaum@gmail.com> | 2021-01-30 20:22:47 -0500 |
|---|---|---|
| committer | Marshall Lochbaum <mwlochbaum@gmail.com> | 2021-01-30 20:22:47 -0500 |
| commit | 99f37de695119fd643b36f373771bcdcc4a626af (patch) | |
| tree | d30db1ea6cfe1dda0685b271f124f968d5accae5 /docs | |
| parent | 5ecf5494573e7c4f554329646edf072e2bd6cb7c (diff) | |
Move direct command-line execution from test/js to docs/bqn.js
Diffstat (limited to 'docs')
| -rwxr-xr-x[-rw-r--r--] | docs/bqn.js | 12 | ||||
| -rw-r--r-- | docs/running.html | 4 |
2 files changed, 14 insertions, 2 deletions
diff --git a/docs/bqn.js b/docs/bqn.js index 406c20f8..c3c2d1ba 100644..100755 --- a/docs/bqn.js +++ b/docs/bqn.js @@ -1,3 +1,5 @@ +#! /usr/bin/env node + "use strict"; // Virtual machine let has = x => x!==undefined; @@ -286,4 +288,14 @@ let fmtErr = (s,e) => { if (typeof module!=='undefined') { bqn.fmt=fmt; bqn.fmtErr=fmtErr; bqn.compile=compile; bqn.run=run; module.exports=bqn; + if (!module.parent) { + let args = process.argv.slice(2); + args.map(a=>{ + try { + console.log(fmt(bqn(a))) + } catch(e) { + console.error('[31m'+fmtErr(Array.from(a),e)+'[39m'); + } + }); + } } diff --git a/docs/running.html b/docs/running.html index 45695dbc..bb1b1fe3 100644 --- a/docs/running.html +++ b/docs/running.html @@ -7,8 +7,8 @@ <h1 id="how-to-run-bqn">How to run BQN</h1> <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>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>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. It can also be called directly from the command line (using Node); in this case each argument is evaluated as BQN code and the result is printed.</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>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> |
