1
1
mirror of https://github.com/anoma/juvix.git synced 2024-12-15 10:03:22 +03:00
juvix/README.org

82 lines
2.6 KiB
Org Mode
Raw Normal View History

2022-03-28 18:32:09 +03:00
* MiniJuvix
#+begin_html
<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>
#+end_html
#+begin_html
<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>
#+end_html
2022-04-08 14:35:04 +03:00
#+begin_html
<a href="https://github.com/heliaxdev/minijuvix/tags">
<img alt="" src="https://img.shields.io/github/v/release/heliaxdev/minijuvix?include_prereleases" />
</a>
#+end_html
2022-03-25 20:10:17 +03:00
** Description
2022-04-08 14:35:04 +03:00
MiniJuvix is a programming language for writing efficient formally-verified
[[https://anoma.network/blog/validity-predicates/][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.
2022-03-25 20:10:17 +03:00
MiniJuvix addresses many issues that we have experienced while trying to
2022-04-08 14:35:04 +03:00
write and deploy decentralized applications present in the ecosystem of
2022-03-25 20:10:17 +03:00
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
[[http://git-scm.com/][Git]] from the
[[https://github.com/anoma/juvix.git][Github repository]]. Then, the
program can be downloaded and installed with the following commands. You
2022-04-08 14:35:04 +03:00
will need to have [[https://haskellstack.org][Stack]] installed.
2022-03-25 20:10:17 +03:00
#+begin_src shell
git clone https://github.com/heliaxdev/minijuvix.git
cd minijuvix
stack install
2022-03-25 20:10:17 +03:00
#+end_src
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=.
Add C code generation backend (#68) * [cbackend] Adds an AST for C This should cover enough C to implement the microjuvix backend. * [cbackend] Add C serializer using language-c library We may decide to write our own serializer for the C AST but this demonstrates that the C AST is sufficient at least. * [cbackend] Declarations will always be typed * [cbackend] Add CPP support to AST * [cbackend] Rename some names for clarity * [cbackend] Add translation of InductiveDef to C * [cbackend] Add CLI for C backend * [cbackend] Add stdbool.h to file header * [cbackend] Allow Cpp and Verbatim code inline * [cbackend] Add a newline after printing C * [cbackend] Support foreign blocks * [cbackend] Add support for axioms * [cbackend] Remove code examples * [cbackend] wip FunctionDef including Expressions * [parser] Support esacping '}' inside a foreign block * [cbackend] Add support for patterns in functions * [cbackend] Add foreign C support to HelloWorld.mjuvix * hlint fixes * More hlint fixes not picked up by pre-commit * [cbackend] Remove CompileStatement from MonoJuvix * [cbackend] Add support for compile blocks * [cbackend] Move compileInfo extraction to MonoJuvixResult * [minihaskell] Fix compile block support * [chore] Remove ununsed isBackendSupported function * [chore] Remove unused imports * [cbackend] Use a Reader for pattern bindings * [cbackend] Fix compiler warnings * [cbackend] Add support for nested patterns * [cbackend] Use functions to instantiate argument names * [cbackend] Add non-exhaustive pattern error message * [cbackend] Adds test for c to WASM compile and execution * [cbackend] Add links to test dependencies in quickstart * [cbackend] Add test with inductive types and patterns * [cbackend] Fix indentation * [cbackend] Remove ExpressionTyped case https://github.com/heliaxdev/minijuvix/issues/79 * [lexer] Fix lexing of \ inside a foreign block * [cbackend] PR review fixes * [chore] Remove unused import * [cbackend] Rename CJuvix to MiniC * [cbackend] Rename MonoJuvixToC to MonoJuvixToMiniC * [cbackend] Add test for polymorphic function * [cbackend] Add module for string literals
2022-05-05 16:12:17 +03:00
- To test everything works correctly, you can run the following command. You will need to have [[https://emscripten.org][emscripten]] and [[https://wasmer.io][wasmer]] installed.
2022-03-25 20:10:17 +03:00
#+begin_src shell
stack test
2022-03-25 20:10:17 +03:00
#+end_src
** Usage Example
In the following example a MiniJuvix file is compiled using the C backend. The result is compiled to WASM using [[https://emscripten.org][emscripten]] and then executed using [[https://wasmer.io][wasmer]].
#+begin_src shell
cd tests/positive/MiniC/HelloWorld
minijuvix minic Input.mjuvix | emcc -x c - -o out.wasm && wasmer out.wasm
#+end_src
#+RESULTS:
: hello world!
** Other Documentation
[[docs/developer-tooling.org][Developer Tooling]]
2022-03-25 20:10:17 +03:00
** Community
We would love to hear what you think of MiniJuvix! Join us on
[[https://discord.gg/nsGaCZzJ][Discord]]