All Projects → mukul-rathi → Bolt

mukul-rathi / Bolt

Licence: mit
Bolt is a language with in-built data-race freedom!

Programming Languages

ocaml
1615 projects
language
365 projects
types
53 projects

Projects that are alternatives of or similar to Bolt

save
Universal test framework for cli tools [mainly for code analyzers and compilers]
Stars: ✭ 33 (-84.65%)
Mutual labels:  static-analysis, compilers
go-recipes
🦩 Tools for Go projects
Stars: ✭ 2,490 (+1058.14%)
Mutual labels:  static-analysis, compilers
Dingo Hunter
Static analyser for finding Deadlocks in Go
Stars: ✭ 272 (+26.51%)
Mutual labels:  static-analysis, concurrency
Fortran-Tools
Fortran compilers, preprocessors, static analyzers, transpilers, IDEs, build systems, etc.
Stars: ✭ 31 (-85.58%)
Mutual labels:  static-analysis, compilers
Reading
A list of computer-science readings I recommend
Stars: ✭ 1,919 (+792.56%)
Mutual labels:  static-analysis, concurrency
Codeclimate
Code Climate CLI
Stars: ✭ 2,273 (+957.21%)
Mutual labels:  static-analysis
Zio Saga
Purely Functional Transaction Management In Scala With ZIO
Stars: ✭ 200 (-6.98%)
Mutual labels:  concurrency
Ck
Code metrics for Java code by means of static analysis
Stars: ✭ 187 (-13.02%)
Mutual labels:  static-analysis
Detect It Easy
Program for determining types of files for Windows, Linux and MacOS.
Stars: ✭ 2,982 (+1286.98%)
Mutual labels:  static-analysis
Forbidden Apis
Policeman's Forbidden API Checker
Stars: ✭ 216 (+0.47%)
Mutual labels:  static-analysis
Vulny Code Static Analysis
Python script to detect vulnerabilities inside PHP source code using static analysis, based on regex
Stars: ✭ 207 (-3.72%)
Mutual labels:  static-analysis
Syft
CLI tool and library for generating a Software Bill of Materials from container images and filesystems
Stars: ✭ 196 (-8.84%)
Mutual labels:  static-analysis
Woke
✊ Detect non-inclusive language in your source code.
Stars: ✭ 190 (-11.63%)
Mutual labels:  static-analysis
Util
A collection of useful utility functions
Stars: ✭ 201 (-6.51%)
Mutual labels:  concurrency
Pond
Minimalistic and High-performance goroutine worker pool written in Go
Stars: ✭ 187 (-13.02%)
Mutual labels:  concurrency
Intelephense
Intellisense for PHP
Stars: ✭ 212 (-1.4%)
Mutual labels:  static-analysis
Sbt Dependency Check
SBT Plugin for OWASP DependencyCheck. Monitor your dependencies and report if there are any publicly known vulnerabilities (e.g. CVEs). 🌈
Stars: ✭ 187 (-13.02%)
Mutual labels:  static-analysis
Bellybutton
Custom Python linting through AST expressions
Stars: ✭ 196 (-8.84%)
Mutual labels:  static-analysis
Concurrent
Functional Concurrency Primitives
Stars: ✭ 206 (-4.19%)
Mutual labels:  concurrency
Diktat
Strict coding standard for Kotlin and a custom set of rules for detecting code smells, code style issues and bugs
Stars: ✭ 196 (-8.84%)
Mutual labels:  static-analysis

Bolt - Data-Race Freedom Baked In

CircleCI Coverage Status

What, another programming language?

Yep, this one prevents data races! Concurrent code is hard to get right, so let the language take care of it for you! The best part is that you get more fine-grained concurrency than Rust and this language doesn't get in the way when you want to write single-threaded code. Want to write Rusty ownership-style code - yep, you can do that in Bolt too!

For a description of the theory, check out the accompanying dissertation.

Alright so what does this language do?

You can already write a lot of Java-esque code - see examples/ in this repo. Bolt already supports inheritance, method overloading and overriding, and generics. Is Bolt missing something? Comment on this issue - I'm all ears.

Two ways Bolt differs from traditional languages - the capability annotations for fields and function/method type signatures, and a structured approach to concurrency - so you know exactly how long your threads live for:

finish{
  async{ // fork a thread using the async command - you can spawn as many as you like!
    ... // execute an expression in the forked thread
  }
  ... // continue executing your code on current thread

} // all forked threads finish executing here

Wait, how did you build this?

A lot of trial-and-error and experimenting with reverse-engineering C++ code! I'll save you the trouble - step-by-step tutorials for how I built this all are incoming - I'll tweet about them when they drop so follow me on Twitter. Update: all the posts are live.

Unlike your run-of-the-mill compiler tutorials, we'll be talking about more advanced language features too, like generics, inheritance, method overloading and overriding!

Getting started

Bolt's compiler is written in OCaml and C++. You'll need OCaml and opam installed. You'll also need to install Bazel.

Note you don't need to have LLVM installed - just update llvm.bzl to use the right pre-built LLVM Binary, and Bazel will download and extract that binary for you!

Once you have these installed, the Makefile details all the main commands. To get started run these commands!

  • make install - install dependencies
  • make hook - install the git pre-commit hook
  • make build - build the project

To compile a program:

  • scripts/compile_program.sh <filename> <flag> - run a Bolt program (extension .bolt) - pass in the-help flag to see the list of possible flags you can pass in.
  • alias boltc=./scripts/compile_program.sh >> ~/.bashrc

To compile and run the program:

  • scripts/run_program.sh <filename> <flag> - run a Bolt program (extension .bolt) - pass in the-help flag to see the list of possible flags you can pass in.
  • alias bolt=./scripts/run_program.sh >> ~/.bashrc - okay this isn't strictly necessary, but running bolt <filename> to execute a Bolt program is super cool!

Okay, - the boltc and bolt aliasing isn't strictly necessary, but running boltc <filename> to compile and bolt <filename> to run a Bolt program is super cool!

Check out the REPO_OVERVIEW.md file for more details about the project structure.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].