Microsoft Bosque Programming Language

The Bosque programming language is a Microsoft Research project that is investigating language designs for writing code that is simple, obvious, and easy to reason about for both humans and machines.

The key design features of the language provide ways to avoid accidental complexity in the development and coding process.

The result is improved developer productivity, increased software quality, and enable 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 a project in an early state. This was done to enable academic collaboration and community participation. However, 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 anyproduction work and instead encourage experimentation only with small/experimental side projects at this point in time.

Also Read – EfiGuard – Disable PatchGuard and DSE at Boot Time

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 update(point: {x: Int, y: Int, z: Int}, value: Int): {x: Int, y: Int, z: Int} {
return point<~(y=value, x=-point.x);
}
update(@{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;
}

Sign (with optional argument):

function sign(x?: Int): Int {
var! y;
if(x == none || x == 0) {
y = 0;
}
else {
y = (x > 0) ? 1 : -1;
}
return y;
}

Using the Bosque Language

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

Requirements

Windows

In order to build the language for Windows the following are needed:

  • The LTS version of node.js for Windows (x64)
  • Typescript (install with: npm i typescript -g)

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 run-script build && npm test

Command Line Execution

The ref_impl directory contains a simple command line runner for standalone Bosque (.bsq) files. These files must have a single entrypoint function called main() (see some examples). The code in the file can be parsed, type checked, and executed with:

node bin/test/app_runner.js FILE.bsq

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.

R K

Recent Posts

Bomber : Navigating Security Vulnerabilities In SBOMs

bomber is an application that scans SBOMs for security vulnerabilities. So you've asked a vendor…

13 hours ago

EmbedPayloadInPng : A Guide To Embedding And Extracting Encrypted Payloads In PNG Files

Embed a payload within a PNG file by splitting the payload across multiple IDAT sections.…

13 hours ago

Exploit Street – Navigating The New Terrain Of Windows LPEs

Exploit-Street, where we dive into the ever-evolving world of cybersecurity with a focus on Local…

3 days ago

ShadowDumper – Advanced Techniques For LSASS Memory Extraction

Shadow Dumper is a powerful tool used to dump LSASS (Local Security Authority Subsystem Service)…

3 days ago

Shadow-rs : Harnessing Rust’s Power For Kernel-Level Security Research

shadow-rs is a Windows kernel rootkit written in Rust, demonstrating advanced techniques for kernel manipulation…

2 weeks ago

ExecutePeFromPngViaLNK – Advanced Execution Of Embedded PE Files via PNG And LNK

Extract and execute a PE embedded within a PNG file using an LNK file. The…

3 weeks ago