\item[boxing everything] works with WasmGC + our strategies
\item[polymorphic boxing] works with WasmGC + our strategies
\item[pointer-tagging] works with WasmGC + our strategies
\item[tagged union] works with WasmGC + our strategies
% TODO: add it back ?
%\item[type-passing] ?
\item[runtime monomorphisation] doesn't work easily
\end{description}
\end{frame}
% Formalized compilation
\begin{frame}
@ -352,7 +377,9 @@ iter_print ltwo
\\
Meant as a way to demonstrate the usefulness of \wasm{i31ref} and convinced the WasmGC working group (along with the Guile implementation that came a few months later).\\
\\
Only a fraction of the stdlib externals are provided and the object fragments of the language has not yet been implemented.
Only a fraction of the stdlib externals are provided and the object fragments of the language has not yet been implemented.\\
\\
The first compiler for a functional language targeting WasmGC.
\end{frame}
@ -364,12 +391,13 @@ iter_print ltwo
\\
No real sized programs for now.\\
\\
Classical functional microbenchmarks are two times slower than native OCaml. Jsoo is slower in an unpredictable fashion.\\
Classical functional microbenchmarks are two times slower than native OCaml..\\
\\
Knuth-Bendix: exceptions are slow (100 times slower than native for a raise) and we need to discuss this with the V8 team (in SpiderMonkey they're fast but other extensions are missing).\\
\\
With casts as no-ops we have a 10\% gain.\\
With optimisations and Flambda2 it should be much better.
With optimisations and Flambda2 it should be much better.\\
Jsoo is slower in an unpredictable fashion (up to 40 times)
% TODO: ^ split in many slides ?
\end{frame}
@ -420,3 +448,16 @@ iter_print ltwo
% Symbolic execution
% TODO: ?
\begin{frame}
Contributions:
\begin{itemize}
\item a Wasm backend for OCaml
\item the first compiler for a functional language to WasmGC
\item impact on the GC proposal for Wasm
\item the first Flambda1 semantics
\item a formalized compilation scheme from Flambda1 to WasmGC
\item compilation strategies usable by others compilers (Guile, Wasm\_of\_ocaml)