Skip to content

akawashiro/ml2wasm

Repository files navigation

ml2wasm

A compiler from MinCaml to WebAssembly including reference count gabage collection.

Requirement

To test this compiler, you must install stack and wabt. You can use this compiler without wabt. But, in that case, you can just see outputed WebAssembly and you cannot run it.

wabt is utility for WebAssembly and it contains wat2wasm and wasm-interp. I use these two utility in the test.

How to use

You can build and test this compiler as follows.

% git clone https://github.com/akawashiro/ml2wasm.git
% stack init
% stack solver
% ./testAll.sh

The last two lines following called host host.print(i32:9999999) => are infomation of gabage collection. They shows the number of living object and the size of consumed memory, respectively.

========== add.ml ==========
called host host.print(f32:5.000000) =>
called host host.print(i32:9999999) =>
called host host.print(i32:3) =>
called host host.print(i32:48) =>
main() => i32:132
========== closure.ml ==========
called host host.print(i32:12) =>
called host host.print(i32:9999999) =>
called host host.print(i32:3) =>
called host host.print(i32:52) =>
main() => i32:108
========== fib.ml ==========
called host host.print(i32:1) =>
called host host.print(i32:1) =>
called host host.print(i32:1) =>
called host host.print(i32:2) =>
called host host.print(i32:3) =>
called host host.print(i32:5) =>
called host host.print(i32:8) =>
called host host.print(i32:13) =>
called host host.print(i32:21) =>
called host host.print(i32:34) =>
called host host.print(i32:55) =>
called host host.print(i32:9999999) =>
called host host.print(i32:291) =>
called host host.print(i32:4660) =>
main() => i32:4880
========== fun.ml ==========
called host host.print(f32:20.000000) =>
called host host.print(f32:50.000000) =>
called host host.print(i32:9999999) =>
called host host.print(i32:3) =>
called host host.print(i32:48) =>
main() => i32:104
========== if.ml ==========
called host host.print(f32:10.000000) =>
called host host.print(i32:9999999) =>
called host host.print(i32:2) =>
called host host.print(i32:32) =>
main() => i32:104
========== adder.ml ==========
called host host.print(i32:10) =>
called host host.print(i32:9999999) =>
called host host.print(i32:4) =>
called host host.print(i32:68) =>
main() => i32:104
========== array.ml ==========
called host host.print(i32:1) =>
called host host.print(i32:9999999) =>
called host host.print(i32:6) =>
called host host.print(i32:132) =>
main() => i32:160
========== div.ml ==========
called host host.print(f32:10.000000) =>
called host host.print(i32:9999999) =>
called host host.print(i32:1) =>
called host host.print(i32:16) =>
main() => i32:76
========== float.ml ==========
called host host.print(f32:10.000000) =>
called host host.print(f32:10.000000) =>
called host host.print(i32:9999999) =>
called host host.print(i32:3) =>
called host host.print(i32:48) =>
main() => i32:132
========== nestlet.ml ==========
called host host.print(i32:9999999) =>
called host host.print(i32:4) =>
called host host.print(i32:64) =>
main() => i32:160
========== print.ml ==========
called host host.print(f32:10.000000) =>
called host host.print(i32:9999999) =>
called host host.print(i32:1) =>
called host host.print(i32:16) =>
main() => i32:76
========== tuple.ml ==========
called host host.print(i32:40) =>
called host host.print(i32:9999999) =>
called host host.print(i32:5) =>
called host host.print(i32:88) =>
main() => i32:196

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published