Skip to content

jbachurski/fabric

Repository files navigation

Fabric

Developed as part of my Master's thesis, "Breaking records: Language design with structural subtyping".

The project implements a compiler for the Fabric langugage, as presented in the thesis. It relies on structural subtyping, and implements the Warp type inference framework based on a constraint-based formulation of algebraic subtyping given in the thesis. Warp is instantiated for both Fabric and the Star calculus (as presented in "Structuring Arrays with Algebraic Shapes").

Setup

Dependencies

First, install the WebAssembly toolchain – binaryen. For instance, using Homebrew:

brew install binaryen

Unfortunately, Homebrew does not ship a pkg-config file that Dune relies on. One workaround is to create a file /opt/homebrew/lib/pkgconfig/libbinaryen.pc with the following contents:

prefix=/opt/homebrew/Cellar/binaryen/121/
libdir=${prefix}/lib
includedir=${prefix}/include

Name: libbinaryen
Description: Manual entry for homebrew installation of binaryen.
Version: 121
Libs: -L${libdir} -lbinaryen
Cflags: -I${includedir}

The version might have to be adapted based on the one provided by Homebrew.

Build

The project is built using Dune.

Clone the repository and create a local switch for the project:

git clone https://github.com/jbachurski/fabric.git
cd fabric
opam switch create .

Now, you should be able to dune build and dune runtest. To run the compiler, use dune exec fabric, which prints a help message.

Examples

See the tests for now.

About

Breaking records: Language design with structural subtyping

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published