Microcontroller Port of CBQN
Go to file
dzaima f9a8eb0ce3 static noinline apparently results in argument slots being optimized out
but that means that the arguments between the two won't align, resulting in unnecessary 'mov's
2022-06-03 02:51:09 +03:00
docs profiler 2022-05-29 22:02:50 +03:00
include bqn_type 2022-05-29 18:46:59 +03:00
SingeliClone@4a4cee084d pull latest singeli 2022-05-07 15:28:30 +03:00
src static noinline apparently results in argument slots being optimized out 2022-06-03 02:51:09 +03:00
test bqn_type 2022-05-29 18:46:59 +03:00
.gitignore ffi tests 2022-05-27 23:57:56 +03:00
.gitmodules singeli 2021-10-22 00:17:44 +03:00
cc.bqn 2021-11-03 20:16:04 +02:00
genRuntime Switch from fixed-primitives compiler (c) to variable (cc) 2021-12-16 14:29:19 -05:00
genRuntimeSrc fix genRuntimeSrc 2021-12-28 00:07:08 +02:00
LICENSE license 2021-04-20 14:26:56 +03:00
makefile fix wasm builds 2022-05-29 22:05:04 +03:00
precompiled.bqn remove old t= 2022-04-27 21:29:53 +03:00
README.md note FFI=0 2022-05-30 14:57:45 +03:00
SingeliMake.bqn singeli 2021-10-22 00:17:44 +03:00
test.bqn update test.bqn 2021-09-26 23:30:05 +03:00

A BQN implementation in C

CBQN-specific documentationsource code overview

Running

  1. make
    • make CC=gcc if you don't have clang installed
    • make PIE="" on ARM CPUs (incl. Android & M1)
    • make FFI=0 if your system doesn't have libffi (i.e. an error about missing <ffi.h> appears)
    • gmake on BSDs
    • make clean if anything goes bad and you want a clean slate
    • make [...]; sudo make install to install into /usr/local/bin/bqn; sudo make uninstall to uninstall
    • If you want to use custom build types but your system doesn't have shasum/sha256sum, add force_build_dir=some_identifier. That identifier will be used to decide on the directory for incremental build object files.
  2. ./BQN somefile.bqn to execute a file, or rlwrap ./BQN for a REPL

Configuration options

  • some-other-bqn-implementation ./genRuntime path/to/mlochbaum/BQN can be used to avoid pulling precompiled bytecode with git from remotes/origin/bytecode.
    This creates the dummy file src/gen/customRuntime, which will disable automated bytecode retrieval, leading to the bytecode going out-of-sync whenever it needs updating.
    make clean-runtime (which is included in make clean) can be used to reset this to the default state.
  • Different build types:
    • make o3 - -O3, the default build
    • make o3n - -O3 -march=native
    • make o3g - -g -O3
    • make debug - unoptimized debug build
    • make debug1 - debug build without parallel compilation. Useful if everything errors, and you don't want error messages of multiple threads to be written at the same time.
    • make heapverify - verify that refcounting is done correctly
    • make o3n-singeli - a Singeli build, currently only for x86-64 CPUs supporting AVX2
    • make c - a build with no flags, for manual customizing
    • make single-(o3|o3g|debug|c) - compile everything as a single translation unit. Slower for optimized builds, but may allow some more optimizations
  • For any of the above (especially make c), you can add extra flags with f=... (and linker flags with lf=...), e.g.
    make f='-O3 -DSOME_MACRO=whatever -some_other_cc_flag' c
    Macros that you may want to define are listed in src/h.h.
  • A specific build type can be cleaned by adding clean=1 to the make argument list. Similarly, adding builddir=1 will give you the build directory.
  • Tests can be run with ./BQN path/to/mlochbaum/BQN/test/this.bqn (add -noerr if using make heapverify).
  • Test precompiled expression: some-other-bqn-impl ./precompiled.bqn path/to/mlochbaum/BQN "$PATH" '2+2'
  • Some implementation docs

License

Any file without an explicit copyright message is copyright (c) 2021 dzaima, GNU GPLv3 - see LICENSE