fbpx
Wikipedia

Parrot virtual machine

Parrot is a discontinued register-based process virtual machine designed to run dynamic languages efficiently. It is possible to compile Parrot assembly language and Parrot intermediate representation (PIR, an intermediate language) to Parrot bytecode and execute it. Parrot is free and open-source software.[2]

Parrot virtual machine
Final release
8.1.0 / February 16, 2016; 8 years ago (2016-02-16)[1]
Repository
  • github.com/parrot/parrot
Written inC
Operating systemCross-platform
SuccessorMoarVM (for Raku)
TypeVirtual machine
LicenseArtistic License 2.0
Websitewww.parrot.org

Parrot was started by the Perl community and developed with help from the open-source and free software communities. As a result, it was focused on license compatibility with Perl (Artistic License 2.0), platform compatibility across a broad array of systems, processor architecture compatibility across most modern processors, speed of execution, small size (around 700k depending on platform), and the flexibility to handle the varying demands made by Raku and other modern dynamic languages.

Version 1.0, with a stable application programming interface (API) for development, was released on March 17, 2009.[3] The last version is release 8.1.0 "Andean Parakeet".[1] Parrot was officially discontinued in August 2021, after being supplanted by MoarVM in its main use (Raku) and never becoming a mainstream VM for any of its other supported languages.[4]

History edit

The name Parrot came from an April Fool's joke which announced a hypothetical language, named Parrot, that would unify Python and Perl.[5][6] The name was later adopted by the Parrot project (initially a part of the Raku development effort) which aimed to support Raku, Python, and other programming languages.

The Parrot Foundation was dissolved in 2014.[7] The Foundation was created in 2008 to hold the copyright and trademarks of the Parrot project, to help drive development of language implementations and the core codebase, to provide a base for growing the Parrot community, and to reach out to other language communities.[8]

Historical design decisions are documented in the form of Parrot Design Documents, or PDDs, in the Parrot repository.[9]

Until late 2005, Dan Sugalski was the lead designer and chief architect of Parrot. Chip Salzenberg, a longtime Perl, Linux kernel, and C++ hacker, took over until mid-2006, when he became the lead developer. Allison Randal, the lead developer of Punie and chief architect of Parrot's compiler tools, was the chief architect until mid-October 2010 when she stepped down and chose Christoph Otto as the new chief architect.[10]

Languages edit

The goal of the Parrot virtual machine was to host client languages and allow inter-operation between them. Several hurdles exist in accomplishing this goal, in particular the difficulty of mapping high-level concepts, data, and data structures between languages.

Static and dynamic languages edit

The differing properties of statically and dynamically typed languages motivated the design of Parrot. Current popular virtual machines such as the Java virtual machine and the Common Language Runtime, for the .NET platform, have been designed for statically typed languages, while the languages targeted by Parrot are dynamically typed.

Virtual machines such as the Java virtual machine and the current Perl 5 virtual machine are also stack based. Parrot developers chose a register-based design, reasoning that it more closely resembles a hardware design, allowing the vast literature on compiler optimization to be used in generating bytecode for the Parrot virtual machine that could run at speeds closer to machine code[citation needed]. Other register-based virtual machines inspired parts of Parrot's design, including LLVM, the Lua VM and Inferno's Dis.

Functional concepts edit

Parrot has rich support for several features of functional programming including closures and continuations, both of which can be particularly difficult to implement correctly and portably, especially in conjunction with exception handling and threading. The biggest advantage is the dynamic extendability of objects with methods, which allows for polymorphic containers (PMCs) and associated opcodes. Implementing solutions to these problems at the virtual machine level obviates the need to solve these problems in the individual client languages.

Compiler tools edit

Parrot provides a suite of compiler-writing tools[11] which includes the Parser Grammar Engine (PGE), a hybrid parser-generator that can express a recursive descent parser as well as an operator-precedence parser, allowing free transition between the two in a single grammar. The PGE feeds into the Tree Grammar Engine (TGE) which further transforms the parse-tree generated by PGE for optimization and ultimately for code generation.

