parrot in a nutshell

32
Parrot in a nutshell 1 Parrot in a Nutshell Dan Sugalski [email protected]

Upload: mariko

Post on 22-Jan-2016

41 views

Category:

Documents


0 download

DESCRIPTION

Parrot in a Nutshell. Dan Sugalski [email protected]. What is Parrot. The interpreter for perl 6 A multi-language virtual machine An April Fools joke gotten out of hand. The official point of Parrot. Build something to support perl 6 Build a faster perl Build a cleaner perl. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Parrot in a Nutshell

Parrot in a nutshell 1

Parrot in a NutshellParrot in a Nutshell

Dan [email protected]

Page 2: Parrot in a Nutshell

Parrot in a nutshell 2

What is ParrotWhat is Parrot

• The interpreter for perl 6• A multi-language virtual

machine• An April Fools joke gotten out

of hand

Page 3: Parrot in a Nutshell

Parrot in a nutshell 3

The official point of ParrotThe official point of Parrot

• Build something to support perl 6• Build a faster perl• Build a cleaner perl

Page 4: Parrot in a Nutshell

Parrot in a nutshell 4

The Unofficial point of ParrotThe Unofficial point of Parrot

• Generic fast interpreter engine• Annoy the Mono folks• Really annoy the python people• Try and take over the world

Page 5: Parrot in a Nutshell

Parrot in a nutshell 5

Parrot’s guiding goalsParrot’s guiding goals

• Speed• Maintainability• Longevity• Extensibility• Flexibility

Page 6: Parrot in a Nutshell

Parrot in a nutshell 6

SpeedSpeed

• Faster is good• A slow interpreter is of little use• Things almost never get any faster• Parrot sets the maximum speed

Page 7: Parrot in a Nutshell

Parrot in a nutshell 7

MaintainabilityMaintainability

• Try and keep things black-box• Try and enforce a coding standard• Open Source projects have limited

engineering resources• Things rarely get more maintainable• Maintenance always consumes the

most resources for projects that actually finish

Page 8: Parrot in a Nutshell

Parrot in a nutshell 8

LongevityLongevity

• Software always lives on well past the point you think it should

• Designing for long-term expandability puts off the inevitable rewrites

• We’re going to be looking at this code for the better part of a decade, so we’d best make sure we want to look at it

Page 9: Parrot in a Nutshell

Parrot in a nutshell 9

ExtensibilityExtensibility

• Everyone wants to add on with C• Things are never quite fast enough• There are lots of external libraries

worth using• A good extension mechanism is a

great thing• A bad one really hurts

Page 10: Parrot in a Nutshell

Parrot in a nutshell 10

FlexibilityFlexibility

• General solutions have more long-term potential than specific ones

• People always do things you don’t expect

• If you plan for it now, it doesn’t cost more later

• Even if it costs a little more now

Page 11: Parrot in a Nutshell

Parrot in a nutshell 11

Multi-language capabilitiesMulti-language capabilities

• Support perl• Support Dynamic Languages in

general• Nice target for language designers

Page 12: Parrot in a Nutshell

Parrot in a nutshell 12

Support perlSupport perl

• Perl 6 was the reason this all started

• Perl has the most complex semantics of all the dynamic languages in common use

• Perl is a major pain to implement, as languages go

Page 13: Parrot in a Nutshell

Parrot in a nutshell 13

Support Dynamic Languages in general

Support Dynamic Languages in general

• Includes Ruby and Python, for example

• Languages that have some compile-time uncertainty

• Actually trivial, just a matter of thinking about it

Page 14: Parrot in a Nutshell

Parrot in a nutshell 14

Nice TargetNice Target

• If we express all the semantics, it makes it easier for language designers

• Many now target C, or GCC• Impedance mismatch lower for

many languages

Page 15: Parrot in a Nutshell

Parrot in a nutshell 15

Play Zork nativelyPlay Zork natively

• Yep, that’s right• parrot -b:zmachine zork.dat• Doing this right is harder than

doing Java, Python, or .NET bytecode

• If we can do this, we can do anyone’s bytecode

• Plus it’s really cool

Page 16: Parrot in a Nutshell

Parrot in a nutshell 16

Interpreter basicsInterpreter basics

• Chunk of software that executes other software

• A CPU in software• Generally flexible• Generally slow• Easy to write for• Easy to write• Portable

Page 17: Parrot in a Nutshell

Parrot in a nutshell 17

CPU in softwareCPU in software

