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.2.0.tar.gz (552.4 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.2.0-cp39-abi3-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.9+Windows x86-64

klvm_tools_rs-0.2.0-cp39-abi3-musllinux_1_1_x86_64.whl (1.6 MB view details)

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

klvm_tools_rs-0.2.0-cp39-abi3-manylinux_2_28_x86_64.whl (1.5 MB view details)

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

klvm_tools_rs-0.2.0-cp39-abi3-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

klvm_tools_rs-0.2.0-cp39-abi3-macosx_13_0_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.9+macOS 13.0+ x86-64

klvm_tools_rs-0.2.0-cp39-abi3-macosx_13_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.9+macOS 13.0+ ARM64

File details

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

File metadata

  • Download URL: klvm_tools_rs-0.2.0.tar.gz
  • Upload date:
  • Size: 552.4 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.2.0.tar.gz
Algorithm Hash digest
SHA256 3e63b0480c456ff8c6b248a53b36ef8f837a9f683eb59ad67c67c168b24c92f7
MD5 4a926a2b4f4313e166655d6ff690e430
BLAKE2b-256 7aa23eb701838104cfcef33a99e63c512f51d7e3f759bf6c9e3ad829a77f4514

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.2.0.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.2.0-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.2.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7ad313379c3bfb7606588df4263ad4aa4859939eecff01f4d326a5df4792b7bb
MD5 6c49441bdc9edca1c4e6e7c4c21e3c6d
BLAKE2b-256 18fec3ccd9c1b31a2500949786e12831360b6a48785b8c8a28aa60e171d285e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.2.0-cp39-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.2.0-cp39-abi3-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.2.0-cp39-abi3-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 ca2a5ae1bcd46cc6c37efd1246e3e34d16361db182cb8551036ba34f1ef826b9
MD5 d65017cc611e2ff0cc6e3aa75b536a7b
BLAKE2b-256 8e6ef89822d76163bb19e7aea9676482f47b3637656f90e4f66a3389a59b325c

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.2.0-cp39-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.2.0-cp39-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.2.0-cp39-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9d1635497be365648990835035b6f064880dd43eb74ca914f6ba246a407b835f
MD5 6229522dc2d32dee3ad6992e613cd763
BLAKE2b-256 cb732850aa6cb11c56fad78d0158e34e6df408ac406c6188de5520b01b2218e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.2.0-cp39-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.2.0-cp39-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.2.0-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d6f0dae07d49421580c99dc516a17100ce5787e59fe6b7c408d347eff69d8add
MD5 72ac1e69db97ed698160280a1c1785c6
BLAKE2b-256 bb7ac3e200c845940d15c7a3c736ff41790b77fe14c9f2c4e9120bfcbbd3b4f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.2.0-cp39-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.2.0-cp39-abi3-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.2.0-cp39-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 69f41509d5f0885bfd5487499636c8fdce3e9debfba849ff44ca8af195079a6c
MD5 9ac8fcd4183f0816e63b5d559948aaf2
BLAKE2b-256 af2f2335c6c8c84f685793c11c54a3e7214eb8bda2c7f48e4652080a1fa42a8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.2.0-cp39-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.2.0-cp39-abi3-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.2.0-cp39-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 9f2d1b25363ff10387ce413519797e0e9b160c794a87ce58e4caa6787e24dd1a
MD5 44e7f5062d5bc388d164941420a93a1e
BLAKE2b-256 3b52d9abd68513777ed544e88ea8dce402ec57e595f665721d4f2dcda74a0700

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.2.0-cp39-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