Giter Site home page Giter Site logo

itchibon777 / juvix Goto Github PK

View Code? Open in Web Editor NEW

This project forked from anoma/juvix

0.0 2.0 0.0 1.61 MB

A more elegant language for a more civilized age.

Home Page: https://juvix.org

License: GNU General Public License v3.0

Haskell 80.63% Shell 0.33% Makefile 0.29% Idris 3.20% Common Lisp 7.38% Agda 7.38% Dockerfile 0.09% TypeScript 0.64% Python 0.06%

juvix's Introduction

Juvix

Tardigrade
(Aditya via Wikimedia Commons, CC-BY-SA 3.0)

GitHub Build status GitHub issues

Overview

Juvix synthesizes a high-level frontend syntax, dependent-linearly-typed core language, and low-level parallelisable optimally-reducing execution model into a single unified stack for writing formally verifiable, efficiently executable smart contracts which can be deployed to a variety of distributed ledgers.

Juvix's compiler architecture is purpose-built from the ground up for the particular requirements and economic trade-offs of the smart contract use case โ€” it prioritises behavioural verifiability, semantic precision, and output code efficiency over compilation speed, syntactical familiarity, and backwards compatibility with existing blockchain virtual machines.

Please note: the frontend language is not yet implemented as we are still working out some details of the type theory & compiler transformations. Juvix may end up supporting an existing frontend language (or more than one).

For details, see the language reference.

Caveats

This is pre-alpha software released for experimentation & research purposes only.

Do not expect API stability. Expect bugs. Expect divergence from canonical protocol implementations.

Formal verification of various properties of the Juvix language & compiler in Agda is in progress but not yet complete.

No warranty is provided or implied.

Juvix is presently executed by a resource-tracing interpreter.

Backends for the EVM, WASM, Michelson, and LLVM are planned but not yet implemented.

Contributing

See CONTRIBUTING.md.

Installation

Requirements

The following are required:

Instructions for Linux

  • Stack
    • For Ubuntu/Debian : apt install stack
    • For Arch Linux : pacman -S stack
  • Z3
    • make build-z3 while in the juvix directory
  • libsecp256k1
    • For Ubuntu/Debian : apt install libsecp256k1-dev
    • For Arch Linux : pacman -S libsecp256k1
  • Openssl Libssl API
    • For Ubuntu/Debian : apt install libssl-dev
    • For Arch Linux : pacman -S openssl
  • LLVM9
    • For Arch Linux : pacman -S llvm

Building

Build Juvix and install the binary to the local path with:

make

Building with optimisations

For full optimisations (but slower compile times):

make build-opt

Usage

Juvix is not yet production-ready. You can play around with some functionality in an interactive REPL:

juvix interactive

Development

Ormolu required for source formatting.

Quicklisp and sbcl required for the automatic generation of documentation in doc/Code.

To open a REPL with the library scoped:

make repl-lib

To open a REPL with the executable scoped:

make repl-exe

juvix's People

Contributors

a-manning avatar alexfmpe avatar andy-morris avatar cwgoes avatar itchibon777 avatar mariari avatar snyk-bot avatar thealmarty avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.