Skip to main content

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

Project description

klvm_tools_rs

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.46.tar.gz (551.8 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.46-cp38-abi3-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.8+Windows x86-64

klvm_tools_rs-0.1.46-cp38-abi3-musllinux_1_1_x86_64.whl (1.7 MB view details)

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

klvm_tools_rs-0.1.46-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.46-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.46-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.46-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.46.tar.gz.

File metadata

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

File hashes

Hashes for klvm_tools_rs-0.1.46.tar.gz
Algorithm Hash digest
SHA256 c4ad8eb51275b4a260ed5e47e8d40e31e42f1ed1d4deef33a388079f6745bf07
MD5 e8a2f5a71b9364f0f20db715c5accde6
BLAKE2b-256 62628c63f90bd622e06815276cd935466ea308cf90df0b78815b972ddd46fdb7

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.46.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.46-cp38-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.1.46-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 561f88677bffde0048e4a7f94d11d3c74d3744e69ca87541376f0a388cebe4a7
MD5 042dbe88852dd874f0ddef17a7ba9cb4
BLAKE2b-256 7724a477b9bafcd761610d650fb2f0be614c1db60789c919ae19b550e4dae74f

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.46-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.46-cp38-abi3-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.1.46-cp38-abi3-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 ccc7cba90b9d56bdddb27b44930a906d64840e0a96d0f91502ebb8f15d1d3a3a
MD5 71527ed10ce169fd06686f96e934a11f
BLAKE2b-256 c834ebe00f6a0c376c92a08dab6d3dfd10a8fd50c1dc633f51bd386645119d2d

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.46-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.46-cp38-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.1.46-cp38-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dec230f4f58101c3c09f7bf453afa6ce082b3d1da34d9876aecab002e3178fed
MD5 8918683feecfe844c2c243f08369f0fe
BLAKE2b-256 54f94538efc1f09f96f146c8c028b9dd77030cd4eba57fa6735aa914ea3cb4ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.46-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.46-cp38-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.1.46-cp38-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 132b5ba2cf0adc3ebe90c892db7025c8e9069798e0188f92dc1018244cf09081
MD5 23ba981d290f12c2e40c79caf9c98344
BLAKE2b-256 4ea549ff3d33cdef5a621877a042f65e3c2d36bd4993a4e3f2809b86dccdf78f

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.46-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.46-cp38-abi3-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.1.46-cp38-abi3-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 d0fde2fc9f872aecf02a8e432390a7fc8f386a81e6d991a8bc3dea8646473244
MD5 2055c53c196944d470ede716655c9736
BLAKE2b-256 689b740a12db38b717e8cd9673d9618a725abd11899871b6e988d541256f7e9c

See more details on using hashes here.

Provenance

The following attestation bundles were made for klvm_tools_rs-0.1.46-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.46-cp38-abi3-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for klvm_tools_rs-0.1.46-cp38-abi3-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 b9925cf4718a0b52ce455295b8f0df475e0eb9183d6276e5014e30a7d3a847c4
MD5 d5817983081c0f3c9a08d477c707ceab
BLAKE2b-256 cb2d8a34a358a6150289f96ef161d303dc581b7a97a8720f92037b38b1a102ee

See more details on using hashes here.

Provenance

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