aboutsummaryrefslogtreecommitdiff
path: root/readme.md
blob: 6e4e68641e724d8ece1196c775cc5018cf0acde9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# BLoCade

[BLoC](https://github.com/marvinborner/bloc) is a file format for shared
binary lambda calculus (BLC).

BLoCade, the BLoC-aid, turns BLoC files back into executable files
(targets). This is useful for [bruijn](https://bruijn.marvinborner.de)
(see [wiki](https://bruijn.marvinborner.de/wiki/coding/compilation/)),
benchmarking, or general term optimization.

## Targets

-   BLC (sharing by abstraction): Terms having BLoC entry indices get
    abstracted and applied to the respective term. The indices get
    converted to De Bruijn indices. The dependency graph is resolved by
    a topological sort. Flag `bblc` (bits) and `blc` (ASCII 0/1).
-   BLC (unshared): Every BLoC entry gets reinserted into the original
    term. Do not use this if you want efficiency or small files. Flag
    `unbblc` (bits) and `unblc` (ASCII 0/1).
-   Planned: [Effekt](https://effekt-lang.org), Scala, HVM, C, NASM,
    LLVM, JS, Haskell

## Benchmarks

To be evaluated.