• It’s the “V” in VM• The compiler writer can treat the

interpreter as a form of CPU chip• Allows much easier customization

of ‘core’ behavior• Sometimes software does become

hardware• But often it shouldn’t

Page 18: Parrot in a Nutshell

Parrot in a nutshell 18

Generally flexibleGenerally flexible

• Since the core functionality is in software, it’s changeable

• Software generally has fewer limits to it than hardware

• It’s easier to think about software than hardware, so more people can

• Incremental cost of changes much lower

Page 19: Parrot in a Nutshell

Parrot in a nutshell 19

Generally slowGenerally slow

• It’s a layer of indirection between the user’s program and the hardware that executes it

• It’s very easy to have impedance mismatch problems

• It’s also very easy to let speed dribble away

Page 20: Parrot in a Nutshell

Parrot in a nutshell 20

Easy to write forEasy to write for

• It’s easy to gloss over the tough parts

• The interpreter should express itself in ways that are easy to use

• You built it as the target, so if it isn’t, you’ve done something wrong

Page 21: Parrot in a Nutshell

Parrot in a nutshell 21

Easy to writeEasy to write

• Interpreters are pure semantics, and semantics aren’t that difficult to express

• Though defining the semantics can take much longer

• A simple interpreter can be put together in a week

• (Though parrot is far from simple)• Just a SMOP, even for the fancy ones

Page 22: Parrot in a Nutshell

Parrot in a nutshell 22

PortablePortable

• Generally the expressed semantics are mostly platform-neutral

• Means the platform-specific stuff can be isolated

• Platform specific but unimplemented things can be emulated

• Normally just a small cluster of really nasty code to deal with

Page 23: Parrot in a Nutshell

Parrot in a nutshell 23

Core Parrot ConceptsCore Parrot Concepts

• Register based• Language Neutral• Very high level• Introspective• Mutable• Threaded• With continuations

Page 24: Parrot in a Nutshell

Parrot in a nutshell 24

Register BasedRegister Based

• 32 each Integer, String, Float, and PMC

• Registers are a kind of named temporary slot for the interpreter

• Modeled on hardware CPUs• Generally more efficient than a

pure stack-based model

Page 25: Parrot in a Nutshell

Parrot in a nutshell 25

Language NeutralLanguage Neutral

• In the human sense• We don’t force ASCII, Unicode,

Latin-1, or EBCDIC on the user• The engine has facilities to deal with

data regardless of its encoding• Important when dealing with native-

language text, which is most text

Page 26: Parrot in a Nutshell

Parrot in a nutshell 26

Very high levelVery high level

• Threads, closures, continuations, aggregate operations, multimethod dispatch all core elements

• Don’t relegate the hard stuff to libraries

• Easier on compiler writers• Bit more of a pain for the interpreter

implementers

Page 27: Parrot in a Nutshell

Parrot in a nutshell 27

IntrospectiveIntrospective

• Code can inspect the current state of the interpreter

• Most, if not all, the core data structures are accessible

• Includes stack entries, symbol tables, lexical variables

• Also variable arenas, memory pools, and interpreter statistics

Page 28: Parrot in a Nutshell

Parrot in a nutshell 28

MutableMutable

• Code can be created on the fly• Libraries can be dynamically

loaded• Opcodes can be redefined on the

fly• Base variable methods can be

overridden at runtime

Page 29: Parrot in a Nutshell

Parrot in a nutshell 29

ThreadedThreaded

• Threads are a core element of Parrot

• Threading interpreters is an interesting task

• For nasty values of “interesting”• They must be designed in from the

start

Page 30: Parrot in a Nutshell

Parrot in a nutshell 30

With ContinuationsWith Continuations

• Really odd Lisp thing• Sort of like a closure for control flow• For reference, exceptions are a

simplified kind of continuation• They will rot your brain• If your brain’s already gone, though,

they let you do some Terribly Clever Things

Page 31: Parrot in a Nutshell

Parrot in a nutshell 31

Quick benchmark numbersQuick benchmark numbers

Simple MOPS benchmarkRuby 1.6.6: 207 SecPerl 5.6.0: 165 SecPython 2.2: 136 SecParrot: 18.75 SecParrot (faster): 9 SecParrot (fastest): 4.9 Sec

Page 32: Parrot in a Nutshell

Parrot in a nutshell 32

Fetching ParrotFetching Parrot

• http://dev.perl.org• Anon

CVS :pserver:[email protected]:/cvs/public

• http://www.parrotcode.org