1
1
mirror of https://github.com/anoma/juvix.git synced 2025-01-04 13:42:04 +03:00
Juvix empowers developers to write code in a high-level, functional language, compile it to gas-efficient output VM instructions, and formally verify the safety of their contracts prior to deployment and execution.
Go to file
Jonathan Cubides 7e20e5083b
Add initial docs generation website (#119)
* Add docs generation

* [makefile] add serve-docs target
2022-05-20 16:16:16 +02:00
.github/workflows Add initial docs generation website (#119) 2022-05-20 16:16:16 +02:00
app Improve error generation and handling (#108) 2022-05-18 17:10:10 +02:00
assets add integer and string literals 2022-03-15 12:37:33 +01:00
docs Add initial docs generation website (#119) 2022-05-20 16:16:16 +02:00
examples/milestone/ValidityPredicates New target syntax and modular VP examples (#92) 2022-05-06 12:45:09 +02:00
minic-runtime Add minic-runtime for linking without libc (#113) 2022-05-19 09:48:23 +02:00
minijuvix-mode Improve error generation and handling (#108) 2022-05-18 17:10:10 +02:00
minijuvix-stdlib@ad8392f76e [stdlib] update 2022-02-28 18:24:52 +01:00
notes Monomorphization (#70) 2022-05-04 10:50:03 +02:00
src/MiniJuvix Add minic-runtime for linking without libc (#113) 2022-05-19 09:48:23 +02:00
test Add minic-runtime for linking without libc (#113) 2022-05-19 09:48:23 +02:00
tests Add minic-runtime for linking without libc (#113) 2022-05-19 09:48:23 +02:00
.github_changelog_generator v0.1.3 Update CHANGELOG 2022-05-05 18:37:06 +02:00
.gitignore Add initial docs generation website (#119) 2022-05-20 16:16:16 +02:00
.gitmodules [ CI ] Add Haskell Github Action with Stack test and ormolu check 2022-04-04 15:55:15 +02:00
.hlint.yaml Monomorphization (#70) 2022-05-04 10:50:03 +02:00
.pre-commit-config.yaml Add pre-commit, new policy for PRs and removal of dev in the CI#118) 2022-05-20 10:45:03 +02:00
.pre-commit-hooks.yaml [ CI ] New jobs: ormolu and hlint 2022-04-05 19:57:21 +02:00
book.toml Add initial docs generation website (#119) 2022-05-20 16:16:16 +02:00
CHANGELOG.org v0.1.3 Update CHANGELOG 2022-05-05 18:37:06 +02:00
hie.yaml [tests] setup basic testing 2022-02-15 14:12:53 +01:00
LICENSE First commit, initial project template. 2021-09-26 18:59:51 +02:00
Makefile Add initial docs generation website (#119) 2022-05-20 16:16:16 +02:00
package.yaml Add minic-runtime for linking without libc (#113) 2022-05-19 09:48:23 +02:00
README.org [doc] Fix internal link (#116) 2022-05-19 23:05:29 +02:00
stack.yaml bump stackage version and remove allow-newer (#76) 2022-05-04 12:57:42 +02:00

MiniJuvix

<a href="https://github.com/heliaxdev/minijuvix/blob/main/LICENSE"> <img alt="LICENSE" src="https://img.shields.io/badge/license-GPL--3.0--only-blue.svg" /> </a>

<a href="https://github.com/heliaxdev/MiniJuvix/actions/workflows/ci.yml"> <img alt="CI status" src="https://github.com/heliaxdev/MiniJuvix/actions/workflows/ci.yml/badge.svg" /> </a>

Description

MiniJuvix is a programming language for writing efficient formally-verified validity predicates, which can be deployed to various distributed ledgers. This is software released for experimentation and research purposes only. No warranty is provided or implied.

MiniJuvix addresses many issues that we have experienced while trying to write and deploy decentralized applications present in the ecosystem of smart-contracts:

  • the difficulty of adequate program verification,
  • the ceiling of compositional complexity,
  • the illegibility of execution costs, and
  • the lock-in to particular backends.

Quick Start

To install MiniJuvix, you can download its sources using Git from the Github repository. Then, the program can be downloaded and installed with the following commands. You will need to have Stack installed.

git clone https://github.com/heliaxdev/minijuvix.git
cd minijuvix
stack install

If the installation succeeds, you must be able to run the minijuvix command from any location. To get the complete list of commands, please run minijuvix --help.

Testing

Dependencies

The following dependencies are required for the WASM compiler tests.

  • wasmer
  • Clang / LLVM (NB: On macOS the preinstalled clang does not support the wasm target so use brew install llvm instead for example)
  • wasi-sdk
  • wasm-ld - the LLVM linker for WASM (NB: On linux you may need to install the lld package, on macOS this is installed as part of llvm).

To install wasi-sdk you need to download libclang_rt and wasi-sysroot precompiled archives from the wasi-sdk release page and:

  1. Extract the libclang_rt.builtins-wasm32-wasi-*.tar.gz archive in the clang installation root (for example /usr/lib/clang/13 on Ubuntu or `brew --prefix llvm` on macos).

    For example on macos with homebrew clang:

    cd `brew --prefix llvm`
    curl https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-15/libclang_rt.builtins-wasm32-wasi-15.0.tar.gz -OL
    tar xf libclang_rt.builtins-wasm32-wasi-15.0.tar.gz
  2. Extract the wasi-sysroot-*.tar.gz archive on your local system and set WASI_SYSROOT_PATH to its path.

    For example:

    cd ~
    curl https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-15/wasi-sysroot-15.0.tar.gz -OL
    tar xf wasi-sysroot-15.0.tar.gz
    export WASI_SYSROOT_PATH=~/wasi-sysroot

Running

Run tests using:

stack test

To run tests, ignoring all the WASM tests:

stack test --ta '-p "! /slow tests/"'

Usage Example

In the following example a MiniJuvix file is compiled using the C backend. The result is compiled to WASM using Clang and then executed using wasmer.

NB: Set the WASI_SYSROOT_PATH environment variable to the root of the WASI sysroot. See Dependencies for instructions on how to install the sysroot.

cd tests/positive/MiniC/HelloWorld
minijuvix minic Input.mjuvix | clang --target=wasm32-wasi -nodefaultlibs -lc --sysroot $WASI_SYSROOT_PATH -I../../../../minic-runtime/libc -x c - -o out.wasm && wasmer out.wasm
hello world!

Other Documentation

Community

We would love to hear what you think of MiniJuvix! Join us on Discord