-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathfeatures.html
More file actions
174 lines (162 loc) · 7.9 KB
/
features.html
File metadata and controls
174 lines (162 loc) · 7.9 KB
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<!DOCTYPE html>
<html>
<head>
<title>MoarVM - A VM for NQP and Rakudo</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/local.css" rel="stylesheet">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container">
<a href="https://github.com/MoarVM/MoarVM"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png" alt="Fork me on GitHub"></a>
<div class="page-header" id="banner">
<h1>MoarVM</h1>
<p class="lead">A VM for NQP And Rakudo</p>
</div>
<nav class="navbar navbar-default" role="navigation">
<ul class="nav navbar-nav">
<li><a href="index.html">Home</a></li>
<li class="active"><a href="features.html">Features</a></li>
<li><a href="roadmap.html">Roadmap</a></li>
<li><a href="releases.html">Releases</a></li>
<li><a href="contributing.html">Contributing</a></li>
</ul>
</nav>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Meta-object Programming</h3>
</div>
<div class="panel-body">
<p>MoarVM provides very little directly - and that's a good thing.
It is not tied to a particular way of doing inheritance, roles,
mixins, method resolution, type-checking, and so forth. Instead,
meta-objects written in a high level language implement the desired
semantics.</p>
<p>What MoarVM <i>does</i> provide is representations: ways of using
and accessing memory. Meta-objects provide a description of the kind
of representation that is needed, and MoarVM does the required work
to compute structures, array storage, and so forth.</p>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Garbage Collection</h3>
</div>
<div class="panel-body">
<p>MoarVM has a generational garbage collector. The young generation
is managed by semi-space copying, making it cheap for objects to die
young. The old generation is broken into sized buckets, with very
large objects being specially handled. Since objects move over their
lifetime, garbage collection is precise. When multiple threads are
running, collection can run in parallel (meaning that the world is
stopped, and multiple threads work on the collection job to get
it done more swiftly). There is also support for finalizers.</p>
<p>The GC has undergone stress-testing, including doing Rakudo
builds with collection runs after every object allocation and
using many memory-protected past fromspaces in order to catch a
wide range of possible bugs. While of course this is not a proof
that no bugs remain, it does mean they've been left little room
to hide.</p>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Language Feature Support</h3>
</div>
<div class="panel-body">
<p>The usual range of mathematical and string operations are on
offer. Other features worth mentioning are:</p>
<ul>
<li>First-class code objects</li>
<li>Lexical variables and closures</li>
<li>Exceptions, with resumption support</li>
<li>Single-shot continuations</li>
<li>I/O (files, pipes, sockets), and a range of file system and
process operations</li>
<li>Big integers</li>
<li>Taking references to native lexicals, attributes, and array
elements</li>
<li>Runtime loading/evaluation of code</li>
<li>Bounded serialization</li>
<li>Native calling, passing pointers, arrays, structs, and
callbacks</li>
<li>Threads, mutexes, conditional variables, semaphores and
concurrent blocking queues</li>
<li>Asynchronous sockets, timers, signal handlers, file system
notifications, and processes</li>
</ul>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Dynamic Optimization and JIT Compilation</h3>
</div>
<div class="panel-body">
<p>Hot code is detected and optimized. On x64, much hot code can also be
JIT-compiled into machine code. The optimizer specializes code by the
number and types of incoming arguments. Since de-optimization is also
available, speculative optimizations can be performed. Small routines
called by hot code may be inlined, and hot loops are detected and
replaced with an optimized version (known as On Stack Replacement).</p>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Unicode</h3>
</div>
<div class="panel-body">
<p>MoarVM includes the Unicode 15 database, and can do property
lookups (such as those required in regular expression matching),
character and sequence resolution by name, case change operations,
comparisons using the Unicode Collation Algorithm, etc. Strings
work at grapheme level. MoarVM strings are opaque, and there is
no confusion between strings and bunches of bytes. It makes no
sense to ask for a string's encoding; rather, a string can be
turned into a bunch of bytes using an encoding.</p>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">MoarVM AST</h3>
</div>
<div class="panel-body">
<p>MoarVM has no official assembly language, and at present no
known unofficial assembler. Provided a compiler is written using
the NQP compiler toolchain (which NQP and Rakudo are), then
code can be generated by producing a MAST data structure.</p>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Profiling support</h3>
</div>
<div class="panel-body">
<p>MoarVM supports instrumented profiling for precise runtime and
allocation profiling, and heap snapshots for memory use profiling
and leak hunting.</p>
</div>
</div>
<footer>
<div class="row">
<div class="col-lg-12">
<p>Site maintained by the MoarVM team.</p>
<p>Based on <a href="http://getbootstrap.com" rel="nofollow">Bootstrap</a>,
with theme from <a href="http://bootswatch.com/">Bootswatch</a>. Icons from
<a href="http://fortawesome.github.io/Font-Awesome/" rel="nofollow">Font Awesome</a>.
Web fonts from <a href="http://www.google.com/webfonts" rel="nofollow">Google</a>.
</div>
</div>
</footer>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://code.jquery.com/jquery.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/bootstrap.min.js"></script>
</body>
</html>