How to run BQN

CBQN is the primary offline implementation. Scripts in this repository start with #! /usr/bin/env bqn in order to look up the user's bqn executable, which is expected to be CBQN.

Third-party packages to build some BQN implementations are available for both Nix and Arch Linux. For general use I recommend cbqn from nixpkgs (Nix) and cbqn-git from the AUR (Arch).

There are many websites where you can run BQN as well. All but Attempt This Online are based on Javascript BQN.

Self-hosted BQN

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 syntax specified so far, and all primitives except a few cases of structural Under (). System value support varies at it's implemented separately in each host.

Support in the following languages has been implemented:

Javascript

The file docs/bqn.js is zero-dependency Javascript, and can be loaded from HTML or Node.js. For command line use, call the Node.js script bqn.js, passing a file and •args, or -e to execute all remaining arguments directly and print the results.

CBQN

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 make again.

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 /CBQN/BQN to ~/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

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 was historically the main implementation, but is now updated only to stay up to date with language changes. 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).

To get an executable that works like CBQN, make a script with the following contents. Scripts may use #! /usr/bin/env dbqn to run with dzaima/BQN specifically, but this is rare now (in this repository, only test/dzaima does it).

#! /bin/bash

java -jar /path/to/dzaima/BQN/BQN.jar "$@"

If compiled with Native Image, nBQN can be used directly instead.

BQN2NGN

BQN2NGN is a prototype implementation in Javascript built to experiment with the langauge. It's now abandoned.