Implementations edit

The most complete language implementations targeting the Parrot VM were Raku (known at the time as Rakudo Perl 6), Lua and a new language called "Winxed".[12] Projects to implement many other languages were started, including PHP, Python, and Ruby; along with esoteric and demonstration languages such as Befunge and the "squaak" tutorial language.[13] None of these projects were successful in becoming the primary implementation of their respective languages.[4]

Internals edit

There are three forms of program code for Parrot:

  • Bytecode[14] is binary and is natively interpreted by Parrot. Bytecode is usually stored in files with the filename extension ".pbc".
  • Parrot assembly language (PASM) is the low level language that compiles down to bytecode. PASM code is usually stored in files with the filename extension ".pasm".
  • Parrot intermediate representation (PIR[15]) is a slightly higher level language than PASM and also compiles down to bytecode. It is the primary target of language implementations. PIR transparently manages Parrot's inter-routine calling conventions, provides improved syntax, register allocation, and more. PIR code is usually stored in files with the filename extension ".pir".

Examples edit

Registers edit

Parrot is register-based like most hardware CPUs, and unlike most virtual machines, which are stack-based. Parrot provides four types of registers:

Parrot provides an arbitrary number of registers; this number is fixed at compile time per subroutine.

Arithmetic operations edit

In PASM

 set I1, 4  inc I1 # I1 is now 5  add I1, 2 # I1 is now 7  set N1, 42.0  dec N1 # N1 is now 41.0  sub N1, 2.0 # N1 is now 39.0  print I1  print ', '  print N1  print "\n"  end 

In PIR

 .sub 'main' :main $I1 = 4 inc $I1 # $I1 is now 5 $I1 += 2 # $I1 is now 7 $N1 = 42.0 dec $N1 # $N1 is now 41.0 $N1 -= 2.0 # $N1 now 39.0 print $I1 print ', ' print $N1 print "\n" .end 

See also edit

References edit

  1. ^ a b "New supported release 8.1.0 "Andean Parakeet"". Parrot Foundation. 2016-02-16. Retrieved 2016-09-26.
  2. ^ (PDF). Parrot Foundation. Archived from the original (PDF) on 2010-08-16. Retrieved 2009-03-18.
  3. ^ . Parrot Foundation. 2008-11-20. Archived from the original on 2010-04-15. Retrieved 2008-11-20.
  4. ^ a b "Inactive Parrot | Parrot VM". www.parrot.org.
  5. ^ "The Story Behind the Parrot Prank - O'Reilly Media". Oreilly.com. 2001-04-06. Retrieved 2014-02-25.
  6. ^ . Perl.com. Archived from the original on 2010-07-18. Retrieved 2014-02-25.
  7. ^ "Corporations Advanced Search". Washington State Department of Licensing. UBI 602 839 536. Retrieved 2021-04-09.
  8. ^ Announcing the Parrot Foundation June 29, 2008, at the Wayback Machine
  9. ^ "Parrot 6.1.0 - Parrot Design Documents (PDDs)". Docs.parrot.org. Retrieved 2014-02-25.
  10. ^ Otto, Christoph (2010-10-21). "reparrot: Parrot has a new architect. What now?". Reparrot.blogspot.com. Retrieved 2014-02-25.
  11. ^ [1] May 9, 2009, at the Wayback Machine
  12. ^ "Languages - Parrot VM". parrot.org. Retrieved 2023-11-18.
  13. ^ "Languages – Parrot". Parrot development wiki. Retrieved 2023-11-18.
  14. ^ . Archived from the original on 2008-12-24. Retrieved 2009-07-15.
  15. ^ [2] July 20, 2009, at the Wayback Machine

External links edit

  • Official website
  • Perl 6 and Parrot links

