2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml">
6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
7 <title>meta meta meta meta</title>
8 <meta name="generator" content="S5" />
9 <meta name="version" content="S5 1.0" />
10 <meta name="presdate" content="20041007" />
11 <meta name="author" content="Eric A. Meyer" />
12 <link rel="stylesheet" href="ui/slides.css" type="text/css" media="projection" id="slideProj" />
13 <link rel="stylesheet" href="ui/opera.css" type="text/css" media="projection" id="operaFix" />
14 <link rel="stylesheet" href="ui/print.css" type="text/css" media="print" id="slidePrint" />
15 <script src="ui/slides.js" type="text/javascript"></script>
20 <div id="currentSlide"></div>
21 <div id="header"></div>
24 <h2>nothingmuch@woobling.org</h2>
25 <div id="controls"></div>
30 <h1>Object Meta Programming</h1>
31 <h2>YAPC::EU::2007</h2>
38 <img name="img" id="img" width="350" src="images/promopi.jpg" align=right>
43 <h2>My name is Yuval</h2>
51 <img name="img" id="img" width="350" src="images/7104_Squares_with_Concentric_Circles_Kandinsky_Wassily.jpg" align=right>
52 <h1>Meta Programming</h1>
63 <img name="img" id="img" width="350" src="images/door.jpg" align=right>
68 <small>continued...</small>
76 <img name="img" id="img" width="350" src="images/door.jpg" align=right>
82 <li>Meta programming</li>
84 <small>continued...</small>
92 <img name="img" id="img" width="350" src="images/door.jpg" align=right>
98 <li>Meta programming</li>
99 <li>writing <em>code</em> which <em>outputs</em> or <em>manipulates</em> <em>code</em></li>
108 <img name="img" id="img" width="350" src="images/manimal.jpg" align=right>
113 <small>continued...</small>
121 <img name="img" id="img" width="350" src="images/manimal.jpg" align=right>
127 <li>string <tt>eval</tt></li>
129 <small>continued...</small>
137 <img name="img" id="img" width="350" src="images/manimal.jpg" align=right>
143 <li>string <tt>eval</tt></li>
144 <li><tt>%::</tt></li>
146 <small>continued...</small>
154 <img name="img" id="img" width="350" src="images/manimal.jpg" align=right>
160 <li>string <tt>eval</tt></li>
161 <li><tt>%::</tt></li>
162 <li>closure generators</li>
164 <small>continued...</small>
172 <img name="img" id="img" width="350" src="images/manimal.jpg" align=right>
178 <li>string <tt>eval</tt></li>
179 <li><tt>%::</tt></li>
180 <li>closure generators</li>
183 <small>continued...</small>
191 <img name="img" id="img" width="350" src="images/manimal.jpg" align=right>
197 <li>string <tt>eval</tt></li>
198 <li><tt>%::</tt></li>
199 <li>closure generators</li>
203 <small>continued...</small>
211 <img name="img" id="img" width="350" src="images/manimal.jpg" align=right>
217 <li>string <tt>eval</tt></li>
218 <li><tt>%::</tt></li>
219 <li>closure generators</li>
231 <img name="img" id="img" width="350" src="images/Flying_Spaghetti_Monster-thumb.jpg" align=right>
236 <small>continued...</small>
244 <img name="img" id="img" width="350" src="images/Flying_Spaghetti_Monster-thumb.jpg" align=right>
250 <li>Home grown snippets</li>
252 <small>continued...</small>
260 <img name="img" id="img" width="350" src="images/Flying_Spaghetti_Monster-thumb.jpg" align=right>
266 <li>Home grown snippets</li>
267 <li>Home grown packages</li>
269 <small>continued...</small>
277 <img name="img" id="img" width="350" src="images/Flying_Spaghetti_Monster-thumb.jpg" align=right>
283 <li>Home grown snippets</li>
284 <li>Home grown packages</li>
285 <li>Stuff on the CPAN (e.g. <tt>Class::Accessor</tt>, <tt>Code::Perl</tt>)</li>
287 <small>continued...</small>
295 <img name="img" id="img" width="350" src="images/Flying_Spaghetti_Monster-thumb.jpg" align=right>
301 <li>Home grown snippets</li>
302 <li>Home grown packages</li>
303 <li>Stuff on the CPAN (e.g. <tt>Class::Accessor</tt>, <tt>Code::Perl</tt>)</li>
304 <li>Large systems (<tt>Template::Toolkit</tt>)</li>
313 <img name="img" id="img" width="350" src="images/16_peer_pressure_smoking.gif" align=right>
319 <li>You should already know it</li>
320 <li>You probably do it</li>
322 <small>continued...</small>
330 <img name="img" id="img" width="350" src="images/16_peer_pressure_smoking.gif" align=right>
336 <li>You should already know it</li>
337 <li>You probably do it</li>
338 <li>That's the intended audience anyway ;-)</li>
348 <h1>Object Meta Programming</h1>
357 <h1>Object Meta Programming</h1>
358 <small>continued...</small>
367 <h1>Object Meta Programming</h1>
369 <li>Code that outputs or manipulates <em>object oriented code</em></li>
371 <small>continued...</small>
380 <h1>Object Meta Programming</h1>
382 <li>Code that outputs or manipulates <em>object oriented code</em></li>
383 <li>Often written in OO</li>
392 <img name="img" id="img" width="350" src="images/ApplePieSlice.jpg" align=right>
393 <h1>Simple Examples</h1>
397 <small>continued...</small>
405 <img name="img" id="img" width="350" src="images/ApplePieSlice.jpg" align=right>
406 <h1>Simple Examples</h1>
411 <li><tt>Class::Accessor</tt>, <tt>Class::InsideOut</tt></li>
413 <small>continued...</small>
421 <img name="img" id="img" width="350" src="images/ApplePieSlice.jpg" align=right>
422 <h1>Simple Examples</h1>
427 <li><tt>Class::Accessor</tt>, <tt>Class::InsideOut</tt></li>
430 <li>Generates accessor methods</li>
432 <small>continued...</small>
440 <img name="img" id="img" width="350" src="images/ApplePieSlice.jpg" align=right>
441 <h1>Simple Examples</h1>
446 <li><tt>Class::Accessor</tt>, <tt>Class::InsideOut</tt></li>
449 <li>Generates accessor methods</li>
451 <li><tt>Class::Prototyped</tt></li>
453 <small>continued...</small>
461 <img name="img" id="img" width="350" src="images/ApplePieSlice.jpg" align=right>
462 <h1>Simple Examples</h1>
467 <li><tt>Class::Accessor</tt>, <tt>Class::InsideOut</tt></li>
470 <li>Generates accessor methods</li>
472 <li><tt>Class::Prototyped</tt></li>
475 <li>Prototype object support in Perl</li>
477 <small>continued...</small>
485 <img name="img" id="img" width="350" src="images/ApplePieSlice.jpg" align=right>
486 <h1>Simple Examples</h1>
491 <li><tt>Class::Accessor</tt>, <tt>Class::InsideOut</tt></li>
494 <li>Generates accessor methods</li>
496 <li><tt>Class::Prototyped</tt></li>
499 <li>Prototype object support in Perl</li>
501 <li>Lots of stuff on the CPAN</li>
510 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
515 <small>continued...</small>
523 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
529 <li>High level object meta programming</li>
531 <small>continued...</small>
539 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
545 <li>High level object meta programming</li>
548 <li>The current trend</li>
550 <small>continued...</small>
558 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
564 <li>High level object meta programming</li>
567 <li>The current trend</li>
568 <li>The picture illustrates an object modelling with class =)</li>
570 <small>continued...</small>
578 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
584 <li>High level object meta programming</li>
587 <li>The current trend</li>
588 <li>The picture illustrates an object modelling with class =)</li>
589 <li>Seriously though...</li>
598 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
604 <li>High level object meta programming</li>
605 <li>What is a class?</li>
607 <small>continued...</small>
615 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
621 <li>High level object meta programming</li>
622 <li>What is a class?</li>
624 <pre class="vim"> class Class {
639 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
644 <small>continued...</small>
652 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
658 <li>Implementing OO</li>
660 <small>continued...</small>
668 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
674 <li>Implementing OO</li>
679 <small>continued...</small>
687 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
693 <li>Implementing OO</li>
698 <li>Meta objects:</li>
700 <small>continued...</small>
708 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
714 <li>Implementing OO</li>
719 <li>Meta objects:</li>
724 <small>continued...</small>
732 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
738 <li>Implementing OO</li>
743 <li>Meta objects:</li>
749 <small>continued...</small>
757 <img name="img" id="img" width="350" src="images/vogue.jpg" align=right>
763 <li>Implementing OO</li>
768 <li>Meta objects:</li>
783 <h1>Example class</h1>
784 <pre class="vim"> class Point {
788 method distance_to { ... }
799 <h1>Modeled with objects</h1>
800 <pre class="vim"> Class-><span class="synStatement">new</span>(
801 <span class="synConstant">attributes </span>=> [
802 Attribute-><span class="synStatement">new</span>( <span class="synConstant">name </span>=> <span class="synConstant">'$x'</span> ),
803 Attribute-><span class="synStatement">new</span>( <span class="synConstant">name </span>=> <span class="synConstant">'$y'</span> ),
805 <span class="synConstant">methods </span>=> [
806 Method-><span class="synStatement">new</span>(
807 <span class="synConstant">name </span>=> <span class="synConstant">"distance_to"</span>,
808 <span class="synConstant">definition </span>=><span class="synIdentifier"> </span><span class="synStatement">sub</span><span class="synIdentifier"> </span>{ ... }
820 <img name="img" id="img" width="350" src="images/istockphoto_944779_reception_bell.jpg" align=right>
821 <h1>Metamodel Services</h1>
825 <small>continued...</small>
833 <img name="img" id="img" width="350" src="images/istockphoto_944779_reception_bell.jpg" align=right>
834 <h1>Metamodel Services</h1>
841 <small>continued...</small>
849 <img name="img" id="img" width="350" src="images/istockphoto_944779_reception_bell.jpg" align=right>
850 <h1>Metamodel Services</h1>
858 <li>Introspection/Reflection</li>
860 <small>continued...</small>
868 <img name="img" id="img" width="350" src="images/istockphoto_944779_reception_bell.jpg" align=right>
869 <h1>Metamodel Services</h1>
877 <li>Introspection/Reflection</li>
881 <small>continued...</small>
889 <img name="img" id="img" width="350" src="images/istockphoto_944779_reception_bell.jpg" align=right>
890 <h1>Metamodel Services</h1>
898 <li>Introspection/Reflection</li>
903 <li>Class generation</li>
905 <small>continued...</small>
913 <img name="img" id="img" width="350" src="images/istockphoto_944779_reception_bell.jpg" align=right>
914 <h1>Metamodel Services</h1>
922 <li>Introspection/Reflection</li>
927 <li>Class generation</li>
928 <li>Class transformation</li>
930 <small>continued...</small>
938 <img name="img" id="img" width="350" src="images/istockphoto_944779_reception_bell.jpg" align=right>
939 <h1>Metamodel Services</h1>
947 <li>Introspection/Reflection</li>
952 <li>Class generation</li>
953 <li>Class transformation</li>
955 <li>Pattern packaging</li>
964 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
970 <small>continued...</small>
978 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
985 <li>A deep meta object system</li>
987 <small>continued...</small>
995 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
1002 <li>A deep meta object system</li>
1003 <li>4 layers deep</li>
1005 <small>continued...</small>
1011 <!-- BEGIN slide -->
1013 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
1020 <li>A deep meta object system</li>
1021 <li>4 layers deep</li>
1024 <li>Syntactic sugar</li>
1026 <small>continued...</small>
1032 <!-- BEGIN slide -->
1034 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
1041 <li>A deep meta object system</li>
1042 <li>4 layers deep</li>
1045 <li>Syntactic sugar</li>
1046 <li>Custom metaclasses</li>
1048 <small>continued...</small>
1054 <!-- BEGIN slide -->
1056 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
1063 <li>A deep meta object system</li>
1064 <li>4 layers deep</li>
1067 <li>Syntactic sugar</li>
1068 <li>Custom metaclasses</li>
1071 <small>continued...</small>
1077 <!-- BEGIN slide -->
1079 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
1086 <li>A deep meta object system</li>
1087 <li>4 layers deep</li>
1090 <li>Syntactic sugar</li>
1091 <li>Custom metaclasses</li>
1093 <li>Perl's native OO</li>
1100 <!-- BEGIN slide -->
1102 <img name="img" id="img" width="350" src="images/perl-camel.gif" align=right>
1103 <h1>Perl's native OO</h1>
1107 <small>continued...</small>
1113 <!-- BEGIN slide -->
1115 <img name="img" id="img" width="350" src="images/perl-camel.gif" align=right>
1116 <h1>Perl's native OO</h1>
1121 <li>Minimalistic</li>
1123 <small>continued...</small>
1129 <!-- BEGIN slide -->
1131 <img name="img" id="img" width="350" src="images/perl-camel.gif" align=right>
1132 <h1>Perl's native OO</h1>
1137 <li>Minimalistic</li>
1140 <li>Class = Package = Symbol table hash</li>
1141 <li>Inheritence tree embedded in <tt>@ISA</tt> entry</li>
1142 <li><tt>bless</tt> links data to a class</li>
1143 <li><tt>-></tt></li>
1145 <small>continued...</small>
1151 <!-- BEGIN slide -->
1153 <img name="img" id="img" width="350" src="images/perl-camel.gif" align=right>
1154 <h1>Perl's native OO</h1>
1159 <li>Minimalistic</li>
1162 <li>Class = Package = Symbol table hash</li>
1163 <li>Inheritence tree embedded in <tt>@ISA</tt> entry</li>
1164 <li><tt>bless</tt> links data to a class</li>
1165 <li><tt>-></tt></li>
1167 <li>Insanely flexible</li>
1169 <small>continued...</small>
1175 <!-- BEGIN slide -->
1177 <img name="img" id="img" width="350" src="images/perl-camel.gif" align=right>
1178 <h1>Perl's native OO</h1>
1183 <li>Minimalistic</li>
1186 <li>Class = Package = Symbol table hash</li>
1187 <li>Inheritence tree embedded in <tt>@ISA</tt> entry</li>
1188 <li><tt>bless</tt> links data to a class</li>
1189 <li><tt>-></tt></li>
1191 <li>Insanely flexible</li>
1192 <li>Pretty klunky</li>
1194 <small>continued...</small>
1200 <!-- BEGIN slide -->
1202 <img name="img" id="img" width="350" src="images/perl-camel.gif" align=right>
1203 <h1>Perl's native OO</h1>
1208 <li>Minimalistic</li>
1211 <li>Class = Package = Symbol table hash</li>
1212 <li>Inheritence tree embedded in <tt>@ISA</tt> entry</li>
1213 <li><tt>bless</tt> links data to a class</li>
1214 <li><tt>-></tt></li>
1216 <li>Insanely flexible</li>
1217 <li>Pretty klunky</li>
1218 <li>Written in C (not very accessible)</li>
1225 <!-- BEGIN slide -->
1227 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1232 <small>continued...</small>
1238 <!-- BEGIN slide -->
1240 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1246 <li>port of CLOS, more or less</li>
1248 <small>continued...</small>
1254 <!-- BEGIN slide -->
1256 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1262 <li>port of CLOS, more or less</li>
1263 <li>MOP = Meta Object Protocol</li>
1270 <!-- BEGIN slide -->
1272 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1277 <small>continued...</small>
1283 <!-- BEGIN slide -->
1285 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1293 <small>continued...</small>
1299 <!-- BEGIN slide -->
1301 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1310 <li><tt>Class::MOP::Class</tt></li>
1311 <li><tt>Class::MOP::Method</tt></li>
1312 <li><tt>Class::MOP::Attribute</tt></li>
1314 <small>continued...</small>
1320 <!-- BEGIN slide -->
1322 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1331 <li><tt>Class::MOP::Class</tt></li>
1332 <li><tt>Class::MOP::Method</tt></li>
1333 <li><tt>Class::MOP::Attribute</tt></li>
1335 <li>Easy interface</li>
1337 <small>continued...</small>
1343 <!-- BEGIN slide -->
1345 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1354 <li><tt>Class::MOP::Class</tt></li>
1355 <li><tt>Class::MOP::Method</tt></li>
1356 <li><tt>Class::MOP::Attribute</tt></li>
1358 <li>Easy interface</li>
1361 <li>Introspection</li>
1363 <small>continued...</small>
1369 <!-- BEGIN slide -->
1371 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1380 <li><tt>Class::MOP::Class</tt></li>
1381 <li><tt>Class::MOP::Method</tt></li>
1382 <li><tt>Class::MOP::Attribute</tt></li>
1384 <li>Easy interface</li>
1387 <li>Introspection</li>
1388 <li>Transformation</li>
1395 <!-- BEGIN slide -->
1397 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1402 <small>continued...</small>
1408 <!-- BEGIN slide -->
1410 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1416 <li>Can "parse" packages into meta objects</li>
1418 <small>continued...</small>
1424 <!-- BEGIN slide -->
1426 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1432 <li>Can "parse" packages into meta objects</li>
1433 <li>Modifying the objects writes back to packages</li>
1435 <small>continued...</small>
1441 <!-- BEGIN slide -->
1443 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1449 <li>Can "parse" packages into meta objects</li>
1450 <li>Modifying the objects writes back to packages</li>
1451 <li>Code generation</li>
1453 <small>continued...</small>
1459 <!-- BEGIN slide -->
1461 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1467 <li>Can "parse" packages into meta objects</li>
1468 <li>Modifying the objects writes back to packages</li>
1469 <li>Code generation</li>
1472 <li>Accessors from attributes</li>
1474 <small>continued...</small>
1480 <!-- BEGIN slide -->
1482 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1488 <li>Can "parse" packages into meta objects</li>
1489 <li>Modifying the objects writes back to packages</li>
1490 <li>Code generation</li>
1493 <li>Accessors from attributes</li>
1494 <li>Constructor from attributes</li>
1496 <small>continued...</small>
1502 <!-- BEGIN slide -->
1504 <img name="img" id="img" width="350" src="images/MOP.jpg" align=right>
1510 <li>Can "parse" packages into meta objects</li>
1511 <li>Modifying the objects writes back to packages</li>
1512 <li>Code generation</li>
1515 <li>Accessors from attributes</li>
1516 <li>Constructor from attributes</li>
1517 <li>Method modifiers</li>
1524 <!-- BEGIN slide -->
1526 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
1527 <h1>Moose's custom metaclasses</h1>
1531 <small>continued...</small>
1537 <!-- BEGIN slide -->
1539 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
1540 <h1>Moose's custom metaclasses</h1>
1545 <li>Subclasses of <tt>Class::MOP::Class</tt> et al</li>
1547 <small>continued...</small>
1553 <!-- BEGIN slide -->
1555 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
1556 <h1>Moose's custom metaclasses</h1>
1561 <li>Subclasses of <tt>Class::MOP::Class</tt> et al</li>
1562 <li>More fun features</li>
1564 <small>continued...</small>
1570 <!-- BEGIN slide -->
1572 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
1573 <h1>Moose's custom metaclasses</h1>
1578 <li>Subclasses of <tt>Class::MOP::Class</tt> et al</li>
1579 <li>More fun features</li>
1584 <small>continued...</small>
1590 <!-- BEGIN slide -->
1592 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
1593 <h1>Moose's custom metaclasses</h1>
1598 <li>Subclasses of <tt>Class::MOP::Class</tt> et al</li>
1599 <li>More fun features</li>
1603 <li><tt>BUILD</tt> etc a la Perl 6</li>
1605 <small>continued...</small>
1611 <!-- BEGIN slide -->
1613 <img name="img" id="img" width="350" src="images/a_moose.gif" align=right>
1614 <h1>Moose's custom metaclasses</h1>
1619 <li>Subclasses of <tt>Class::MOP::Class</tt> et al</li>
1620 <li>More fun features</li>
1624 <li><tt>BUILD</tt> etc a la Perl 6</li>
1626 <li>Type constraints</li>
1633 <!-- BEGIN slide -->
1635 <img name="img" id="img" width="350" src="images/sugar.jpg" align=right>
1636 <h1>Moose sugar layer</h1>
1640 <small>continued...</small>
1646 <!-- BEGIN slide -->
1648 <img name="img" id="img" width="350" src="images/sugar.jpg" align=right>
1649 <h1>Moose sugar layer</h1>
1654 <li>Pseudo-declarative syntax</li>
1656 <small>continued...</small>
1662 <!-- BEGIN slide -->
1664 <img name="img" id="img" width="350" src="images/sugar.jpg" align=right>
1665 <h1>Moose sugar layer</h1>
1670 <li>Pseudo-declarative syntax</li>
1671 <li>Maps to metaclass manipulations</li>
1673 <small>continued...</small>
1679 <!-- BEGIN slide -->
1681 <img name="img" id="img" width="350" src="images/sugar.jpg" align=right>
1682 <h1>Moose sugar layer</h1>
1687 <li>Pseudo-declarative syntax</li>
1688 <li>Maps to metaclass manipulations</li>
1690 <pre class="vim"> has foo => ( is => "rw" );
1692 <small>continued...</small>
1698 <!-- BEGIN slide -->
1700 <img name="img" id="img" width="350" src="images/sugar.jpg" align=right>
1701 <h1>Moose sugar layer</h1>
1706 <li>Pseudo-declarative syntax</li>
1707 <li>Maps to metaclass manipulations</li>
1709 <pre class="vim"> has foo => ( is => "rw" );
1714 <small>continued...</small>
1720 <!-- BEGIN slide -->
1722 <img name="img" id="img" width="350" src="images/sugar.jpg" align=right>
1723 <h1>Moose sugar layer</h1>
1728 <li>Pseudo-declarative syntax</li>
1729 <li>Maps to metaclass manipulations</li>
1731 <pre class="vim"> has foo => ( is => "rw" );
1736 <pre class="vim"> $metaclass->add_attribute(
1737 Moose::Meta::Attribute->new(
1738 foo => ( is => "rw" ),
1747 <!-- BEGIN slide -->
1749 <img name="img" id="img" width="350" src="images/p-seal-at-toronto-zoo.jpg" align=right>
1750 <h1>Moose vs. Class::Accessor</h1>
1754 <small>continued...</small>
1760 <!-- BEGIN slide -->
1762 <img name="img" id="img" width="350" src="images/p-seal-at-toronto-zoo.jpg" align=right>
1763 <h1>Moose vs. Class::Accessor</h1>
1768 <li>All that bloat just for the <tt>has</tt> syntax?</li>
1770 <small>continued...</small>
1776 <!-- BEGIN slide -->
1778 <img name="img" id="img" width="350" src="images/p-seal-at-toronto-zoo.jpg" align=right>
1779 <h1>Moose vs. Class::Accessor</h1>
1784 <li>All that bloat just for the <tt>has</tt> syntax?</li>
1785 <li><strong>NO!</strong></li>
1787 <small>continued...</small>
1793 <!-- BEGIN slide -->
1795 <img name="img" id="img" width="350" src="images/p-seal-at-toronto-zoo.jpg" align=right>
1796 <h1>Moose vs. Class::Accessor</h1>
1801 <li>All that bloat just for the <tt>has</tt> syntax?</li>
1802 <li><strong>NO!</strong></li>
1803 <li>Pattern packaging</li>
1810 <!-- BEGIN slide -->
1812 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
1817 <small>continued...</small>
1823 <!-- BEGIN slide -->
1825 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
1831 <li>Packaged meta code</li>
1833 <small>continued...</small>
1839 <!-- BEGIN slide -->
1841 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
1847 <li>Packaged meta code</li>
1848 <li>Pretty clean</li>
1850 <small>continued...</small>
1856 <!-- BEGIN slide -->
1858 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
1864 <li>Packaged meta code</li>
1865 <li>Pretty clean</li>
1866 <li>Mostly composable</li>
1873 <!-- BEGIN slide -->
1875 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
1880 <small>continued...</small>
1886 <!-- BEGIN slide -->
1888 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
1894 <li><tt>MooseX::Storage</tt></li>
1896 <small>continued...</small>
1902 <!-- BEGIN slide -->
1904 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
1910 <li><tt>MooseX::Storage</tt></li>
1913 <li>Customizable serialization through metaprogramming</li>
1915 <small>continued...</small>
1921 <!-- BEGIN slide -->
1923 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
1929 <li><tt>MooseX::Storage</tt></li>
1932 <li>Customizable serialization through metaprogramming</li>
1934 <li><tt>MooseX::AttributeHelpers</tt></li>
1936 <small>continued...</small>
1942 <!-- BEGIN slide -->
1944 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
1950 <li><tt>MooseX::Storage</tt></li>
1953 <li>Customizable serialization through metaprogramming</li>
1955 <li><tt>MooseX::AttributeHelpers</tt></li>
1958 <li>Additional methods for collection type attributes</li>
1960 <small>continued...</small>
1966 <!-- BEGIN slide -->
1968 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
1974 <li><tt>MooseX::Storage</tt></li>
1977 <li>Customizable serialization through metaprogramming</li>
1979 <li><tt>MooseX::AttributeHelpers</tt></li>
1982 <li>Additional methods for collection type attributes</li>
1984 <li><tt>MooseX::Getopt</tt></li>
1986 <small>continued...</small>
1992 <!-- BEGIN slide -->
1994 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
2000 <li><tt>MooseX::Storage</tt></li>
2003 <li>Customizable serialization through metaprogramming</li>
2005 <li><tt>MooseX::AttributeHelpers</tt></li>
2008 <li>Additional methods for collection type attributes</li>
2010 <li><tt>MooseX::Getopt</tt></li>
2013 <li>Additional constructor compiles attributes into a <tt>Getopt</tt> spec</li>
2015 <small>continued...</small>
2021 <!-- BEGIN slide -->
2023 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
2029 <li><tt>MooseX::Storage</tt></li>
2032 <li>Customizable serialization through metaprogramming</li>
2034 <li><tt>MooseX::AttributeHelpers</tt></li>
2037 <li>Additional methods for collection type attributes</li>
2039 <li><tt>MooseX::Getopt</tt></li>
2042 <li>Additional constructor compiles attributes into a <tt>Getopt</tt> spec</li>
2044 <li><tt>MooseX::IOC</tt></li>
2046 <small>continued...</small>
2052 <!-- BEGIN slide -->
2054 <img name="img" id="img" width="350" src="images/401.jpg" align=right>
2060 <li><tt>MooseX::Storage</tt></li>
2063 <li>Customizable serialization through metaprogramming</li>
2065 <li><tt>MooseX::AttributeHelpers</tt></li>
2068 <li>Additional methods for collection type attributes</li>
2070 <li><tt>MooseX::Getopt</tt></li>
2073 <li>Additional constructor compiles attributes into a <tt>Getopt</tt> spec</li>
2075 <li><tt>MooseX::IOC</tt></li>
2078 <li>Inversion of control integrated into the object system</li>
2085 <!-- BEGIN slide -->
2087 <img name="img" id="img" width="350" src="images/cute_moose.jpg" align=right>
2088 <h1>The point of Moose</h1>
2092 <small>continued...</small>
2098 <!-- BEGIN slide -->
2100 <img name="img" id="img" width="350" src="images/cute_moose.jpg" align=right>
2101 <h1>The point of Moose</h1>
2106 <li>OO is less tedious</li>
2108 <small>continued...</small>
2114 <!-- BEGIN slide -->
2116 <img name="img" id="img" width="350" src="images/cute_moose.jpg" align=right>
2117 <h1>The point of Moose</h1>
2122 <li>OO is less tedious</li>
2123 <li>Helps you write meta code</li>
2125 <small>continued...</small>
2131 <!-- BEGIN slide -->
2133 <img name="img" id="img" width="350" src="images/cute_moose.jpg" align=right>
2134 <h1>The point of Moose</h1>
2139 <li>OO is less tedious</li>
2140 <li>Helps you write meta code</li>
2143 <li>Good APIs promote clean code</li>
2145 <small>continued...</small>
2151 <!-- BEGIN slide -->
2153 <img name="img" id="img" width="350" src="images/cute_moose.jpg" align=right>
2154 <h1>The point of Moose</h1>
2159 <li>OO is less tedious</li>
2160 <li>Helps you write meta code</li>
2163 <li>Good APIs promote clean code</li>
2164 <li>Easier to build on existing base</li>
2166 <small>continued...</small>
2172 <!-- BEGIN slide -->
2174 <img name="img" id="img" width="350" src="images/cute_moose.jpg" align=right>
2175 <h1>The point of Moose</h1>
2180 <li>OO is less tedious</li>
2181 <li>Helps you write meta code</li>
2184 <li>Good APIs promote clean code</li>
2185 <li>Easier to build on existing base</li>
2186 <li>Conventions and structure let you play well with others (<tt>MooseX::</tt>)</li>
2188 <small>continued...</small>
2194 <!-- BEGIN slide -->
2196 <img name="img" id="img" width="350" src="images/cute_moose.jpg" align=right>
2197 <h1>The point of Moose</h1>
2202 <li>OO is less tedious</li>
2203 <li>Helps you write meta code</li>
2206 <li>Good APIs promote clean code</li>
2207 <li>Easier to build on existing base</li>
2208 <li>Conventions and structure let you play well with others (<tt>MooseX::</tt>)</li>
2209 <li>Introspectable & tranformable metamodel</li>
2216 <!-- BEGIN slide -->
2218 <img name="img" id="img" width="350" src="images/MainHeaderPic_5.gif" align=right>
2219 <h1>Another Case Study</h1>
2224 <small>continued...</small>
2230 <!-- BEGIN slide -->
2232 <img name="img" id="img" width="350" src="images/MainHeaderPic_5.gif" align=right>
2233 <h1>Another Case Study</h1>
2239 <li>Are <strong>HARD</strong></li>
2241 <small>continued...</small>
2247 <!-- BEGIN slide -->
2249 <img name="img" id="img" width="350" src="images/MainHeaderPic_5.gif" align=right>
2250 <h1>Another Case Study</h1>
2256 <li>Are <strong>HARD</strong></li>
2257 <li>Not even fun like the picture</li>
2264 <!-- BEGIN slide -->
2266 <img name="img" id="img" width="350" src="images/legacyDataSources.jpg" align=right>
2271 <small>continued...</small>
2277 <!-- BEGIN slide -->
2279 <img name="img" id="img" width="350" src="images/legacyDataSources.jpg" align=right>
2287 <small>continued...</small>
2293 <!-- BEGIN slide -->
2295 <img name="img" id="img" width="350" src="images/legacyDataSources.jpg" align=right>
2304 <li>Tables <-> Classes</li>
2306 <small>continued...</small>
2312 <!-- BEGIN slide -->
2314 <img name="img" id="img" width="350" src="images/legacyDataSources.jpg" align=right>
2323 <li>Tables <-> Classes</li>
2324 <li>Fields <-> Attributes</li>
2326 <small>continued...</small>
2332 <!-- BEGIN slide -->
2334 <img name="img" id="img" width="350" src="images/legacyDataSources.jpg" align=right>
2343 <li>Tables <-> Classes</li>
2344 <li>Fields <-> Attributes</li>
2346 <li>Code Generation</li>
2348 <small>continued...</small>
2354 <!-- BEGIN slide -->
2356 <img name="img" id="img" width="350" src="images/legacyDataSources.jpg" align=right>
2365 <li>Tables <-> Classes</li>
2366 <li>Fields <-> Attributes</li>
2368 <li>Code Generation</li>
2373 <small>continued...</small>
2379 <!-- BEGIN slide -->
2381 <img name="img" id="img" width="350" src="images/legacyDataSources.jpg" align=right>
2390 <li>Tables <-> Classes</li>
2391 <li>Fields <-> Attributes</li>
2393 <li>Code Generation</li>
2399 <small>continued...</small>
2405 <!-- BEGIN slide -->
2407 <img name="img" id="img" width="350" src="images/legacyDataSources.jpg" align=right>
2416 <li>Tables <-> Classes</li>
2417 <li>Fields <-> Attributes</li>
2419 <li>Code Generation</li>
2424 <li>Relationship fetchers</li>
2431 <!-- BEGIN slide -->
2434 <h1><tt>Class::DBI</tt></h1>
2435 <small>continued...</small>
2441 <!-- BEGIN slide -->
2444 <h1><tt>Class::DBI</tt></h1>
2446 <li>Meta code is in the base class</li>
2448 <small>continued...</small>
2454 <!-- BEGIN slide -->
2457 <h1><tt>Class::DBI</tt></h1>
2459 <li>Meta code is in the base class</li>
2460 <li>No clear schema modelling</li>
2462 <small>continued...</small>
2468 <!-- BEGIN slide -->
2471 <h1><tt>Class::DBI</tt></h1>
2473 <li>Meta code is in the base class</li>
2474 <li>No clear schema modelling</li>
2475 <li>No separation between regular & meta code</li>
2477 <small>continued...</small>
2483 <!-- BEGIN slide -->
2486 <h1><tt>Class::DBI</tt></h1>
2488 <li>Meta code is in the base class</li>
2489 <li>No clear schema modelling</li>
2490 <li>No separation between regular & meta code</li>
2491 <li>Lots of hacks</li>
2493 <small>continued...</small>
2499 <!-- BEGIN slide -->
2502 <h1><tt>Class::DBI</tt></h1>
2504 <li>Meta code is in the base class</li>
2505 <li>No clear schema modelling</li>
2506 <li>No separation between regular & meta code</li>
2507 <li>Lots of hacks</li>
2508 <li>Don't go there</li>
2515 <!-- BEGIN slide -->
2518 <h1><tt>DBIx::Class</tt></h1>
2519 <small>continued...</small>
2525 <!-- BEGIN slide -->
2528 <h1><tt>DBIx::Class</tt></h1>
2530 <li>Meta enlightened</li>
2532 <small>continued...</small>
2538 <!-- BEGIN slide -->
2541 <h1><tt>DBIx::Class</tt></h1>
2543 <li>Meta enlightened</li>
2546 <li>Schema objects fully model the SQL side</li>
2548 <small>continued...</small>
2554 <!-- BEGIN slide -->
2557 <h1><tt>DBIx::Class</tt></h1>
2559 <li>Meta enlightened</li>
2562 <li>Schema objects fully model the SQL side</li>
2563 <li>ResultSource etc partially model the OO side</li>
2565 <small>continued...</small>
2571 <!-- BEGIN slide -->
2574 <h1><tt>DBIx::Class</tt></h1>
2576 <li>Meta enlightened</li>
2579 <li>Schema objects fully model the SQL side</li>
2580 <li>ResultSource etc partially model the OO side</li>
2581 <li>Components for everything</li>
2588 <!-- BEGIN slide -->
2591 <h1><tt>DBIx::Class</tt></h1>
2592 <small>continued...</small>
2598 <!-- BEGIN slide -->
2601 <h1><tt>DBIx::Class</tt></h1>
2605 <small>continued...</small>
2611 <!-- BEGIN slide -->
2614 <h1><tt>DBIx::Class</tt></h1>
2619 <li>Proxy objects</li>
2621 <small>continued...</small>
2627 <!-- BEGIN slide -->
2630 <h1><tt>DBIx::Class</tt></h1>
2635 <li>Proxy objects</li>
2638 <small>continued...</small>
2644 <!-- BEGIN slide -->
2647 <h1><tt>DBIx::Class</tt></h1>
2652 <li>Proxy objects</li>
2654 <li>Code generation (SQL, Perl)</li>
2661 <!-- BEGIN slide -->
2664 <h1>ORM related meta programming</h1>
2665 <small>continued...</small>
2671 <!-- BEGIN slide -->
2674 <h1>ORM related meta programming</h1>
2678 <small>continued...</small>
2684 <!-- BEGIN slide -->
2687 <h1>ORM related meta programming</h1>
2690 <li>But manageable</li>
2697 <!-- BEGIN slide -->
2699 <img name="img" id="img" width="350" src="images/b-silencer-water-vapour.jpg" align=right>
2709 <!-- BEGIN slide -->
2711 <img name="img" id="img" width="350" src="images/b-silencer-water-vapour.jpg" align=right>
2716 <small>continued...</small>
2722 <!-- BEGIN slide -->
2724 <img name="img" id="img" width="350" src="images/b-silencer-water-vapour.jpg" align=right>
2732 <small>continued...</small>
2738 <!-- BEGIN slide -->
2740 <img name="img" id="img" width="350" src="images/b-silencer-water-vapour.jpg" align=right>
2747 <li>Moose spinoff</li>
2749 <small>continued...</small>
2755 <!-- BEGIN slide -->
2757 <img name="img" id="img" width="350" src="images/b-silencer-water-vapour.jpg" align=right>
2764 <li>Moose spinoff</li>
2767 <li>Stevan says it's Moose 2.0's</li>
2769 <small>continued...</small>
2775 <!-- BEGIN slide -->
2777 <img name="img" id="img" width="350" src="images/b-silencer-water-vapour.jpg" align=right>
2784 <li>Moose spinoff</li>
2787 <li>Stevan says it's Moose 2.0's</li>
2789 <li>Perl 5 & Haskell (in pugs)</li>
2796 <!-- BEGIN slide -->
2798 <img name="img" id="img" width="350" src="images/lollypop.jpg" align=right>
2803 <small>continued...</small>
2809 <!-- BEGIN slide -->
2811 <img name="img" id="img" width="350" src="images/lollypop.jpg" align=right>
2817 <li>Experimental code</li>
2819 <small>continued...</small>
2825 <!-- BEGIN slide -->
2827 <img name="img" id="img" width="350" src="images/lollypop.jpg" align=right>
2833 <li>Experimental code</li>
2834 <li>Boring parts messy or unwritten</li>
2836 <small>continued...</small>
2842 <!-- BEGIN slide -->
2844 <img name="img" id="img" width="350" src="images/lollypop.jpg" align=right>
2850 <li>Experimental code</li>
2851 <li>Boring parts messy or unwritten</li>
2852 <li>Lacking integration, sugar layer</li>
2854 <small>continued...</small>
2860 <!-- BEGIN slide -->
2862 <img name="img" id="img" width="350" src="images/lollypop.jpg" align=right>
2868 <li>Experimental code</li>
2869 <li>Boring parts messy or unwritten</li>
2870 <li>Lacking integration, sugar layer</li>
2873 <li>mst promised to help ;-)</li>
2875 <small>continued...</small>
2881 <!-- BEGIN slide -->
2883 <img name="img" id="img" width="350" src="images/lollypop.jpg" align=right>
2889 <li>Experimental code</li>
2890 <li>Boring parts messy or unwritten</li>
2891 <li>Lacking integration, sugar layer</li>
2894 <li>mst promised to help ;-)</li>
2896 <li>Some parts slow as $*!&%</li>
2903 <!-- BEGIN slide -->
2905 <img name="img" id="img" width="350" src="images/rocks.jpg" align=right>
2910 <small>continued...</small>
2916 <!-- BEGIN slide -->
2918 <img name="img" id="img" width="350" src="images/rocks.jpg" align=right>
2924 <li>Purely functional</li>
2926 <small>continued...</small>
2932 <!-- BEGIN slide -->
2934 <img name="img" id="img" width="350" src="images/rocks.jpg" align=right>
2940 <li>Purely functional</li>
2941 <li>Very suited for meta transformations</li>
2943 <small>continued...</small>
2949 <!-- BEGIN slide -->
2951 <img name="img" id="img" width="350" src="images/rocks.jpg" align=right>
2957 <li>Purely functional</li>
2958 <li>Very suited for meta transformations</li>
2959 <li>Fine grained control over everything</li>
2961 <small>continued...</small>
2967 <!-- BEGIN slide -->
2969 <img name="img" id="img" width="350" src="images/rocks.jpg" align=right>
2975 <li>Purely functional</li>
2976 <li>Very suited for meta transformations</li>
2977 <li>Fine grained control over everything</li>
2978 <li>Can introduce entirely new conceptions of OO</li>
2985 <!-- BEGIN slide -->
2987 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
2988 <h1>MO Architechture</h1>
2992 <small>continued...</small>
2998 <!-- BEGIN slide -->
3000 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
3001 <h1>MO Architechture</h1>
3006 <li>Modeling layer</li>
3008 <small>continued...</small>
3014 <!-- BEGIN slide -->
3016 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
3017 <h1>MO Architechture</h1>
3022 <li>Modeling layer</li>
3025 <li>Corresponds to compilation</li>
3027 <small>continued...</small>
3033 <!-- BEGIN slide -->
3035 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
3036 <h1>MO Architechture</h1>
3041 <li>Modeling layer</li>
3044 <li>Corresponds to compilation</li>
3046 <li>Responder layer</li>
3048 <small>continued...</small>
3054 <!-- BEGIN slide -->
3056 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
3057 <h1>MO Architechture</h1>
3062 <li>Modeling layer</li>
3065 <li>Corresponds to compilation</li>
3067 <li>Responder layer</li>
3070 <li>Corresponds to runtime</li>
3077 <!-- BEGIN slide -->
3079 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
3080 <h1>MO Architechture</h1>
3084 <small>continued...</small>
3090 <!-- BEGIN slide -->
3092 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
3093 <h1>MO Architechture</h1>
3098 <li>Compiler/sugar layer creates the modeling layer</li>
3100 <small>continued...</small>
3106 <!-- BEGIN slide -->
3108 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
3109 <h1>MO Architechture</h1>
3114 <li>Compiler/sugar layer creates the modeling layer</li>
3117 <li>Class objects are constructed, with all the details</li>
3119 <small>continued...</small>
3125 <!-- BEGIN slide -->
3127 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
3128 <h1>MO Architechture</h1>
3133 <li>Compiler/sugar layer creates the modeling layer</li>
3136 <li>Class objects are constructed, with all the details</li>
3137 <li>No meta calculations happen yet</li>
3139 <small>continued...</small>
3145 <!-- BEGIN slide -->
3147 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
3148 <h1>MO Architechture</h1>
3153 <li>Compiler/sugar layer creates the modeling layer</li>
3156 <li>Class objects are constructed, with all the details</li>
3157 <li>No meta calculations happen yet</li>
3159 <li>Modeling layer is "compiled" into responder layer</li>
3161 <small>continued...</small>
3167 <!-- BEGIN slide -->
3169 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
3170 <h1>MO Architechture</h1>
3175 <li>Compiler/sugar layer creates the modeling layer</li>
3178 <li>Class objects are constructed, with all the details</li>
3179 <li>No meta calculations happen yet</li>
3181 <li>Modeling layer is "compiled" into responder layer</li>
3184 <li>Can be done on demand or upfront</li>
3186 <small>continued...</small>
3192 <!-- BEGIN slide -->
3194 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
3195 <h1>MO Architechture</h1>
3200 <li>Compiler/sugar layer creates the modeling layer</li>
3203 <li>Class objects are constructed, with all the details</li>
3204 <li>No meta calculations happen yet</li>
3206 <li>Modeling layer is "compiled" into responder layer</li>
3209 <li>Can be done on demand or upfront</li>
3211 <li>Obscurely named objects</li>
3213 <small>continued...</small>
3219 <!-- BEGIN slide -->
3221 <img name="img" id="img" width="350" src="images/engineering_large.jpg" align=right>
3222 <h1>MO Architechture</h1>
3227 <li>Compiler/sugar layer creates the modeling layer</li>
3230 <li>Class objects are constructed, with all the details</li>
3231 <li>No meta calculations happen yet</li>
3233 <li>Modeling layer is "compiled" into responder layer</li>
3236 <li>Can be done on demand or upfront</li>
3238 <li>Obscurely named objects</li>
3241 <li>Bear with me</li>
3248 <!-- BEGIN slide -->
3250 <img name="img" id="img" width="350" src="images/light-bulb-glowing-filament-light-blue-uncropped-lores-3-AHD.jpg" align=right>
3255 <small>continued...</small>
3261 <!-- BEGIN slide -->
3263 <img name="img" id="img" width="350" src="images/light-bulb-glowing-filament-light-blue-uncropped-lores-3-AHD.jpg" align=right>
3269 <li>The purest form of OO is prototypes</li>
3271 <small>continued...</small>
3277 <!-- BEGIN slide -->
3279 <img name="img" id="img" width="350" src="images/light-bulb-glowing-filament-light-blue-uncropped-lores-3-AHD.jpg" align=right>
3285 <li>The purest form of OO is prototypes</li>
3288 <li>prototype OO can implement class OO</li>
3290 <small>continued...</small>
3296 <!-- BEGIN slide -->
3298 <img name="img" id="img" width="350" src="images/light-bulb-glowing-filament-light-blue-uncropped-lores-3-AHD.jpg" align=right>
3304 <li>The purest form of OO is prototypes</li>
3307 <li>prototype OO can implement class OO</li>
3309 <li>Concepts are new ways to express objects</li>
3311 <small>continued...</small>
3317 <!-- BEGIN slide -->
3319 <img name="img" id="img" width="350" src="images/light-bulb-glowing-filament-light-blue-uncropped-lores-3-AHD.jpg" align=right>
3325 <li>The purest form of OO is prototypes</li>
3328 <li>prototype OO can implement class OO</li>
3330 <li>Concepts are new ways to express objects</li>
3331 <li>A class is a concept</li>
3333 <small>continued...</small>
3339 <!-- BEGIN slide -->
3341 <img name="img" id="img" width="350" src="images/light-bulb-glowing-filament-light-blue-uncropped-lores-3-AHD.jpg" align=right>
3347 <li>The purest form of OO is prototypes</li>
3350 <li>prototype OO can implement class OO</li>
3352 <li>Concepts are new ways to express objects</li>
3353 <li>A class is a concept</li>
3354 <li>A role is a concept</li>
3361 <!-- BEGIN slide -->
3363 <img name="img" id="img" width="350" src="images/vtable.jpg" align=right>
3364 <h1>"Responder Interfaces"</h1>
3368 <small>continued...</small>
3374 <!-- BEGIN slide -->
3376 <img name="img" id="img" width="350" src="images/vtable.jpg" align=right>
3377 <h1>"Responder Interfaces"</h1>
3382 <li><tt>$ri->dispatch( $responder, $invocation )</tt></li>
3384 <small>continued...</small>
3390 <!-- BEGIN slide -->
3392 <img name="img" id="img" width="350" src="images/vtable.jpg" align=right>
3393 <h1>"Responder Interfaces"</h1>
3398 <li><tt>$ri->dispatch( $responder, $invocation )</tt></li>
3399 <li>Generated from concepts</li>
3401 <small>continued...</small>
3407 <!-- BEGIN slide -->
3409 <img name="img" id="img" width="350" src="images/vtable.jpg" align=right>
3410 <h1>"Responder Interfaces"</h1>
3415 <li><tt>$ri->dispatch( $responder, $invocation )</tt></li>
3416 <li>Generated from concepts</li>
3417 <li>Abstract VTable</li>
3419 <small>continued...</small>
3425 <!-- BEGIN slide -->
3427 <img name="img" id="img" width="350" src="images/vtable.jpg" align=right>
3428 <h1>"Responder Interfaces"</h1>
3433 <li><tt>$ri->dispatch( $responder, $invocation )</tt></li>
3434 <li>Generated from concepts</li>
3435 <li>Abstract VTable</li>
3438 <li>The flattened method hierarchy</li>
3440 <small>continued...</small>
3446 <!-- BEGIN slide -->
3448 <img name="img" id="img" width="350" src="images/vtable.jpg" align=right>
3449 <h1>"Responder Interfaces"</h1>
3454 <li><tt>$ri->dispatch( $responder, $invocation )</tt></li>
3455 <li>Generated from concepts</li>
3456 <li>Abstract VTable</li>
3459 <li>The flattened method hierarchy</li>
3460 <li>... or something completely different</li>
3462 <small>continued...</small>
3468 <!-- BEGIN slide -->
3470 <img name="img" id="img" width="350" src="images/vtable.jpg" align=right>
3471 <h1>"Responder Interfaces"</h1>
3476 <li><tt>$ri->dispatch( $responder, $invocation )</tt></li>
3477 <li>Generated from concepts</li>
3478 <li>Abstract VTable</li>
3481 <li>The flattened method hierarchy</li>
3482 <li>... or something completely different</li>
3483 <li>Performance</li>
3485 <small>continued...</small>
3491 <!-- BEGIN slide -->
3493 <img name="img" id="img" width="350" src="images/vtable.jpg" align=right>
3494 <h1>"Responder Interfaces"</h1>
3499 <li><tt>$ri->dispatch( $responder, $invocation )</tt></li>
3500 <li>Generated from concepts</li>
3501 <li>Abstract VTable</li>
3504 <li>The flattened method hierarchy</li>
3505 <li>... or something completely different</li>
3506 <li>Performance</li>
3507 <li>Flexibility</li>
3514 <!-- BEGIN slide -->
3516 <img name="img" id="img" width="350" src="images/fema_seal.gif" align=right>
3517 <h1>"Responders"</h1>
3521 <small>continued...</small>
3527 <!-- BEGIN slide -->
3529 <img name="img" id="img" width="350" src="images/fema_seal.gif" align=right>
3530 <h1>"Responders"</h1>
3535 <li>Something that is the subject of invocations</li>
3537 <small>continued...</small>
3543 <!-- BEGIN slide -->
3545 <img name="img" id="img" width="350" src="images/fema_seal.gif" align=right>
3546 <h1>"Responders"</h1>
3551 <li>Something that is the subject of invocations</li>
3554 <li>An object instance</li>
3556 <small>continued...</small>
3562 <!-- BEGIN slide -->
3564 <img name="img" id="img" width="350" src="images/fema_seal.gif" align=right>
3565 <h1>"Responders"</h1>
3570 <li>Something that is the subject of invocations</li>
3573 <li>An object instance</li>
3574 <li>A class (class methods)</li>
3576 <small>continued...</small>
3582 <!-- BEGIN slide -->
3584 <img name="img" id="img" width="350" src="images/fema_seal.gif" align=right>
3585 <h1>"Responders"</h1>
3590 <li>Something that is the subject of invocations</li>
3593 <li>An object instance</li>
3594 <li>A class (class methods)</li>
3596 <li>A simple tuple <tt>( $data, $ri )</tt></li>
3603 <!-- BEGIN slide -->
3605 <img name="img" id="img" width="350" src="images/lg-banana.jpg" align=right>
3606 <h1>"Invocations"</h1>
3610 <small>continued...</small>
3616 <!-- BEGIN slide -->
3618 <img name="img" id="img" width="350" src="images/lg-banana.jpg" align=right>
3619 <h1>"Invocations"</h1>
3624 <li>A method call, multimethod, message... whatever</li>
3626 <small>continued...</small>
3632 <!-- BEGIN slide -->
3634 <img name="img" id="img" width="350" src="images/lg-banana.jpg" align=right>
3635 <h1>"Invocations"</h1>
3640 <li>A method call, multimethod, message... whatever</li>
3643 <li>Arguments, too</li>
3645 <small>continued...</small>
3651 <!-- BEGIN slide -->
3653 <img name="img" id="img" width="350" src="images/lg-banana.jpg" align=right>
3654 <h1>"Invocations"</h1>
3659 <li>A method call, multimethod, message... whatever</li>
3662 <li>Arguments, too</li>
3664 <li>Whatever an RI will put up with</li>
3666 <small>continued...</small>
3672 <!-- BEGIN slide -->
3674 <img name="img" id="img" width="350" src="images/lg-banana.jpg" align=right>
3675 <h1>"Invocations"</h1>
3680 <li>A method call, multimethod, message... whatever</li>
3683 <li>Arguments, too</li>
3685 <li>Whatever an RI will put up with</li>
3688 <li>Extensible calling semantics</li>
3695 <!-- BEGIN slide -->
3697 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3698 <h1>MO compilation flow</h1>
3702 <small>continued...</small>
3708 <!-- BEGIN slide -->
3710 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3711 <h1>MO compilation flow</h1>
3716 <li>Instantiate a <tt>Class</tt> object</li>
3718 <small>continued...</small>
3724 <!-- BEGIN slide -->
3726 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3727 <h1>MO compilation flow</h1>
3732 <li>Instantiate a <tt>Class</tt> object</li>
3735 <li>Specify members (methods, attributes)</li>
3737 <small>continued...</small>
3743 <!-- BEGIN slide -->
3745 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3746 <h1>MO compilation flow</h1>
3751 <li>Instantiate a <tt>Class</tt> object</li>
3754 <li>Specify members (methods, attributes)</li>
3755 <li>... and ancestor classes & roles</li>
3757 <small>continued...</small>
3763 <!-- BEGIN slide -->
3765 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3766 <h1>MO compilation flow</h1>
3771 <li>Instantiate a <tt>Class</tt> object</li>
3774 <li>Specify members (methods, attributes)</li>
3775 <li>... and ancestor classes & roles</li>
3777 <li>Compile class</li>
3779 <small>continued...</small>
3785 <!-- BEGIN slide -->
3787 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3788 <h1>MO compilation flow</h1>
3793 <li>Instantiate a <tt>Class</tt> object</li>
3796 <li>Specify members (methods, attributes)</li>
3797 <li>... and ancestor classes & roles</li>
3799 <li>Compile class</li>
3802 <li><tt>my $class_methods_ri = $class->class_interface()</tt></li>
3804 <small>continued...</small>
3810 <!-- BEGIN slide -->
3812 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3813 <h1>MO compilation flow</h1>
3818 <li>Instantiate a <tt>Class</tt> object</li>
3821 <li>Specify members (methods, attributes)</li>
3822 <li>... and ancestor classes & roles</li>
3824 <li>Compile class</li>
3827 <li><tt>my $class_methods_ri = $class->class_interface()</tt></li>
3828 <li>Instance method RI closed in the constructor, within <tt>$ri</tt></li>
3830 <small>continued...</small>
3836 <!-- BEGIN slide -->
3838 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3839 <h1>MO compilation flow</h1>
3844 <li>Instantiate a <tt>Class</tt> object</li>
3847 <li>Specify members (methods, attributes)</li>
3848 <li>... and ancestor classes & roles</li>
3850 <li>Compile class</li>
3853 <li><tt>my $class_methods_ri = $class->class_interface()</tt></li>
3854 <li>Instance method RI closed in the constructor, within <tt>$ri</tt></li>
3855 <li>Purely functional operation </li>
3862 <!-- BEGIN slide -->
3864 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3865 <h1>RI composition</h1>
3869 <small>continued...</small>
3875 <!-- BEGIN slide -->
3877 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3878 <h1>RI composition</h1>
3883 <li>Compute instance methods and attributes from ancestry</li>
3885 <small>continued...</small>
3891 <!-- BEGIN slide -->
3893 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3894 <h1>RI composition</h1>
3899 <li>Compute instance methods and attributes from ancestry</li>
3900 <li>Compute instance slots from attributes</li>
3902 <small>continued...</small>
3908 <!-- BEGIN slide -->
3910 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3911 <h1>RI composition</h1>
3916 <li>Compute instance methods and attributes from ancestry</li>
3917 <li>Compute instance slots from attributes</li>
3918 <li>Generate accessors</li>
3920 <small>continued...</small>
3926 <!-- BEGIN slide -->
3928 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3929 <h1>RI composition</h1>
3934 <li>Compute instance methods and attributes from ancestry</li>
3935 <li>Compute instance slots from attributes</li>
3936 <li>Generate accessors</li>
3938 <pre class="vim"> MO::Run::ResponderInterface::MethodTable->new(
3939 methods => %methods
3942 <small>continued...</small>
3948 <!-- BEGIN slide -->
3950 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3951 <h1>RI composition</h1>
3956 <li>Compute instance methods and attributes from ancestry</li>
3957 <li>Compute instance slots from attributes</li>
3958 <li>Generate accessors</li>
3960 <pre class="vim"> MO::Run::ResponderInterface::MethodTable->new(
3961 methods => %methods
3965 <li>Generate constructor</li>
3967 <small>continued...</small>
3973 <!-- BEGIN slide -->
3975 <img name="img" id="img" width="350" src="images/snoqualmie-falls-flowing-3811-equalized.jpg" align=right>
3976 <h1>RI composition</h1>
3981 <li>Compute instance methods and attributes from ancestry</li>
3982 <li>Compute instance slots from attributes</li>
3983 <li>Generate accessors</li>
3985 <pre class="vim"> MO::Run::ResponderInterface::MethodTable->new(
3986 methods => %methods
3990 <li>Generate constructor</li>
3992 <pre class="vim"> sub {
3993 my $data = process_params(@_);
3994 return box( $data, $instance_ri );
4002 <!-- BEGIN slide -->
4004 <img name="img" id="img" width="350" src="images/Creation-hands-L.jpg" align=right>
4005 <h1>Instantiation</h1>
4009 <small>continued...</small>
4015 <!-- BEGIN slide -->
4017 <img name="img" id="img" width="350" src="images/Creation-hands-L.jpg" align=right>
4018 <h1>Instantiation</h1>
4023 <li>Lookup RI using class name</li>
4025 <small>continued...</small>
4031 <!-- BEGIN slide -->
4033 <img name="img" id="img" width="350" src="images/Creation-hands-L.jpg" align=right>
4034 <h1>Instantiation</h1>
4039 <li>Lookup RI using class name</li>
4040 <li>Dispatch constructor class method</li>
4042 <small>continued...</small>
4048 <!-- BEGIN slide -->
4050 <img name="img" id="img" width="350" src="images/Creation-hands-L.jpg" align=right>
4051 <h1>Instantiation</h1>
4056 <li>Lookup RI using class name</li>
4057 <li>Dispatch constructor class method</li>
4058 <li>Compose data from params</li>
4060 <small>continued...</small>
4066 <!-- BEGIN slide -->
4068 <img name="img" id="img" width="350" src="images/Creation-hands-L.jpg" align=right>
4069 <h1>Instantiation</h1>
4074 <li>Lookup RI using class name</li>
4075 <li>Dispatch constructor class method</li>
4076 <li>Compose data from params</li>
4079 <li>Slightly complicated</li>
4081 <small>continued...</small>
4087 <!-- BEGIN slide -->
4089 <img name="img" id="img" width="350" src="images/Creation-hands-L.jpg" align=right>
4090 <h1>Instantiation</h1>
4095 <li>Lookup RI using class name</li>
4096 <li>Dispatch constructor class method</li>
4097 <li>Compose data from params</li>
4100 <li>Slightly complicated</li>
4102 <li>Link data with closed <tt>$instance_ri</tt></li>
4104 <small>continued...</small>
4110 <!-- BEGIN slide -->
4112 <img name="img" id="img" width="350" src="images/Creation-hands-L.jpg" align=right>
4113 <h1>Instantiation</h1>
4118 <li>Lookup RI using class name</li>
4119 <li>Dispatch constructor class method</li>
4120 <li>Compose data from params</li>
4123 <li>Slightly complicated</li>
4125 <li>Link data with closed <tt>$instance_ri</tt></li>
4128 <li>Responder == ( Data, RI )</li>
4130 <small>continued...</small>
4136 <!-- BEGIN slide -->
4138 <img name="img" id="img" width="350" src="images/Creation-hands-L.jpg" align=right>
4139 <h1>Instantiation</h1>
4144 <li>Lookup RI using class name</li>
4145 <li>Dispatch constructor class method</li>
4146 <li>Compose data from params</li>
4149 <li>Slightly complicated</li>
4151 <li>Link data with closed <tt>$instance_ri</tt></li>
4154 <li>Responder == ( Data, RI )</li>
4155 <li>Like <tt>bless</tt></li>
4162 <!-- BEGIN slide -->
4164 <img name="img" id="img" width="350" src="images/telephone.jpg" align=right>
4165 <h1>Method calls</h1>
4169 <small>continued...</small>
4175 <!-- BEGIN slide -->
4177 <img name="img" id="img" width="350" src="images/telephone.jpg" align=right>
4178 <h1>Method calls</h1>
4183 <li>How to talk with your new object?</li>
4185 <small>continued...</small>
4191 <!-- BEGIN slide -->
4193 <img name="img" id="img" width="350" src="images/telephone.jpg" align=right>
4194 <h1>Method calls</h1>
4199 <li>How to talk with your new object?</li>
4201 <pre class="vim"> my $ri = $responder->responder_interface;
4204 <small>continued...</small>
4210 <!-- BEGIN slide -->
4212 <img name="img" id="img" width="350" src="images/telephone.jpg" align=right>
4213 <h1>Method calls</h1>
4218 <li>How to talk with your new object?</li>
4220 <pre class="vim"> my $ri = $responder->responder_interface;
4223 my $method = MO::Run::Invocation::Method->new(
4224 name => "foo"
4225 arguments => \@blah,
4229 <small>continued...</small>
4235 <!-- BEGIN slide -->
4237 <img name="img" id="img" width="350" src="images/telephone.jpg" align=right>
4238 <h1>Method calls</h1>
4243 <li>How to talk with your new object?</li>
4245 <pre class="vim"> my $ri = $responder->responder_interface;
4248 my $method = MO::Run::Invocation::Method->new(
4249 name => "foo"
4250 arguments => \@blah,
4254 $ri->dispatch( $responder, $method );
4256 <small>continued...</small>
4262 <!-- BEGIN slide -->
4264 <img name="img" id="img" width="350" src="images/telephone.jpg" align=right>
4265 <h1>Method calls</h1>
4270 <li>How to talk with your new object?</li>
4272 <pre class="vim"> my $ri = $responder->responder_interface;
4275 my $method = MO::Run::Invocation::Method->new(
4276 name => "foo"
4277 arguments => \@blah,
4281 $ri->dispatch( $responder, $method );
4284 <li>Arbitrary responder interfaces also allowed</li>
4286 <small>continued...</small>
4292 <!-- BEGIN slide -->
4294 <img name="img" id="img" width="350" src="images/telephone.jpg" align=right>
4295 <h1>Method calls</h1>
4300 <li>How to talk with your new object?</li>
4302 <pre class="vim"> my $ri = $responder->responder_interface;
4305 my $method = MO::Run::Invocation::Method->new(
4306 name => "foo"
4307 arguments => \@blah,
4311 $ri->dispatch( $responder, $method );
4314 <li>Arbitrary responder interfaces also allowed</li>
4317 <li>Doesn't have to be <tt>$responder->responder_interface</tt></li>
4324 <!-- BEGIN slide -->
4326 <img name="img" id="img" width="350" src="images/Surprise-buttsecks.jpg" align=right>
4331 <small>continued...</small>
4337 <!-- BEGIN slide -->
4339 <img name="img" id="img" width="350" src="images/Surprise-buttsecks.jpg" align=right>
4345 <li>What's wrong with the previous slide?</li>
4347 <small>continued...</small>
4353 <!-- BEGIN slide -->
4355 <img name="img" id="img" width="350" src="images/Surprise-buttsecks.jpg" align=right>
4361 <li>What's wrong with the previous slide?</li>
4362 <li>RIs are objects too!</li>
4364 <small>continued...</small>
4370 <!-- BEGIN slide -->
4372 <img name="img" id="img" width="350" src="images/Surprise-buttsecks.jpg" align=right>
4378 <li>What's wrong with the previous slide?</li>
4379 <li>RIs are objects too!</li>
4380 <li>Need to bootstrap method calls</li>
4382 <small>continued...</small>
4388 <!-- BEGIN slide -->
4390 <img name="img" id="img" width="350" src="images/Surprise-buttsecks.jpg" align=right>
4396 <li>What's wrong with the previous slide?</li>
4397 <li>RIs are objects too!</li>
4398 <li>Need to bootstrap method calls</li>
4399 <li>Runtime must bootstrap low level OO</li>
4401 <small>continued...</small>
4407 <!-- BEGIN slide -->
4409 <img name="img" id="img" width="350" src="images/Surprise-buttsecks.jpg" align=right>
4415 <li>What's wrong with the previous slide?</li>
4416 <li>RIs are objects too!</li>
4417 <li>Need to bootstrap method calls</li>
4418 <li>Runtime must bootstrap low level OO</li>
4421 <li>More on this soon</li>
4428 <!-- BEGIN slide -->
4430 <img name="img" id="img" width="350" src="images/44790qV87_w.jpg" align=right>
4431 <h1>Meta level polymorphism</h1>
4435 <small>continued...</small>
4441 <!-- BEGIN slide -->
4443 <img name="img" id="img" width="350" src="images/44790qV87_w.jpg" align=right>
4444 <h1>Meta level polymorphism</h1>
4449 <li>An important point</li>
4451 <small>continued...</small>
4457 <!-- BEGIN slide -->
4459 <img name="img" id="img" width="350" src="images/44790qV87_w.jpg" align=right>
4460 <h1>Meta level polymorphism</h1>
4465 <li>An important point</li>
4468 <li>In fact, <strong>the</strong> point of MO</li>
4470 <small>continued...</small>
4476 <!-- BEGIN slide -->
4478 <img name="img" id="img" width="350" src="images/44790qV87_w.jpg" align=right>
4479 <h1>Meta level polymorphism</h1>
4484 <li>An important point</li>
4487 <li>In fact, <strong>the</strong> point of MO</li>
4489 <li>Responder interfaces are polymorphic</li>
4491 <small>continued...</small>
4497 <!-- BEGIN slide -->
4499 <img name="img" id="img" width="350" src="images/44790qV87_w.jpg" align=right>
4500 <h1>Meta level polymorphism</h1>
4505 <li>An important point</li>
4508 <li>In fact, <strong>the</strong> point of MO</li>
4510 <li>Responder interfaces are polymorphic</li>
4513 <li>Method table, network proxy, whatever</li>
4515 <small>continued...</small>
4521 <!-- BEGIN slide -->
4523 <img name="img" id="img" width="350" src="images/44790qV87_w.jpg" align=right>
4524 <h1>Meta level polymorphism</h1>
4529 <li>An important point</li>
4532 <li>In fact, <strong>the</strong> point of MO</li>
4534 <li>Responder interfaces are polymorphic</li>
4537 <li>Method table, network proxy, whatever</li>
4539 <li>Easy to specialize</li>
4541 <small>continued...</small>
4547 <!-- BEGIN slide -->
4549 <img name="img" id="img" width="350" src="images/44790qV87_w.jpg" align=right>
4550 <h1>Meta level polymorphism</h1>
4555 <li>An important point</li>
4558 <li>In fact, <strong>the</strong> point of MO</li>
4560 <li>Responder interfaces are polymorphic</li>
4563 <li>Method table, network proxy, whatever</li>
4565 <li>Easy to specialize</li>
4568 <li>Optimizations</li>
4570 <small>continued...</small>
4576 <!-- BEGIN slide -->
4578 <img name="img" id="img" width="350" src="images/44790qV87_w.jpg" align=right>
4579 <h1>Meta level polymorphism</h1>
4584 <li>An important point</li>
4587 <li>In fact, <strong>the</strong> point of MO</li>
4589 <li>Responder interfaces are polymorphic</li>
4592 <li>Method table, network proxy, whatever</li>
4594 <li>Easy to specialize</li>
4597 <li>Optimizations</li>
4598 <li>Strange features</li>
4600 <small>continued...</small>
4606 <!-- BEGIN slide -->
4608 <img name="img" id="img" width="350" src="images/44790qV87_w.jpg" align=right>
4609 <h1>Meta level polymorphism</h1>
4614 <li>An important point</li>
4617 <li>In fact, <strong>the</strong> point of MO</li>
4619 <li>Responder interfaces are polymorphic</li>
4622 <li>Method table, network proxy, whatever</li>
4624 <li>Easy to specialize</li>
4627 <li>Optimizations</li>
4628 <li>Strange features</li>
4630 <li>Easy to mix several OO systems</li>
4632 <small>continued...</small>
4638 <!-- BEGIN slide -->
4640 <img name="img" id="img" width="350" src="images/44790qV87_w.jpg" align=right>
4641 <h1>Meta level polymorphism</h1>
4646 <li>An important point</li>
4649 <li>In fact, <strong>the</strong> point of MO</li>
4651 <li>Responder interfaces are polymorphic</li>
4654 <li>Method table, network proxy, whatever</li>
4656 <li>Easy to specialize</li>
4659 <li>Optimizations</li>
4660 <li>Strange features</li>
4662 <li>Easy to mix several OO systems</li>
4665 <li>Just compile to separate RIs</li>
4672 <!-- BEGIN slide -->
4674 <img name="img" id="img" width="350" src="images/card-camel-108.jpg" align=right>
4675 <h1>MO in Perl 5</h1>
4679 <small>continued...</small>
4685 <!-- BEGIN slide -->
4687 <img name="img" id="img" width="350" src="images/card-camel-108.jpg" align=right>
4688 <h1>MO in Perl 5</h1>
4693 <li>Two runtimes</li>
4695 <small>continued...</small>
4701 <!-- BEGIN slide -->
4703 <img name="img" id="img" width="350" src="images/card-camel-108.jpg" align=right>
4704 <h1>MO in Perl 5</h1>
4709 <li>Two runtimes</li>
4710 <li>Very different</li>
4712 <small>continued...</small>
4718 <!-- BEGIN slide -->
4720 <img name="img" id="img" width="350" src="images/card-camel-108.jpg" align=right>
4721 <h1>MO in Perl 5</h1>
4726 <li>Two runtimes</li>
4727 <li>Very different</li>
4728 <li><tt>MO::Run::Aux</tt> wraps both</li>
4730 <small>continued...</small>
4736 <!-- BEGIN slide -->
4738 <img name="img" id="img" width="350" src="images/card-camel-108.jpg" align=right>
4739 <h1>MO in Perl 5</h1>
4744 <li>Two runtimes</li>
4745 <li>Very different</li>
4746 <li><tt>MO::Run::Aux</tt> wraps both</li>
4749 <li>Share tests by running with different <tt>%ENV</tt> var</li>
4756 <!-- BEGIN slide -->
4758 <img name="img" id="img" width="350" src="images/S2Secret.jpg" align=right>
4759 <h1>Hosted runtime</h1>
4763 <small>continued...</small>
4769 <!-- BEGIN slide -->
4771 <img name="img" id="img" width="350" src="images/S2Secret.jpg" align=right>
4772 <h1>Hosted runtime</h1>
4777 <li>Nested object system</li>
4779 <small>continued...</small>
4785 <!-- BEGIN slide -->
4787 <img name="img" id="img" width="350" src="images/S2Secret.jpg" align=right>
4788 <h1>Hosted runtime</h1>
4793 <li>Nested object system</li>
4794 <li>Bootstraps with Perl 5</li>
4796 <small>continued...</small>
4802 <!-- BEGIN slide -->
4804 <img name="img" id="img" width="350" src="images/S2Secret.jpg" align=right>
4805 <h1>Hosted runtime</h1>
4810 <li>Nested object system</li>
4811 <li>Bootstraps with Perl 5</li>
4814 <li>Native Perl OO == Low level, like VM opcodes</li>
4816 <small>continued...</small>
4822 <!-- BEGIN slide -->
4824 <img name="img" id="img" width="350" src="images/S2Secret.jpg" align=right>
4825 <h1>Hosted runtime</h1>
4830 <li>Nested object system</li>
4831 <li>Bootstraps with Perl 5</li>
4834 <li>Native Perl OO == Low level, like VM opcodes</li>
4835 <li>Virtualized MO == High Level</li>
4837 <small>continued...</small>
4843 <!-- BEGIN slide -->
4845 <img name="img" id="img" width="350" src="images/S2Secret.jpg" align=right>
4846 <h1>Hosted runtime</h1>
4851 <li>Nested object system</li>
4852 <li>Bootstraps with Perl 5</li>
4855 <li>Native Perl OO == Low level, like VM opcodes</li>
4856 <li>Virtualized MO == High Level</li>
4857 <li>Completely separate levels</li>
4859 <small>continued...</small>
4865 <!-- BEGIN slide -->
4867 <img name="img" id="img" width="350" src="images/S2Secret.jpg" align=right>
4868 <h1>Hosted runtime</h1>
4873 <li>Nested object system</li>
4874 <li>Bootstraps with Perl 5</li>
4877 <li>Native Perl OO == Low level, like VM opcodes</li>
4878 <li>Virtualized MO == High Level</li>
4879 <li>Completely separate levels</li>
4881 <li><tt>$ri->dispatch( $responder, $method )</tt></li>
4883 <small>continued...</small>
4889 <!-- BEGIN slide -->
4891 <img name="img" id="img" width="350" src="images/S2Secret.jpg" align=right>
4892 <h1>Hosted runtime</h1>
4897 <li>Nested object system</li>
4898 <li>Bootstraps with Perl 5</li>
4901 <li>Native Perl OO == Low level, like VM opcodes</li>
4902 <li>Virtualized MO == High Level</li>
4903 <li>Completely separate levels</li>
4905 <li><tt>$ri->dispatch( $responder, $method )</tt></li>
4908 <li>not <tt>$responder->$method()</tt></li>
4910 <small>continued...</small>
4916 <!-- BEGIN slide -->
4918 <img name="img" id="img" width="350" src="images/S2Secret.jpg" align=right>
4919 <h1>Hosted runtime</h1>
4924 <li>Nested object system</li>
4925 <li>Bootstraps with Perl 5</li>
4928 <li>Native Perl OO == Low level, like VM opcodes</li>
4929 <li>Virtualized MO == High Level</li>
4930 <li>Completely separate levels</li>
4932 <li><tt>$ri->dispatch( $responder, $method )</tt></li>
4935 <li>not <tt>$responder->$method()</tt></li>
4937 <li>Full expressiveness</li>
4939 <small>continued...</small>
4945 <!-- BEGIN slide -->
4947 <img name="img" id="img" width="350" src="images/S2Secret.jpg" align=right>
4948 <h1>Hosted runtime</h1>
4953 <li>Nested object system</li>
4954 <li>Bootstraps with Perl 5</li>
4957 <li>Native Perl OO == Low level, like VM opcodes</li>
4958 <li>Virtualized MO == High Level</li>
4959 <li>Completely separate levels</li>
4961 <li><tt>$ri->dispatch( $responder, $method )</tt></li>
4964 <li>not <tt>$responder->$method()</tt></li>
4966 <li>Full expressiveness</li>
4967 <li>Slow, verbose</li>
4974 <!-- BEGIN slide -->
4976 <img name="img" id="img" width="350" src="images/indian-camp.jpg" align=right>
4977 <h1>Native runtime</h1>
4981 <small>continued...</small>
4987 <!-- BEGIN slide -->
4989 <img name="img" id="img" width="350" src="images/indian-camp.jpg" align=right>
4990 <h1>Native runtime</h1>
4995 <li>Integrated object system</li>
4997 <small>continued...</small>
5003 <!-- BEGIN slide -->
5005 <img name="img" id="img" width="350" src="images/indian-camp.jpg" align=right>
5006 <h1>Native runtime</h1>
5011 <li>Integrated object system</li>
5012 <li>RIs are compiled into packages</li>
5014 <small>continued...</small>
5020 <!-- BEGIN slide -->
5022 <img name="img" id="img" width="350" src="images/indian-camp.jpg" align=right>
5023 <h1>Native runtime</h1>
5028 <li>Integrated object system</li>
5029 <li>RIs are compiled into packages</li>
5032 <li>Simple RIs are dissassembled and stuffed into the stash</li>
5034 <small>continued...</small>
5040 <!-- BEGIN slide -->
5042 <img name="img" id="img" width="350" src="images/indian-camp.jpg" align=right>
5043 <h1>Native runtime</h1>
5048 <li>Integrated object system</li>
5049 <li>RIs are compiled into packages</li>
5052 <li>Simple RIs are dissassembled and stuffed into the stash</li>
5053 <li>Complex RIs use <tt>AUTOLOAD</tt>, delegating to the RI meta object</li>
5055 <small>continued...</small>
5061 <!-- BEGIN slide -->
5063 <img name="img" id="img" width="350" src="images/indian-camp.jpg" align=right>
5064 <h1>Native runtime</h1>
5069 <li>Integrated object system</li>
5070 <li>RIs are compiled into packages</li>
5073 <li>Simple RIs are dissassembled and stuffed into the stash</li>
5074 <li>Complex RIs use <tt>AUTOLOAD</tt>, delegating to the RI meta object</li>
5076 <li>Only named method calls</li>
5078 <small>continued...</small>
5084 <!-- BEGIN slide -->
5086 <img name="img" id="img" width="350" src="images/indian-camp.jpg" align=right>
5087 <h1>Native runtime</h1>
5092 <li>Integrated object system</li>
5093 <li>RIs are compiled into packages</li>
5096 <li>Simple RIs are dissassembled and stuffed into the stash</li>
5097 <li>Complex RIs use <tt>AUTOLOAD</tt>, delegating to the RI meta object</li>
5099 <li>Only named method calls</li>
5102 <li>No arbitrary call concepts</li>
5104 <small>continued...</small>
5110 <!-- BEGIN slide -->
5112 <img name="img" id="img" width="350" src="images/indian-camp.jpg" align=right>
5113 <h1>Native runtime</h1>
5118 <li>Integrated object system</li>
5119 <li>RIs are compiled into packages</li>
5122 <li>Simple RIs are dissassembled and stuffed into the stash</li>
5123 <li>Complex RIs use <tt>AUTOLOAD</tt>, delegating to the RI meta object</li>
5125 <li>Only named method calls</li>
5128 <li>No arbitrary call concepts</li>
5129 <li><tt>-></tt> doesn't support anything else</li>
5131 <small>continued...</small>
5137 <!-- BEGIN slide -->
5139 <img name="img" id="img" width="350" src="images/indian-camp.jpg" align=right>
5140 <h1>Native runtime</h1>
5145 <li>Integrated object system</li>
5146 <li>RIs are compiled into packages</li>
5149 <li>Simple RIs are dissassembled and stuffed into the stash</li>
5150 <li>Complex RIs use <tt>AUTOLOAD</tt>, delegating to the RI meta object</li>
5152 <li>Only named method calls</li>
5155 <li>No arbitrary call concepts</li>
5156 <li><tt>-></tt> doesn't support anything else</li>
5158 <li>As fast as "regular" Perl OO</li>
5160 <small>continued...</small>
5166 <!-- BEGIN slide -->
5168 <img name="img" id="img" width="350" src="images/indian-camp.jpg" align=right>
5169 <h1>Native runtime</h1>
5174 <li>Integrated object system</li>
5175 <li>RIs are compiled into packages</li>
5178 <li>Simple RIs are dissassembled and stuffed into the stash</li>
5179 <li>Complex RIs use <tt>AUTOLOAD</tt>, delegating to the RI meta object</li>
5181 <li>Only named method calls</li>
5184 <li>No arbitrary call concepts</li>
5185 <li><tt>-></tt> doesn't support anything else</li>
5187 <li>As fast as "regular" Perl OO</li>
5190 <li>Even makes simple, standalone `.pmc`s</li>
5197 <!-- BEGIN slide -->
5200 <h1>Perl 5 Runtimes</h1>
5201 <small>continued...</small>
5207 <!-- BEGIN slide -->
5210 <h1>Perl 5 Runtimes</h1>
5214 <small>continued...</small>
5220 <!-- BEGIN slide -->
5223 <h1>Perl 5 Runtimes</h1>
5228 <li>Usable with regular Perl OO <span class="html">☺</span></li>
5230 <small>continued...</small>
5236 <!-- BEGIN slide -->
5239 <h1>Perl 5 Runtimes</h1>
5244 <li>Usable with regular Perl OO <span class="html">☺</span></li>
5245 <li>Lacks arbitrary invocations <span class="html">☹</span> </li>
5247 <small>continued...</small>
5253 <!-- BEGIN slide -->
5256 <h1>Perl 5 Runtimes</h1>
5261 <li>Usable with regular Perl OO <span class="html">☺</span></li>
5262 <li>Lacks arbitrary invocations <span class="html">☹</span> </li>
5264 <li>Virtualized</li>
5266 <small>continued...</small>
5272 <!-- BEGIN slide -->
5275 <h1>Perl 5 Runtimes</h1>
5280 <li>Usable with regular Perl OO <span class="html">☺</span></li>
5281 <li>Lacks arbitrary invocations <span class="html">☹</span> </li>
5283 <li>Virtualized</li>
5286 <li>Feature complete <span class="html">☺</span></li>
5288 <small>continued...</small>
5294 <!-- BEGIN slide -->
5297 <h1>Perl 5 Runtimes</h1>
5302 <li>Usable with regular Perl OO <span class="html">☺</span></li>
5303 <li>Lacks arbitrary invocations <span class="html">☹</span> </li>
5305 <li>Virtualized</li>
5308 <li>Feature complete <span class="html">☺</span></li>
5309 <li>Doesn't integrate <span class="html">☹</span></li>
5311 <small>continued...</small>
5317 <!-- BEGIN slide -->
5320 <h1>Perl 5 Runtimes</h1>
5325 <li>Usable with regular Perl OO <span class="html">☺</span></li>
5326 <li>Lacks arbitrary invocations <span class="html">☹</span> </li>
5328 <li>Virtualized</li>
5331 <li>Feature complete <span class="html">☺</span></li>
5332 <li>Doesn't integrate <span class="html">☹</span></li>
5333 <li>Slow <span class="html">☹</span></li>
5340 <!-- BEGIN slide -->
5342 <img name="img" id="img" width="350" src="images/botticelli.venus.jpg" align=right>
5343 <h1>Idealized MO toolchain</h1>
5347 <small>continued...</small>
5353 <!-- BEGIN slide -->
5355 <img name="img" id="img" width="350" src="images/botticelli.venus.jpg" align=right>
5356 <h1>Idealized MO toolchain</h1>
5361 <li>Compiler handles modeling</li>
5363 <small>continued...</small>
5369 <!-- BEGIN slide -->
5371 <img name="img" id="img" width="350" src="images/botticelli.venus.jpg" align=right>
5372 <h1>Idealized MO toolchain</h1>
5377 <li>Compiler handles modeling</li>
5380 <li>Constructs meta objects at compile time</li>
5382 <small>continued...</small>
5388 <!-- BEGIN slide -->
5390 <img name="img" id="img" width="350" src="images/botticelli.venus.jpg" align=right>
5391 <h1>Idealized MO toolchain</h1>
5396 <li>Compiler handles modeling</li>
5399 <li>Constructs meta objects at compile time</li>
5401 <li>VM Opcodes support standard RI</li>
5403 <small>continued...</small>
5409 <!-- BEGIN slide -->
5411 <img name="img" id="img" width="350" src="images/botticelli.venus.jpg" align=right>
5412 <h1>Idealized MO toolchain</h1>
5417 <li>Compiler handles modeling</li>
5420 <li>Constructs meta objects at compile time</li>
5422 <li>VM Opcodes support standard RI</li>
5423 <li>Custom RIs are just objects</li>
5425 <small>continued...</small>
5431 <!-- BEGIN slide -->
5433 <img name="img" id="img" width="350" src="images/botticelli.venus.jpg" align=right>
5434 <h1>Idealized MO toolchain</h1>
5439 <li>Compiler handles modeling</li>
5442 <li>Constructs meta objects at compile time</li>
5444 <li>VM Opcodes support standard RI</li>
5445 <li>Custom RIs are just objects</li>
5448 <li>Bootstrapped using standard runtime objects</li>
5450 <small>continued...</small>
5456 <!-- BEGIN slide -->
5458 <img name="img" id="img" width="350" src="images/botticelli.venus.jpg" align=right>
5459 <h1>Idealized MO toolchain</h1>
5464 <li>Compiler handles modeling</li>
5467 <li>Constructs meta objects at compile time</li>
5469 <li>VM Opcodes support standard RI</li>
5470 <li>Custom RIs are just objects</li>
5473 <li>Bootstrapped using standard runtime objects</li>
5476 <li>Method table RI</li>
5478 <small>continued...</small>
5484 <!-- BEGIN slide -->
5486 <img name="img" id="img" width="350" src="images/botticelli.venus.jpg" align=right>
5487 <h1>Idealized MO toolchain</h1>
5492 <li>Compiler handles modeling</li>
5495 <li>Constructs meta objects at compile time</li>
5497 <li>VM Opcodes support standard RI</li>
5498 <li>Custom RIs are just objects</li>
5501 <li>Bootstrapped using standard runtime objects</li>
5504 <li>Method table RI</li>
5505 <li>Named method invocation</li>
5512 <!-- BEGIN slide -->
5514 <img name="img" id="img" width="350" src="images/lolgeeks016.jpg" align=right>
5519 <small>continued...</small>
5525 <!-- BEGIN slide -->
5527 <img name="img" id="img" width="350" src="images/lolgeeks016.jpg" align=right>
5533 <li>Perl 6 is the idealized MO toolchain</li>
5535 <small>continued...</small>
5541 <!-- BEGIN slide -->
5543 <img name="img" id="img" width="350" src="images/lolgeeks016.jpg" align=right>
5549 <li>Perl 6 is the idealized MO toolchain</li>
5552 <li>Can introduce syntax</li>
5554 <small>continued...</small>
5560 <!-- BEGIN slide -->
5562 <img name="img" id="img" width="350" src="images/lolgeeks016.jpg" align=right>
5568 <li>Perl 6 is the idealized MO toolchain</li>
5571 <li>Can introduce syntax</li>
5574 <li>Invocation types</li>
5576 <small>continued...</small>
5582 <!-- BEGIN slide -->
5584 <img name="img" id="img" width="350" src="images/lolgeeks016.jpg" align=right>
5590 <li>Perl 6 is the idealized MO toolchain</li>
5593 <li>Can introduce syntax</li>
5596 <li>Invocation types</li>
5597 <li>Concept declarations</li>
5599 <small>continued...</small>
5605 <!-- BEGIN slide -->
5607 <img name="img" id="img" width="350" src="images/lolgeeks016.jpg" align=right>
5613 <li>Perl 6 is the idealized MO toolchain</li>
5616 <li>Can introduce syntax</li>
5619 <li>Invocation types</li>
5620 <li>Concept declarations</li>
5622 <li>Implement bootstrap RIs in VM opcodes</li>
5624 <small>continued...</small>
5630 <!-- BEGIN slide -->
5632 <img name="img" id="img" width="350" src="images/lolgeeks016.jpg" align=right>
5638 <li>Perl 6 is the idealized MO toolchain</li>
5641 <li>Can introduce syntax</li>
5644 <li>Invocation types</li>
5645 <li>Concept declarations</li>
5647 <li>Implement bootstrap RIs in VM opcodes</li>
5649 <li>Pugs might be using MO</li>
5651 <small>continued...</small>
5657 <!-- BEGIN slide -->
5659 <img name="img" id="img" width="350" src="images/lolgeeks016.jpg" align=right>
5665 <li>Perl 6 is the idealized MO toolchain</li>
5668 <li>Can introduce syntax</li>
5671 <li>Invocation types</li>
5672 <li>Concept declarations</li>
5674 <li>Implement bootstrap RIs in VM opcodes</li>
5676 <li>Pugs might be using MO</li>
5679 <li>I'm not really sure</li>
5681 <small>continued...</small>
5687 <!-- BEGIN slide -->
5689 <img name="img" id="img" width="350" src="images/lolgeeks016.jpg" align=right>
5695 <li>Perl 6 is the idealized MO toolchain</li>
5698 <li>Can introduce syntax</li>
5701 <li>Invocation types</li>
5702 <li>Concept declarations</li>
5704 <li>Implement bootstrap RIs in VM opcodes</li>
5706 <li>Pugs might be using MO</li>
5709 <li>I'm not really sure</li>
5710 <li>It was ported a while ago</li>
5717 <!-- BEGIN slide -->
5720 <h1>Introducing new concepts</h1>
5721 <small>continued...</small>
5727 <!-- BEGIN slide -->
5730 <h1>Introducing new concepts</h1>
5732 <li>Roles are the shit</li>
5734 <small>continued...</small>
5740 <!-- BEGIN slide -->
5743 <h1>Introducing new concepts</h1>
5745 <li>Roles are the shit</li>
5746 <li>But what about next week's fad?</li>
5748 <small>continued...</small>
5754 <!-- BEGIN slide -->
5757 <h1>Introducing new concepts</h1>
5759 <li>Roles are the shit</li>
5760 <li>But what about next week's fad?</li>
5761 <li>MO lets you introduce a new concept</li>
5763 <small>continued...</small>
5769 <!-- BEGIN slide -->
5772 <h1>Introducing new concepts</h1>
5774 <li>Roles are the shit</li>
5775 <li>But what about next week's fad?</li>
5776 <li>MO lets you introduce a new concept</li>
5779 <li>Arbitrary at compile time</li>
5781 <small>continued...</small>
5787 <!-- BEGIN slide -->
5790 <h1>Introducing new concepts</h1>
5792 <li>Roles are the shit</li>
5793 <li>But what about next week's fad?</li>
5794 <li>MO lets you introduce a new concept</li>
5797 <li>Arbitrary at compile time</li>
5798 <li>RI protocol at runtime</li>
5805 <!-- BEGIN slide -->
5808 <h1>Example - Prototype Objects</h1>
5809 <small>continued...</small>
5815 <!-- BEGIN slide -->
5818 <h1>Example - Prototype Objects</h1>
5820 <li>One shared RI</li>
5822 <pre class="vim"> sub dispatch {
5823 my ( $object, $invocation ) = @_;
5825 my $method = $object->{ $invocation->name };
5827 $object->$method( $invocation->arguments );
5835 <!-- BEGIN slide -->
5837 <img name="img" id="img" width="350" src="images/village_people.jpg" align=right>
5838 <h1>Example - Attribute Grammars</h1>
5842 <small>continued...</small>
5848 <!-- BEGIN slide -->
5850 <img name="img" id="img" width="350" src="images/village_people.jpg" align=right>
5851 <h1>Example - Attribute Grammars</h1>
5856 <li>Crazy stuff from the 1970s</li>
5858 <small>continued...</small>
5864 <!-- BEGIN slide -->
5866 <img name="img" id="img" width="350" src="images/village_people.jpg" align=right>
5867 <h1>Example - Attribute Grammars</h1>
5872 <li>Crazy stuff from the 1970s</li>
5873 <li>Renewed interest in <span class="html">λ</span> land </li>
5875 <small>continued...</small>
5881 <!-- BEGIN slide -->
5883 <img name="img" id="img" width="350" src="images/village_people.jpg" align=right>
5884 <h1>Example - Attribute Grammars</h1>
5889 <li>Crazy stuff from the 1970s</li>
5890 <li>Renewed interest in <span class="html">λ</span> land </li>
5891 <li>Was pretty easy in MO</li>
5898 <!-- BEGIN slide -->
5900 <img name="img" id="img" width="350" src="images/grammar.gif" align=right>
5901 <h1>Attribute Grammer Implementation</h1>
5905 <small>continued...</small>
5911 <!-- BEGIN slide -->
5913 <img name="img" id="img" width="350" src="images/grammar.gif" align=right>
5914 <h1>Attribute Grammer Implementation</h1>
5919 <li>Introduce new concept objects</li>
5921 <small>continued...</small>
5927 <!-- BEGIN slide -->
5929 <img name="img" id="img" width="350" src="images/grammar.gif" align=right>
5930 <h1>Attribute Grammer Implementation</h1>
5935 <li>Introduce new concept objects</li>
5938 <li>Attribute Grammar</li>
5940 <small>continued...</small>
5946 <!-- BEGIN slide -->
5948 <img name="img" id="img" width="350" src="images/grammar.gif" align=right>
5949 <h1>Attribute Grammer Implementation</h1>
5954 <li>Introduce new concept objects</li>
5957 <li>Attribute Grammar</li>
5958 <li>Attribute Grammer Instance - one per AG per class</li>
5960 <small>continued...</small>
5966 <!-- BEGIN slide -->
5968 <img name="img" id="img" width="350" src="images/grammar.gif" align=right>
5969 <h1>Attribute Grammer Implementation</h1>
5974 <li>Introduce new concept objects</li>
5977 <li>Attribute Grammar</li>
5978 <li>Attribute Grammer Instance - one per AG per class</li>
5980 <li>Runtime specialized RI</li>
5982 <small>continued...</small>
5988 <!-- BEGIN slide -->
5990 <img name="img" id="img" width="350" src="images/grammar.gif" align=right>
5991 <h1>Attribute Grammer Implementation</h1>
5996 <li>Introduce new concept objects</li>
5999 <li>Attribute Grammar</li>
6000 <li>Attribute Grammer Instance - one per AG per class</li>
6002 <li>Runtime specialized RI</li>
6005 <li>Shadows any RI with additional context sensitive methods</li>
6007 <small>continued...</small>
6013 <!-- BEGIN slide -->
6015 <img name="img" id="img" width="350" src="images/grammar.gif" align=right>
6016 <h1>Attribute Grammer Implementation</h1>
6021 <li>Introduce new concept objects</li>
6024 <li>Attribute Grammar</li>
6025 <li>Attribute Grammer Instance - one per AG per class</li>
6027 <li>Runtime specialized RI</li>
6030 <li>Shadows any RI with additional context sensitive methods</li>
6032 <li>Additional runtime support code</li>
6039 <!-- BEGIN slide -->
6041 <img name="img" id="img" width="350" src="images/checklist.jpg" align=right>
6046 <small>continued...</small>
6052 <!-- BEGIN slide -->
6054 <img name="img" id="img" width="350" src="images/checklist.jpg" align=right>
6060 <li>Write a sugar layer</li>
6062 <small>continued...</small>
6068 <!-- BEGIN slide -->
6070 <img name="img" id="img" width="350" src="images/checklist.jpg" align=right>
6076 <li>Write a sugar layer</li>
6079 <li>Make it fun to use</li>
6081 <small>continued...</small>
6087 <!-- BEGIN slide -->
6089 <img name="img" id="img" width="350" src="images/checklist.jpg" align=right>
6095 <li>Write a sugar layer</li>
6098 <li>Make it fun to use</li>
6102 <small>continued...</small>
6108 <!-- BEGIN slide -->
6110 <img name="img" id="img" width="350" src="images/checklist.jpg" align=right>
6116 <li>Write a sugar layer</li>
6119 <li>Make it fun to use</li>
6122 <li>Refactor the Class objects</li>
6124 <small>continued...</small>
6130 <!-- BEGIN slide -->
6132 <img name="img" id="img" width="350" src="images/checklist.jpg" align=right>
6138 <li>Write a sugar layer</li>
6141 <li>Make it fun to use</li>
6144 <li>Refactor the Class objects</li>
6147 <li>Bloated example code</li>
6149 <small>continued...</small>
6155 <!-- BEGIN slide -->
6157 <img name="img" id="img" width="350" src="images/checklist.jpg" align=right>
6163 <li>Write a sugar layer</li>
6166 <li>Make it fun to use</li>
6169 <li>Refactor the Class objects</li>
6172 <li>Bloated example code</li>
6173 <li>There are some patterns to extract</li>
6175 <small>continued...</small>
6181 <!-- BEGIN slide -->
6183 <img name="img" id="img" width="350" src="images/checklist.jpg" align=right>
6189 <li>Write a sugar layer</li>
6192 <li>Make it fun to use</li>
6195 <li>Refactor the Class objects</li>
6198 <li>Bloated example code</li>
6199 <li>There are some patterns to extract</li>
6201 <li>Self hosting</li>
6208 <!-- BEGIN slide -->
6211 <h1>Self Hosting</h1>
6212 <small>continued...</small>
6218 <!-- BEGIN slide -->
6221 <h1>Self Hosting</h1>
6223 <li>Easier to maintain MO written in Moose</li>
6225 <small>continued...</small>
6231 <!-- BEGIN slide -->
6234 <h1>Self Hosting</h1>
6236 <li>Easier to maintain MO written in Moose</li>
6237 <li>Need to have clean syntax</li>
6239 <small>continued...</small>
6245 <!-- BEGIN slide -->
6248 <h1>Self Hosting</h1>
6250 <li>Easier to maintain MO written in Moose</li>
6251 <li>Need to have clean syntax</li>
6252 <li>Stable <tt>.pmc</tt> compilation</li>
6259 <!-- BEGIN slide -->
6261 <img name="img" id="img" width="350" src="images/istockphoto_2540021_painted_exclamation_mark.jpg" align=right>
6266 <small>continued...</small>
6272 <!-- BEGIN slide -->
6274 <img name="img" id="img" width="350" src="images/istockphoto_2540021_painted_exclamation_mark.jpg" align=right>
6280 <li>Meta code is awesome code</li>
6282 <small>continued...</small>
6288 <!-- BEGIN slide -->
6290 <img name="img" id="img" width="350" src="images/istockphoto_2540021_painted_exclamation_mark.jpg" align=right>
6296 <li>Meta code is awesome code</li>
6299 <li>Especially my meta code ;-)</li>
6306 <!-- BEGIN slide -->
6308 <img name="img" id="img" width="350" src="images/istockphoto_2540021_painted_exclamation_mark.jpg" align=right>
6314 <li>Meta code is awesome code</li>
6316 <small>continued...</small>
6322 <!-- BEGIN slide -->
6324 <img name="img" id="img" width="350" src="images/istockphoto_2540021_painted_exclamation_mark.jpg" align=right>
6330 <li>Meta code is awesome code</li>
6333 <li>Lets you program in new ways</li>
6335 <small>continued...</small>
6341 <!-- BEGIN slide -->
6343 <img name="img" id="img" width="350" src="images/istockphoto_2540021_painted_exclamation_mark.jpg" align=right>
6349 <li>Meta code is awesome code</li>
6352 <li>Lets you program in new ways</li>
6353 <li>Helps you take care of your other code</li>
6355 <small>continued...</small>
6361 <!-- BEGIN slide -->
6363 <img name="img" id="img" width="350" src="images/istockphoto_2540021_painted_exclamation_mark.jpg" align=right>
6369 <li>Meta code is awesome code</li>
6372 <li>Lets you program in new ways</li>
6373 <li>Helps you take care of your other code</li>
6375 <li>Meta code is important code</li>
6377 <small>continued...</small>
6383 <!-- BEGIN slide -->
6385 <img name="img" id="img" width="350" src="images/istockphoto_2540021_painted_exclamation_mark.jpg" align=right>
6391 <li>Meta code is awesome code</li>
6394 <li>Lets you program in new ways</li>
6395 <li>Helps you take care of your other code</li>
6397 <li>Meta code is important code</li>
6400 <li>It can affect <strong>anything</strong></li>
6402 <small>continued...</small>
6408 <!-- BEGIN slide -->
6410 <img name="img" id="img" width="350" src="images/istockphoto_2540021_painted_exclamation_mark.jpg" align=right>
6416 <li>Meta code is awesome code</li>
6419 <li>Lets you program in new ways</li>
6420 <li>Helps you take care of your other code</li>
6422 <li>Meta code is important code</li>
6425 <li>It can affect <strong>anything</strong></li>
6426 <li>Keep it minimalistic, and clearly defined</li>
6428 <small>continued...</small>
6434 <!-- BEGIN slide -->
6436 <img name="img" id="img" width="350" src="images/istockphoto_2540021_painted_exclamation_mark.jpg" align=right>
6442 <li>Meta code is awesome code</li>
6445 <li>Lets you program in new ways</li>
6446 <li>Helps you take care of your other code</li>
6448 <li>Meta code is important code</li>
6451 <li>It can affect <strong>anything</strong></li>
6452 <li>Keep it minimalistic, and clearly defined</li>
6453 <li>No spaghetti monsters</li>
6455 <small>continued...</small>
6461 <!-- BEGIN slide -->
6463 <img name="img" id="img" width="350" src="images/istockphoto_2540021_painted_exclamation_mark.jpg" align=right>
6469 <li>Meta code is awesome code</li>
6472 <li>Lets you program in new ways</li>
6473 <li>Helps you take care of your other code</li>
6475 <li>Meta code is important code</li>
6478 <li>It can affect <strong>anything</strong></li>
6479 <li>Keep it minimalistic, and clearly defined</li>
6480 <li>No spaghetti monsters</li>
6482 <li>Meta code can be simple</li>
6484 <small>continued...</small>
6490 <!-- BEGIN slide -->
6492 <img name="img" id="img" width="350" src="images/istockphoto_2540021_painted_exclamation_mark.jpg" align=right>
6498 <li>Meta code is awesome code</li>
6501 <li>Lets you program in new ways</li>
6502 <li>Helps you take care of your other code</li>
6504 <li>Meta code is important code</li>
6507 <li>It can affect <strong>anything</strong></li>
6508 <li>Keep it minimalistic, and clearly defined</li>
6509 <li>No spaghetti monsters</li>
6511 <li>Meta code can be simple</li>
6514 <li>Only complicated if you aren't careful</li>
6521 <!-- BEGIN slide -->
6523 <img name="img" id="img" width="350" src="images/thanks.jpg" align=right>