GithubHelp home page GithubHelp logo

ov1n / bosquelanguage Goto Github PK

View Code? Open in Web Editor NEW

This project forked from microsoft/bosquelanguage

0.0 1.0 0.0 10.7 MB

The Bosque programming language is an experiment in regularized design for a machine assisted rapid and reliable software development lifecycle.

License: Other

TypeScript 93.84% JavaScript 0.15% C++ 5.59% SMT 0.42%

bosquelanguage's Introduction

Bosque Programming Language

Licensed under the MIT License PR's Welcome Build Status

The Bosque programming language is a Microsoft Research project on building the development platform for the future of Cloud and IoT application development. The key design features of the language provide ways to avoid accidental complexity in the language, provide semantics that can be easily reasoned about (with automated tools), and in a package that is approachable for developers. The result is improved developer productivity, increased software quality, and a range of new compilers and developer tooling experiences.

Small samples of code to give a sample flavor are below (Code Snippets). A rundown of notable and/or unique features in the Bosque language is provided in the language overview section 0. For a look at how the language works and flows in the large please see the code for a simple tic-tac-toe program that supports updating the board with user supplied moves, making an automated computer move, and managing the various game state.

Note: This repository and code represent an alpha state. This means that the language is subject to revision, there are bugs and missing functionality, and the performance is limited. Thus, we do not recommend the use of the Bosque language for any production work and instead encourage experimentation only with small/experimental side projects at this point in time.

News

Dec 2019

We have forked off the original v1 version of the language and the master branch is now for the active development of an alpha version!

  1. The language semantics have undergone substantial revisions.
  2. An Ahead-of-Time compiler is now supported to produce native code (WASM support is planned).
  3. A symbolic-tester is provided to augment the use of unit-testing.

Documentation

Code Snippets

Add 2 numbers:

function add2(x: Int, y: Int): Int {
    return x + y;
}

add2(2, 3) //5

All odd check using rest parameters and lambda:

function allOdd(...args: List<Int>): Bool {
    return args->all(fn(x) => x % 2 == 1);
}

allOdd(1, 3, 4) //false

Bulk update properties on Record

function updatePoint(point: {x: Int, y: Int, z: Int}, value: Int): {x: Int, y: Int, z: Int} {
    return point->updatePoint(y=value, x=-point.x);
}

updatePoint({x=1, y=2, z=3}, 5) //{x=-1, y=5, z=3}

Noneable access on optional argument:

function tryGetProperty(r?: {f: Int, k: Int}): Int? {
    return r?.f;
}

tryGetProperty({f=2, k=1}) //2
tryGetProperty()           //none

Sign (with optional argument):

function sign(x?: Int): Int {
    var! y: Int;

    if(x == none || x == 0) {
        y = 0;
    }
    else {
        y = (x > 0) ? 1 : -1;
    }

    return y;
}

sign(5)    //1
sign(-5)   //-1
sign()     //0

Using the Bosque Language

The current focus of the Bosque project is core language design. As a result there is no support for packaging, deployment, lifecycle management, etc.

Requirements

In order to build the language the following are needed:

  • 64 bit Operating System
  • The LTS version of node.js ( According to your OS )
  • Typescript (install with: npm i typescript -g)
  • A C++ compiler -- by default clang on Windows and g++ on Linux/Mac

Build & Test

The ref_impl directory contains the reference implementation parser, type checker, interpreter, and command line runner. In this directory, build and test the Bosque reference implementation with:

npm install && npm test

Note: the Z3 theorem prover is provided as a binary dependency in the repo via git LFS. To ensure these are present you will need to have git LFS installed, run git lfs install to setup the needed hooks, and pull.

Executable Generation

Bosque supports the generation of standalone command-line executables via the ExeGen tool. Details on this tool can be found in the readme.

A simple example use is to create a file called "max.bsq" with the following code:

namespace NSMain;

entrypoint function main(x: Int, y: Int): Int {
    return (x > y) ? x : y;
}

Then run the following command to produce the max.exe (on Windows executable) which can then be invoked with:

> node ref_impl\bin\runtimes\exegen\exegen.js -o max.exe max.bsq

Which will create an executable named max.exe in the current directory.

Running this executable:

> max.exe 1 5

Will output 5.

Symbolic Testing

SymTest is a powerful command line tool for symbolically testing Bosque source code. Details on this symbolic checker can be found in the readme.

A sample application for a division command line calculator would be to create a file called division.bsq with the contents:

namespace NSMain;

entrypoint function main(x: Int, y: Int): Int 
    //requires y != 0;
{
    return x / y;
}

Then run the following command to check for errors:

> node bin\runtimes\symtest\symtest.js division.bsq

Which will report that an error is possible.

Re-running the symbolic tested with model generation on as follows:

> node bin\runtimes\symtest\symtest.js -m division.bsq

Will report that an error is possible when x == 0 and y == 0.

By un-commenting the requires line the tester will assume that the required condition is always satisfied and re-running the tester will now report that the code has been verified up to the bound.

Visual Studio Code Integration

This repository provides basic Visual Studio Code IDE support for the Bosque language (currently limited to syntax and brace highlighting). The installation requires manually copying the full bosque-language-tools/ folder into your user .vscode/extensions/ directory and restarting VSCode.

Contribute

This project welcomes community contributions.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Please refer to Contribution Guidelines for more details.

License

Code licensed under the MIT License.

bosquelanguage's People

Contributors

0xflotus avatar abhinavsagar avatar arkark avatar augustshultz avatar brianwhited avatar catchmareck avatar christopherm99 avatar clegoz avatar datschy avatar dhayalramk avatar emmet-m avatar enhsaihan-d avatar hearot avatar hong4rc avatar jimmyhmiller avatar joelibaceta avatar lonelyenvoy avatar mairwunnx avatar microsoftopensource avatar mrkmarron avatar msftgits avatar narendra-kamath avatar plankp avatar rtoal avatar stephen-oneil avatar terryag avatar thammarith avatar tumevoiz avatar wizofe avatar

Watchers

 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.