1
1
mirror of https://github.com/anoma/juvix.git synced 2024-12-14 17:32:00 +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 fd3622a274
Adds many new features (w.i.p v0.1.2) (#28)
* add references to the syntax and cleanup code

* [make] add .PHONY to Makefile targets

* [parser] add parser / pretty for axiom backends

* Pairing progress

* [scoper] Add support for Axiom backends

* [parser] Fix foreign block parsing

* [ app ] adds --no-colors flag for the scope command

* [ghc] upgrade to ghc 9.2.2

* use GHC2021

* [doc] Remove out-of-date comment

* [test] Add ambiguity tests

* [scoper] Improve resolution of local symbols

* [error] WIP improving ambiguity error messages

* [ clean-up ] new lab folder for experimentation

* [ app ] ixes the lint warning

* [ Termination ] removes Alga dependency

* [error] Add message for ambiguous symbol error

* [error] Add ambiguous module message

* [scoper] Remove ErrGeneric

* [test] Add test to suite

* [test] show diff when ast's are different

* [ lab ] folder organization

* [ Makefile ] add targets with --watch option (stack cmds) and remove unused things

* [ app ] add --version flag and fixed warnings and formatting

* [test] remove fromRightIO to fix ambiguity error

* [test] Add test of shadowing public open

* [scoper] Add visibility annotation for Name

* prepare buildIntoTable

* [ Concrete ] add instance of hashable for refs.

* add InfoTableBuilder effect

* [ scoper ] add InfoTableBuilder effect

* [ CHANGELOG ] updated v0.1.1

* [ README ] org version now

* fix package.yaml

* fix readme

* [microjuvix] implement basic typechecker

* add simple test for MicroJuvix type checker

* fix checking for constructors apps in patterns

* [scope] Move InfoTable to a new module

* [abstract] Make Iden use references instead of Name

* [abstract] Add InfoTable for abstract syntax

* [scoper] Add function clauses to scoped InfoTable

* [abstract] Add InfoTableBuilder for scoped to abstract

* [main] Fix callsites of translateModule

* [doc] Remove empty docs

* [scoper] Update emptyInfoTable with missing field

* rename some functions

* [minihaskell] add compilation to MiniHaskell

* [microjuvix] improve wrong type message

* Add a validity predicate example written in MiniJuvix

* [typecheck] Add error infrastructure for type errors

Add a pretty error for mismatched constructor type in a pattern match

* [test] Adds negative typecheck test for constructor

* [app] Adds microjuvix subcommands for printing / typechecking

* [typecheck] Add error message for ctor match args mistmatch

* [typecheck] Add descriptive messages for remainng errors

* [typecheck] Updates to error message copy

* [typecheck] fix merge conflicts:

* [highlight] add basic support for highlighting symbols

* [minijuvix-mode] add minijuvix-mode and basic description in the readme

* [readme] improve formatting

* automatically detect the root of the project and add --show-root flag

Co-authored-by: Jan Mas Rovira <janmasrovira@gmail.com>
Co-authored-by: Paul Cadman <git@paulcadman.dev>
Co-authored-by: Paul Cadman <pcadman@gmail.com>
2022-04-01 13:00:15 +02:00
.github/workflows fix compilation errors 2021-12-23 11:19:46 +01:00
app Adds many new features (w.i.p v0.1.2) (#28) 2022-04-01 13:00:15 +02:00
assets add integer and string literals 2022-03-15 12:37:33 +01:00
lab v0.1.1 (#15) 2022-03-25 18:16:34 +01:00
minijuvix-mode Adds many new features (w.i.p v0.1.2) (#28) 2022-04-01 13:00:15 +02:00
minijuvix-stdlib@ad8392f76e [stdlib] update 2022-02-28 18:24:52 +01:00
src/MiniJuvix Adds many new features (w.i.p v0.1.2) (#28) 2022-04-01 13:00:15 +02:00
test Adds many new features (w.i.p v0.1.2) (#28) 2022-04-01 13:00:15 +02:00
tests Adds many new features (w.i.p v0.1.2) (#28) 2022-04-01 13:00:15 +02:00
.gitignore delete and ignore .ghci 2021-12-28 17:20:36 +01:00
.gitmodules [stdlib] add MiniJuvix standard library as a submodule 2022-02-03 18:06:59 +01:00
.hlint.yaml [ Makefile ] fixies for make prepare-push target 2021-12-30 09:56:58 -05:00
CHANGELOG.org v0.1.1 (#15) 2022-03-25 18:16:34 +01: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 v0.1.1 (#15) 2022-03-25 18:16:34 +01:00
package.yaml Adds many new features (w.i.p v0.1.2) (#28) 2022-04-01 13:00:15 +02:00
README.org Adds many new features (w.i.p v0.1.2) (#28) 2022-04-01 13:00:15 +02:00
stack.yaml v0.1.1 (#15) 2022-03-25 18:16:34 +01: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 dependently functional programming language for writing efficient formally-verified validity predicates, which can be deployed to various distributed ledgers. This is a 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 decentralised 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 installed Stack.

   $ 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.

  • How to install Stack:? if it's not installed.

    • For Ubuntu : apt install stack
    • For Debian : apt install haskell-stack
    • For Arch Linux : pacman -S stack
    • For macOS : brew install haskell-stack
    • For Windows, following the instructions here.

It is required at least 8GB RAM for stack installation.

  • To test everything works correctly, you can run the following command:
  $ stack test

Emacs mode

There is an emacs mode available for MiniJuvix. Currently it supports syntax highlighting for well-scoped modules. It is a work in progress.

To install it add the following lines to your emacs configuration file:

(push "/path/to/minijuvix/minijuvix-mode/" load-path)
(require 'minijuvix-mode)

Also, minijuvix must be installed in your PATH.

The MiniJuvix major mode will be activated automatically for .mjuvix files.

Keybindings

Key Function Name Description
C-c C-l minijuvix-load Runs the scoper and adds semantic syntax highlighting

Community

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