Skip to main content

tools for working with chiklisp language; compiler, repl, python and wasm bindings

Project description

klvm_tools_rs

GitHub Coverage Status Build Crate Build Wheels

PyPI Crates.io

Theory of operation of the modern compiler: ./HOW_CHIKLISP_IS_COMPILED.md

This repo can be installed via cargo

cargo install klvm_tools_rs

or via pip

pip install klvm_tools_rs@git+https://github.com/Chik-Network/klvm_tools_rs.git@e17412032aa7d3b8b1d1f931893fb5802eee626a

Note: pip installs a subset of the tools installed by cargo, including brun, run, opc and opd.

The most current version of the language is in the nightly branch:

[nightly](https://github.com/Chik-Network/klvm_tools_rs/tree/nightly)

To install from a specific branch:

cargo install --no-default-features --git 'https://github.com/Chik-Network/klvm_tools_rs' --branch nightly

To install a git checkout into your current python environment (must be in some kind of venv or conda environment):

git clone https://github.com/Chik-Network/klvm_tools_rs
cd klvm_tools_rs
maturin develop

Install from PYPI:

pip install -i https://pypi.chiknetwork.com/nightlies/ klvm_tools_rs

Most people still compile chiklisp via python. One way to set up compilation in that way is like this:

import json
from klvm_tools_rs import compile_klvm

def compile_module_with_symbols(include_paths,source):
    path_obj = Path(source)
    file_path = path_obj.parent
    file_stem = path_obj.stem
    target_file = file_path / (file_stem + ".klvm.hex")
    sym_file = file_path / (file_stem + ".sym")
    compile_result = compile_klvm(source, str(target_file.absolute()), include_paths, True)
    symbols = compile_result['symbols']
    if len(symbols) != 0:
        with open(str(sym_file.absolute()),'w') as symfile:
            symfile.write(json.dumps(symbols))

The command line tools provided:

- run -- Compiles KLVM code from chiklisp

Most commonly, you'll compile chiklisp like this:

  ./target/debug/run -O -i include_dir chiklisp.clsp

'run' outputs the code resulting from compiling the program, or an error.

- repl -- Accepts chiklisp forms and expressions and produces results
          interactively.
          
Run like:

  ./target/debug/repl
  
Example session:

>>> (defmacro assert items
   (if (r items)
       (list if (f items) (c assert (r items)) (q . (x)))
     (f items)
     )
   )
(q)
>>> (assert 1 1 "hello")
(q . hello)
>>> (assert 1 0 "bye")
failed: CompileErr(Srcloc { file: "*macros*", line: 2, col: 26, until: Some(Until { line: 2, col: 82 }) }, "klvm raise in (8) (())")
>>> 

- cldb -- Stepwise run chiklisp programs with program readable yaml output.

  ./target/debug/cldb '(mod (X) (x X))' '(4)'
  ---
  - Arguments: (() (4))
    Operator: "4"
    Operator-Location: "*command*(1):11"
    Result-Location: "*command*(1):11"
    Row: "0"
    Value: (() 4)
  - Env: "4"
    Env-Args: ()
    Operator: "2"
    Operator-Location: "*command*(1):11"
    Result-Location: "*command*(1):13"
    Row: "1"
    Value: "4"
  - Arguments: (4)
    Failure: klvm raise in (8 5) (() 4)
    Failure-Location: "*command*(1):11"
    Operator: "8"
    Operator-Location: "*command*(1):13"

- brun -- Runs a "binary" program.  Instead of serving as a chiklisp
  compiler, instead runs klvm programs.

As 'brun' from the python code:

$ ./target/debug/run '(mod (X) (defun fact (N X) (if (> 2 X) N (fact (* X N) (- X 1)))) (fact 1 X))'
(a (q 2 2 (c 2 (c (q . 1) (c 5 ())))) (c (q 2 (i (> (q . 2) 11) (q . 5) (q 2 2 (c 2 (c (* 11 5) (c (- 11 (q . 1)) ()))))) 1) 1))
$ ./target/debug/brun '(a (q 2 2 (c 2 (c (q . 1) (c 5 ())))) (c (q 2 (i (> (q . 2) 11) (q . 5) (q 2 2 (c 2 (c (* 11 5) (c (- 11 (q . 1)) ()))))) 1) 1))' '(5)'
120

- opc -- crush klvm s-expression form to hex.

As 'opc' from the python code.

opc '(a (q 2 2 (c 2 (c (q . 1) (c 5 ())))) (c (q 2 (i (> (q . 2) 11) (q . 5) (q 2 2 (c 2 (c (* 11 5) (c (- 11 (q . 1)) ()))))) 1) 1))'
ff02ffff01ff02ff02ffff04ff02ffff04ffff0101ffff04ff05ff8080808080ffff04ffff01ff02ffff03ffff15ffff0102ff0b80ffff0105ffff01ff02ff02ffff04ff02ffff04ffff12ff0bff0580ffff04ffff11ff0bffff010180ff808080808080ff0180ff018080

- opd -- disassemble hex to s-expression form.

As 'opd' from the python code.

opd 'ff02ffff01ff02ff02ffff04ff02ffff04ffff0101ffff04ff05ff8080808080ffff04ffff01ff02ffff03ffff15ffff0102ff0b80ffff0105ffff01ff02ff02ffff04ff02ffff04ffff12ff0bff0580ffff04ffff11ff0bffff010180ff808080808080ff0180ff018080'
(a (q 2 2 (c 2 (c (q . 1) (c 5 ())))) (c (q 2 (i (> (q . 2) 11) (q . 5) (q 2 2 (c 2 (c (* 11 5) (c (- 11 (q . 1)) ()))))) 1) 1))

History

This is a second-hand port of chik's klvm tools to rust via the work of ChikMineJP porting to typescript. This would have been a lot harder to get to where it is without prior work mapping out the types of various semi-dynamic things (thanks, ChikMineJP).

Some reasons for doing this are:

  • Chik switched the klvm implementation to rust: klvm_rs, and this code may both pick up speed and track klvm better being in the same language.

  • I wrote a new compiler with a simpler, less intricate structure that should be easier to improve and verify in the future in ocaml: ochiklisp.

  • Also it's faster even in this unoptimized form.

All acceptance tests i've brought over so far work, and more are being added. As of now, I'm not aware of anything that shouldn't be authentic when running these command line tools from klvm_tools in their equivalents in this repository

  • opc

  • opd

  • run

  • brun

  • repl

argparse was ported to javascript and I believe I have faithfully reproduced it as it is used in cmds, so command line parsing should work similarly in all three versions.

The directory structure is expected to be:

src/classic  <-- any ported code with heritage pointing back to
                 the original chik repo.
                
src/compiler <-- a newer compiler (ochiklisp) with a simpler
                 structure.  Select new style compilation by
                 including a `(include *standard-cl-21*)`
                 form in your toplevel `mod` form.

Mac M1

Use cargo build --no-default-features due to differences in how mac m1 and other platforms handle python extensions.

Use with chik-blockchain

# Activate your venv, then
$ maturin develop --release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

klvm_tools_rs-0.1.48.tar.gz (553.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

klvm_tools_rs-0.1.48-cp38-abi3-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.8+Windows x86-64

klvm_tools_rs-0.1.48-cp38-abi3-musllinux_1_1_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.1+ x86-64

klvm_tools_rs-0.1.48-cp38-abi3-manylinux_2_28_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.28+ x86-64

klvm_tools_rs-0.1.48-cp38-abi3-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.28+ ARM64

klvm_tools_rs-0.1.48-cp38-abi3-macosx_13_0_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.8+macOS 13.0+ x86-64

klvm_tools_rs-0.1.48-cp38-abi3-macosx_13_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.8+macOS 13.0+ ARM64

File details

Details for the file klvm_tools_rs-0.1.48.tar.gz.

File metadata

  • Download URL: klvm_tools_rs-0.1.48.tar.gz
  • Upload date:
  • Size: 553.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for klvm_tools_rs-0.1.48.tar.gz
Algorithm Hash digest
SHA256 c06843139beb107c4415ef04e2aa180605c1e7a32571115713d5afa58f06fd21
MD5 79883f882fe7d626bfe5b586c97b3503
BLAKE2b-256 d5dcd9624e031097135e735aaef6e813b8bdb89d62899e33df3b8f6a564374c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.48.tar.gz:

Publisher: build-test.yml on Chik-Network/klvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file klvm_tools_rs-0.1.48-cp38-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.1.48-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c40cb62c7de525020caf763a4162d58618182f0ff2c44ec184006d103144ec03
MD5 0964c6c458e2ac4418cc641f2ef6163d
BLAKE2b-256 22f95e2cd393fe4df74de42bf77e05f2cc65f78699c62a1cc8a8b7d16253dab0

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.48-cp38-abi3-win_amd64.whl:

Publisher: build-test.yml on Chik-Network/klvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file klvm_tools_rs-0.1.48-cp38-abi3-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.1.48-cp38-abi3-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 9170cc626e13690bed347a80fd2e80d758b0f4d7cbc94dcb22c99a574dfe8335
MD5 df6149a320f5aa5a590c328d597978ae
BLAKE2b-256 6a260662df789471f93bf7b84fad137d27471ade76a1985d5fd2a790bf46099b

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.48-cp38-abi3-musllinux_1_1_x86_64.whl:

Publisher: build-test.yml on Chik-Network/klvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file klvm_tools_rs-0.1.48-cp38-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.1.48-cp38-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ba587fd70f144d6839ec7101690cc877d566d83cbcf7ec4b72bd846c9a5745c9
MD5 0bb31310f9ead11dd42bffc1129f0a21
BLAKE2b-256 be9bab4ecccde5cd532c4dab0829a38ae4c15e7be1f7cdd20a220be926cf35f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.48-cp38-abi3-manylinux_2_28_x86_64.whl:

Publisher: build-test.yml on Chik-Network/klvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file klvm_tools_rs-0.1.48-cp38-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.1.48-cp38-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c67f941e1884f60b396ce71f0ad13e5f35b4a027a385ff600d7f9bf8d4634599
MD5 232c766755b754b633285f74fba8b23c
BLAKE2b-256 6f7da513fbf159d4f34e2908487dc7b3357ded0d018ee9973b53449926fbedd4

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.48-cp38-abi3-manylinux_2_28_aarch64.whl:

Publisher: build-arm64-wheels.yml on Chik-Network/klvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file klvm_tools_rs-0.1.48-cp38-abi3-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.1.48-cp38-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 81ddae2151f4a7e81bcfc76d1e7b07ff3b298d270f7e968511c2d85f1f35d600
MD5 62513daf202afa1be1699c43bea1b70b
BLAKE2b-256 4182c7d6bc457ab5c1a46d65d7c6e342d3c92e3c7b435d56231730291f627d67

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.48-cp38-abi3-macosx_13_0_x86_64.whl:

Publisher: build-test.yml on Chik-Network/klvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file klvm_tools_rs-0.1.48-cp38-abi3-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.1.48-cp38-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 b4aaf463810fa9a91b08c2dec9c79244c1967c0eeed0be14ee0127604047b09f
MD5 66274e751b2336eec31786d49e97a64a
BLAKE2b-256 632fb8818e84758d011d7fc0fddbcf5ba2f32f2907d9aa55415657bdbe5cc1f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.48-cp38-abi3-macosx_13_0_arm64.whl:

Publisher: build-m1-wheel.yml on Chik-Network/klvm_tools_rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page