CBQN is now the primary offline implementation, and can be used everywhere in this repository, except test/dzaima which is specifically for testing with dzaima/BQN. Scripts start with
#! /usr/bin/env bqn in order to look up the user's
For Nix users, nixpkgs now has repositories for several implementations;
cbqn is recommended for general use.
See the subsections below for instructions on specific implementations.
This version of BQN is implemented mainly in BQN itself, but a host language supplies basic functionality and can also replace primitives for better performance. This also allows embedding, where programs in the host language can include BQN code. It fully supports all primitives except a few cases of structural Under (
⌾), and is missing some minor syntax features such as derived 1-modifiers and block returns.
Support in the following languages has been implemented:
-e to execute all remaining arguments directly and print the results. This notebook shows how to run it in an Observable notebook.
C sources are kept in the CBQN repository, but it also depends on bytecode from the BQN sources here. Running
make gets a working copy right away with saved bytecode. Then to use the latest bytecode, call
$ ./BQN genRuntime …/BQN, where
…/BQN points to this repository, and run
genRuntime can also be run with another BQN implementation (the Node.js one works but takes up to a minute), and plain
./genRuntime uses your system's
bqn executable. I symlink
~/bin/bqn so I can easily use CBQN for scripting.
CBQN uses the self-hosted runtime to achieve full primitive coverage, and implements specific primitives or parts of primitives natively to speed them up. This means primitives with native support—including everything used by the compiler—are fairly fast while others are much slower.
dzaima/BQN is an implementation in Java created by modifying the existing dzaima/APL, and should be easy to run on desktop Linux and Android. It may be abandoned as dzaima is now working on CBQN. It has almost complete syntax support but incomplete primitive support: major missing functionality is dyadic Depth (
⚇), Windows (
↕), and many cases of set functions (
⊐⊒∊⍷, mostly with rank >1).
In this repository and elsewhere, dzaima/BQN scripts are called with
#! /usr/bin/env dbqn. This requires an executable file
dbqn somewhere in your path with the following contents:
#! /bin/bash java -jar /path/to/dzaima/BQN/BQN.jar "$@"
If compiled with Native Image,
nBQN can be used directly instead.