-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.html
94 lines (94 loc) · 4.35 KB
/
index.html
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
<title>WasmFX: Effect Handlers for WebAssembly</title>
<link rel="stylesheet" type="text/css" href="/wasmfx.css">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="icon" href="/favicon.ico" type="image/x-icon">
</head>
<body>
<header class="page-section">
<div class="container-narrow">
<a class="site-logo" href="/"></a>
<h2>Effect Handlers for WebAssembly</h2>
<nav class="site-nav">
<a class="site-nav-item btn" href="/">Overview</a>
<a class="site-nav-item btn" href="/specs">Specs</a>
<a class="site-nav-item btn" href="/community">Community</a>
</nav>
</div>
</header>
<section class="page-section-spacious flush-bottom">
<div class="container-narrow">
<p class="lead">The WasmFX project extends WebAssembly
(abbreviated <i>Wasm</i>) with <i>effect handlers</i> as a
unifying mechanism to enable efficient compilation of
control idioms, such as async/await, generators/iterators,
first-class continuations, etc.
</p>
</div>
</section>
<section>
<div class="container">
<div class="flash flash-warn">
WasmFX is currently being considered as the basis for stack
switching in WebAssembly. The concrete proposal is known
as <a href="https://github.com/WebAssembly/stack-switching/tree/main/proposals/continuations"
style="font-style:italic;">typed continuations</a>. Join the
conversation over at
the <a href="https://github.com/WebAssembly/stack-switching">official
WebAssembly stack switching repository</a>.
</div>
<div class="row">
<div class="bubble col-xs-12 col-md-6">
<h3>Efficient and fast</h3>
<p>WasmFX provides a general and flexible instruction set
for fast stack switching, paving the way for efficient
implementations of various non-local control flow
abstractions, which would otherwise have to be implemented
using whole-program transformations such as continuation
passing style. WasmFX is carefully designed to enable Wasm
to maintain backwards-compatible performance for legacy
programs.</p>
</div>
<div class="bubble col-xs-12 col-md-6">
<h3>Modular and composable</h3>
<p>WasmFX provides a modular and composable basis for
implementing non-local control flow abstractions via
delimited control, as the design draws heavily
on <a href="https://homepages.inf.ed.ac.uk/gdp/publications/Effect_Handlers.pdf">Plotkin
and Pretnar's handlers for algebraic effects</a>. As such
the design is based on strong and well-understood
theoretical foundations; at the same time it also
incorporates the practical lessons learnt during the
previous 30 years of research on delimited control.</p>
</div>
</div>
<div class="row">
<div class="bubble col-xs-12 col-md-6">
<h3>Debuggable and profilable </h3>
<p>WasmFX is designed to preserve the debugging and
profiling experience of WebAssembly. The structure of
WasmFX stacks offers excellent compatibility with popular
formats such as <a href="https://dwarfstd.org/">DWARF
stack unwind tables</a>, enabling WebAssembly
implementations to maintain compatibility with standard
debugging and profiling tools.</p>
</div>
<div class="bubble col-xs-12 col-md-6">
<h3>Minimal and compatible</h3>
<p>WasmFX is designed as a minimal and compatible
extension to WebAssembly for structured non-local control
flow. The extension is minimal in the sense that it
leverages WebAssembly's existing instruction set and type
system. It extends the instruction set with six new
instructions and the type system with a new reference
type.</p>
</div>
</div>
</div>
</section>
</body>
</html>