%include "default.mgp" %default 1 bgrad %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page %nodefault %center, size 7, font "standard", fore "white", vgap 20 Parrot and Perl 6 %size 5 Simon Cozens %size 5 NetThink Open Source Consultants %page The Great Decision TPC 4, 2000, Monterey. %pause Emergency meeting called by Chip Salzenburg %pause Interrupted by Jon Orwant %pause Complete redesign proposed, and accepted at P5P meeting %pause Roles distributed %page The rewrite A complete, ground-up rewrite %pause Redesign of language and internals %pause Not afraid to break backwards compatibility %pause This did not please everyone %pause Least of all me... %page The process RFCs: Community suggestions for redesign %pause PDDs: "Official" implementation documents %pause Apocalypses: Revelations of Larry's design %pause Exegeses: Damian's user-oriented explanations %pause Metamorphoses: (to come) "Translations" of the Perl Cookbook %page The Parrot Sketch Kick-ass AFJ, needing a cast of thousands %pause Secret, serious idea... %pause ... to produce a dynamic, "shared" bytecode interpreter %pause to rival the .NET CLR %pause Plan solidified after TPC 2001 at ESR's house %page Relationship to .NET %pause .NET CLR only likes things that look like C# %pause Perl 6 could not look much less like C# %pause Static versus dynamic %pause Impedence mismatch %pause Same goes for mono %page The implementation Dan Sugalski producing an internals design %pause Your humble servant, chief implementor %pause Six CVS committers %pause 30k lines of code so far %pause More needed %page Overall design Bytecode interpreter %pause Fed bytecode from compiler front-end %pause Tight loop executing the bytecode %pause It's register based %pause 32 x 4 registers %pause Handles GC, finalization, ... %page Language Independence %pause If we're to be truly language-independent... %pause can't make assumptions about variable behaviour %pause But still want macro-ops %pause So what to do? %page PMCs %pause Parrot (originally "Perl") Magic Cookies %pause "Magic" because we don't want you to poke inside them %pause Doesn't that sound like an object to you? %pause Language-specific behavior implemented in methods and classes %page PMCs and vtables %pause Methods are vtables, structs of function pointers %pause Dan came up with the initial design %pause Then I noticed that Python does exactly this %pause So I stole it %page Other cool things %pause user-defined opcodes %pause sifo-like (non)standard IO subsystem %pause Proper threading support! %page Current status %pause Initial release 10/09/2001 %pause Read/write bytecode, simple operations on registers %pause 0.0.2 release 05/10/2001 %pause Portability release %pause Core platforms: Linux, FreeBSD, Cygwin, Tru64, Win32, OpenVMS, Solaris Sparc %pause Minilanguages %page Future status %pause 0.0.3 release was scheduled for last week, but I didn't get enough coding time %pause Will support Perl scalar PMCs %pause 0.0.4 release will support simple arrays and hashes %pause 0.0.5 release will support subroutines, lexical variables and more