parrot, virtual, machine, this, article, needs, updated, please, help, update, this, article, reflect, recent, events, newly, available, information, august, 2022, parrot, discontinued, register, based, process, virtual, machine, designed, dynamic, languages, . This article needs to be updated Please help update this article to reflect recent events or newly available information August 2022 Parrot is a discontinued register based process virtual machine designed to run dynamic languages efficiently It is possible to compile Parrot assembly language and Parrot intermediate representation PIR an intermediate language to Parrot bytecode and execute it Parrot is free and open source software 2 Parrot virtual machineFinal release8 1 0 February 16 2016 8 years ago 2016 02 16 1 Repositorygithub wbr com wbr parrot wbr parrotWritten inCOperating systemCross platformSuccessorMoarVM for Raku TypeVirtual machineLicenseArtistic License 2 0Websitewww wbr parrot wbr org Parrot was started by the Perl community and developed with help from the open source and free software communities As a result it was focused on license compatibility with Perl Artistic License 2 0 platform compatibility across a broad array of systems processor architecture compatibility across most modern processors speed of execution small size around 700k depending on platform and the flexibility to handle the varying demands made by Raku and other modern dynamic languages Version 1 0 with a stable application programming interface API for development was released on March 17 2009 3 The last version is release 8 1 0 Andean Parakeet 1 Parrot was officially discontinued in August 2021 after being supplanted by MoarVM in its main use Raku and never becoming a mainstream VM for any of its other supported languages 4 Contents 1 History 2 Languages 2 1 Static and dynamic languages 2 2 Functional concepts 2 3 Compiler tools 2 4 Implementations 3 Internals 4 Examples 4 1 Registers 4 2 Arithmetic operations 5 See also 6 References 7 External linksHistory editThe name Parrot came from an April Fool s joke which announced a hypothetical language named Parrot that would unify Python and Perl 5 6 The name was later adopted by the Parrot project initially a part of the Raku development effort which aimed to support Raku Python and other programming languages The Parrot Foundation was dissolved in 2014 7 The Foundation was created in 2008 to hold the copyright and trademarks of the Parrot project to help drive development of language implementations and the core codebase to provide a base for growing the Parrot community and to reach out to other language communities 8 Historical design decisions are documented in the form of Parrot Design Documents or PDDs in the Parrot repository 9 Until late 2005 Dan Sugalski was the lead designer and chief architect of Parrot Chip Salzenberg a longtime Perl Linux kernel and C hacker took over until mid 2006 when he became the lead developer Allison Randal the lead developer of Punie and chief architect of Parrot s compiler tools was the chief architect until mid October 2010 when she stepped down and chose Christoph Otto as the new chief architect 10 Languages editThe goal of the Parrot virtual machine was to host client languages and allow inter operation between them Several hurdles exist in accomplishing this goal in particular the difficulty of mapping high level concepts data and data structures between languages Static and dynamic languages edit The differing properties of statically and dynamically typed languages motivated the design of Parrot Current popular virtual machines such as the Java virtual machine and the Common Language Runtime for the NET platform have been designed for statically typed languages while the languages targeted by Parrot are dynamically typed Virtual machines such as the Java virtual machine and the current Perl 5 virtual machine are also stack based Parrot developers chose a register based design reasoning that it more closely resembles a hardware design allowing the vast literature on compiler optimization to be used in generating bytecode for the Parrot virtual machine that could run at speeds closer to machine code citation needed Other register based virtual machines inspired parts of Parrot s design including LLVM the Lua VM and Inferno s Dis Functional concepts edit Parrot has rich support for several features of functional programming including closures and continuations both of which can be particularly difficult to implement correctly and portably especially in conjunction with exception handling and threading The biggest advantage is the dynamic extendability of objects with methods which allows for polymorphic containers PMCs and associated opcodes Implementing solutions to these problems at the virtual machine level obviates the need to solve these problems in the individual client languages Compiler tools edit Main article Parser Grammar Engine Parrot provides a suite of compiler writing tools 11 which includes the Parser Grammar Engine PGE a hybrid parser generator that can express a recursive descent parser as well as an operator precedence parser allowing free transition between the two in a single grammar The PGE feeds into the Tree Grammar Engine TGE which further transforms the parse tree generated by PGE for optimization and ultimately for code generation Implementations edit The most complete language implementations targeting the Parrot VM were Raku known at the time as Rakudo Perl 6 Lua and a new language called Winxed 12 Projects to implement many other languages were started including PHP Python and Ruby along with esoteric and demonstration languages such as Befunge and the squaak tutorial language 13 None of these projects were successful in becoming the primary implementation of their respective languages 4 Internals editThere are three forms of program code for Parrot Bytecode 14 is binary and is natively interpreted by Parrot Bytecode is usually stored in files with the filename extension pbc Parrot assembly language PASM is the low level language that compiles down to bytecode PASM code is usually stored in files with the filename extension pasm Parrot intermediate representation PIR 15 is a slightly higher level language than PASM and also compiles down to bytecode It is the primary target of language implementations PIR transparently manages Parrot s inter routine calling conventions provides improved syntax register allocation and more PIR code is usually stored in files with the filename extension pir Examples editRegisters edit Parrot is register based like most hardware CPUs and unlike most virtual machines which are stack based Parrot provides four types of registers I native integer type N floating point numbers S advanced string registers with Unicode support P PMC or Polymorphic Container Parrot object type Parrot provides an arbitrary number of registers this number is fixed at compile time per subroutine Arithmetic operations edit In PASM set I1 4 inc I1 I1 is now 5 add I1 2 I1 is now 7 set N1 42 0 dec N1 N1 is now 41 0 sub N1 2 0 N1 is now 39 0 print I1 print print N1 print n end In PIR sub main main I1 4 inc I1 I1 is now 5 I1 2 I1 is now 7 N1 42 0 dec N1 N1 is now 41 0 N1 2 0 N1 now 39 0 print I1 print print N1 print n endSee also edit nbsp Free and open source software portal MoarVM GraalVM Common Language Runtime CLR Comparison of application virtual machines mod parrot Da Vinci MachineReferences edit a b New supported release 8 1 0 Andean Parakeet Parrot Foundation 2016 02 16 Retrieved 2016 09 26 Parrot Contributor License Agreement 1 0 PDF Parrot Foundation Archived from the original PDF on 2010 08 16 Retrieved 2009 03 18 Parrot Roadmap Parrot Foundation 2008 11 20 Archived from the original on 2010 04 15 Retrieved 2008 11 20 a b Inactive Parrot Parrot VM www parrot org The Story Behind the Parrot Prank O Reilly Media Oreilly com 2001 04 06 Retrieved 2014 02 25 Programming Parrot Perl com Archived from the original on 2010 07 18 Retrieved 2014 02 25 Corporations Advanced Search Washington State Department of Licensing UBI 602 839 536 Retrieved 2021 04 09 Announcing the Parrot Foundation Archived June 29 2008 at the Wayback Machine Parrot 6 1 0 Parrot Design Documents PDDs Docs parrot org Retrieved 2014 02 25 Otto Christoph 2010 10 21 reparrot Parrot has a new architect What now Reparrot blogspot com Retrieved 2014 02 25 1 Archived May 9 2009 at the Wayback Machine Languages Parrot VM parrot org Retrieved 2023 11 18 Languages Parrot Parrot development wiki Retrieved 2023 11 18 The Parrot Bytecode PBC Format parrotcode Archived from the original on 2008 12 24 Retrieved 2009 07 15 2 Archived July 20 2009 at the Wayback MachineExternal links editOfficial website Perl 6 and Parrot links Retrieved from https en wikipedia org w index php title Parrot virtual machine amp oldid 1221176279, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.