Was ist neu an Perl 6?
Herbert Breunung
Mansfelder Land
Mansfelder Land
Ägypten aka Khem
Was ist neu an Perl 6?
Was ist neu an Perl 5?

      rekursive Regex

      named captures

        smartmatch
Was ist neu an Perl 5?
              Moose

             TryCatch

            Perl::Critic

  Catalyst / Mojo / Dancer / Plack
Was ist neu an Perl 5?

       Task::Kensho

       Eiskreme Perl

      Padre / Kephra
Perl 6
Der heilige Gral
Auf der Suche ...
Suche nach dem ver...
19. Juli 2000
Altlasten
           ●   ewig veraltete ' package syntax

●   schlecht funktionierende do{ } while() schleifen

     ●   unmoderne OOP & Parameterübergabe

               ●   kryptische Spezialvariablen

          ●   aufwändig zu ändernde Innereien

                             ●   XS
Entwicklung der Syntax
       ●   Apokalypsen

           ●   Exegesen

           ●   Synopsen
Entwicklung der Syntax
       ●   Apokalypsen

           ●   Exegesen

           ●   Synopsen
Entwicklung der Syntax
                      ●   Apokalypsen

                          ●   Exegesen

                          ●   Synopsen

●   wiki.perl-community.de/bin/view/Wissensbasis/PerlTafel

                      ●   http://perl-6.de/
Entwicklung der Syntax
   ●   p6l (perl6-language@perl.org)

   ●   #perl6 (irc.freenode.org/perl6)
Entwicklung der Syntax
           ●   p6l (perl6-language@perl.org)

           ●   #perl6 (irc.freenode.org/perl6)

●   Larry Wall, Damian Conway, Patrick R. Michaud,
               Allison Randal, chromatic
Entwicklung der Syntax
             ●   p6l (perl6-language@perl.org)

             ●   #perl6 (irc.freenode.org/perl6)

●   Larry Wall, Damian Conway, Patrick R. Michaud,
               Allison Randal, chromatic

      ●   Dan Sugalski, Luke Palmer, Audrey Tang
Larry Wall
Larry Wall
Perl 5 - Philosophie

      TIMTOWTDI

    simple and possible

     context sensitive
Perl 6 - Philosophie

          TIMTOWTDI

          huffman coding

         context sensitive

waterbed theory of complexity
Perl 6 - Philosophie

            Tim Toady

          huffman coding

         context sensitive

waterbed theory of complexity
Freiheit
Freiheit
Freiheit
Freiheit

So wie ich denke, kann ich's auch
          aufschreiben.
Was ist neu an Perl 6?
Damian Conway
Was ist neu an Perl 6?
Freiheit

   So wie ich denke, kann ich's auch
             aufschreiben.

   Baut Grenzen zwischen Sprachen,
Programmierstilen und Ökosystemen ab.
The World of Unix (1987)




            C         shell
A new dimension




       C




                  shell
Perl 6 Syntax
Variablen
$scalar            $scalar

@array             @array
$array[0]          @array[0]
$array[-1]         @array[*-1]
@array[0..3]       @array[0..3]

%hash              %hash
 $hash{'key'}      %hash{'key'}
 $hash{'key'}      %hash<key>
@hash{'k1','k2'}   %hash<k1 k2>
Operator Roulette
      -> => .

      .   => ~

      =~ => ~~

     |&   => +| +&

     qw() => <>

      <> => .get

     ?:   => ?? !!
Spezialvar Roulette
     STDIN => $*IN

    @ARGS => $*ARGS

        $^V => $*PERLVER

       $^O => $*OS

    __LINE__ => $?LINE

        %+ => $/
Variable Ausgeben
print "$var n";   say $var;
Variable Ausgeben
print "$var n";                   say $var;


use Data::Dumper;
my @a = (1, 1, 2, 3, 5, 8, 13, 23, 36, [qw(a b c)]);
print Dumper(@a);
Variable Ausgeben
$VAR1 = 2;   2 3 4 5 6 7 7 2 5 ARRAY(0x568e94)
$VAR2 = 3;
$VAR3 = 4;
$VAR4 = 5;
$VAR5 = 6;
$VAR6 = 7;
$VAR7 = 7;
$VAR8 = 2;
$VAR9 = 5;
$VAR10 = [
      'a',
      'b',
      'c'
    ];       [2, 3, 4, 5, 6, 7, 7, 2, 5, ["a", "b", "c"]]
Variable Ausgeben
print "$var n";                   say $var;


use Data::Dumper;
my @a = (1, 1, 2, 3, 5, 8, 13, 23, 36, [qw(a b c)]);
print Dumper(@a);

my @a = 1, 1, 2, 3, 5, 8, 13, 23, 36, [<a b c>];
@a.perl.say;
kleines Spiel

my @a = ('A'..'Z');
print $a[int rand 26] for 1..3;



say ('A'..'Z').pick(3, :replace);
Shell auslesen

print "Was ist ... ";
chomp($ergebnis = <STDIN>);



$ergebnis = prompt "Was ist ... ";
Shell auslesen

print "Was ist ... ";
chomp($ergebnis = <STDIN>);



$ergebnis = prompt "Was ist ... ";
$ergebnis = $*IN.get;
Datei auslesen

$inhalt = do {
   open my $fh, '<', 'ordner/datei.txt';
   local $/;
   <$fh>
};

$inhalt = slurp 'ordner/datei.txt';
Datei zeilenweise

open my $fh, '<', 'ordner/datei.txt';
while (my $zeile = <$fh>) {
  chomp $zeile;



for lines 'ordner/datei.txt' -> $zeile {
for - Schleife

for my $zeile (@zeilen) { ...




for @zeilen -> $zeile { ...
for - Schleife

for (1 .. 5) { ...




for ^ 5 { ...
for - Schleife

for my $zeile (@zeilen) { ...




for @zeilen -> $zeile { ...
for - Schleife

while (@zahlen) { …
  my $a = shift @zahlen;
  my $a = shift @zahlen;



for @zahlen -> $a, $b { ...
for - Schleife
my %tabelle = (Paul => 1.78, Heinz => 2.03);
while (($name, $laenge) = each %tabelle) {
   say "$name ist $laenge lang.";
}


my %tabelle = (Paul => 1.78, Heinz => 2.03);
for %tabelle.kv -> $name, $länge {
  say "$name ist $länge lang.";
}
for - Schleife
my @c = (@za, @zb);
my $i = 0;
for (0 .. $#a + $#b){
  my $a = shift @{$c[$i]};
  $i = abs 1 - $i;


for @za Z @zb -> $a { …
Schleifen
for my $i (0 .. $#a) {
    my $a = @a[$i];
    my $b = @b[$i];
    my $c = @c[$i]; ...



for zip (@a; @b; @c) -> $a, $b, $c { ...
Schleifen
for my $i (0 .. $#a) {
  @c[$i] = @a[$i] + @b[$i];
}
Metaoperatoren
for my $i (0 .. $#a) {
  @c[$i] = @a[$i] + @b[$i];
}




@c = @a >> + << @b;
Metaoperatoren
my $summe;
$summe += $_ for @zahlen;




my $summe = [+] @zahlen;
Metaoperatoren
my $sortiert = 0;
for ($#zahlen – 1) {
   last unless $zahlen[$_] > $zahlen[$_ + 1];
   $sortiert = 1 if $_ == $#zahlen;
}


my $sortiert = [>] @zahlen;
Werte vergleichen

if ( 2 < $a and $a <= 7) { ...



if 2 < $a <= 7 { …
if $a ~~ 2^ .. 7 { ...
Junction

if ( $a == 2 or $a == 5 or $a == 7) { ...



if $a ~~ 2 | 5 |7 { ...
Junction

if $a ~~ 2 | 5 |7 { …



my @zahlen = 2, 5, 7;
if $a ~~ any(@zahlen) { …
Junction

if $a ~~ 2 | 5 |7 { …



my @zahlen = 2, 5, 7;
if $a ~~ any(@zahlen) { …

# alle in @ a müssen auch in @b vorkommen
if all(@a) ~~ any(@b) { …
Junction

if $a ~~ 2 | 5 |7 { …



my @zahlen = 2, 5, 7;
if $a ~~ any(@zahlen) { …

# identischer inhalt
if @a ~~ @b { …
Smartmatch

if $a ~~ 2 | 5 |7 { …



my @zahlen = 2, 5, 7;
if $a ~~ any(@zahlen) { …

# identischer inhalt
if @a ~~ @b { …
Signaturen
sub routine {
  my $a = shift;
  my $b = shift;
  return unless defined $b;
  my $c = shift;
}

sub routine ($a!, $b!, $c?) { … }
Signaturen
sub routine {
  my $a = shift;
  my $b = shift;
  return unless defined $b;
  my @rest = @_;
}

sub routine ($a!, $b!, *@rest) { … }
Signaturen
sub potenz {
   my $par = shift;
   $par->{b} ** $par->{e};
 }
potenz( {b => 2, e => 7} );


sub potenz (:$b, :$e) { $b ** $e }
potenz(b => 2, e => 7 );
Objekte

class UFO {

    has $.speed;

    method stop { $.speed = 0 }
}
Objekte
package UFO;

sub new {
    bless {speed => 0 }, shift;
}
sub length {
  my $self = shift;
  my $speed = shift;
  if ($speed) { $self->{speed} = $speed }
  else        { $self->{speed} }
}
sub stop {
  my $self = shift;
  $self->{speed} = 0;
}
Objekte
class UFO is Raumschiff {

    has $.speed;
    has $!crew;

    method stop { $.speed = 0 }
}

$arv = UFO.new();
$arv.speed = 20;
$arv.stop;
Roles
class WebCrawler does Log4Perl { … }

$objekt does Log4Perl;
Roles
class WebCrawler does Log4Perl { … }

$objekt does Log4Perl;


role Log4Perl {
  has @.log_lines;
  has $.log_size is rw = 100;
  method log_message($message) {
     ...
  }
}
Grammars
grammar Fließkommazahl {
  rule top {<vorzeichen>? <man> <exponent>? }
  token vorzeichen { + | - }
    rule man { . <ziffern> | <ziffern> [ . <ziffern>? ]? }
    rule exponent :i { e <vorzeichen>? <ziffern> }
    token ziffern { d+: }
}

Fließkommazahl.top("-6.02e+23");
say $/<exponent><sign>
Macros

macro postfix:<!>
Macros

macro postfix:<!> is equiv(&postfix:<++>) {
  [*] 1 .. $^n
}

say 5!;
> 120
Macros

macro circumfix:('<!-- -->') ($text) is parsed / .*? / { "" }
Macros

macro circumfix:('<!-- -->') ($text) is parsed / .*? / { "" }



augment slang Regex {
  token regex_metachar:<^> { ... }
}
Macros

macro circumfix:('<!-- -->') ($text) is parsed / .*? / { "" }



augment slang Regex {
  token regex_metachar:<^> { ... }
}

$?PARSER
Interpreter / Compiler
   Perl 6 auf Parrot => Rakudo
    Perl 6 auf CLR => Sprixel
     Perl 6 auf LLVM => vill
   Perl 6 auf SMOP => Mildew
    Perl 6 auf GHC => Pugs
     Perl 6 auf Perl 6 => elf
Pugs
       Audrey Tang

           GHC

Perl 6 Users Golfing System

         junction

          -O Fun
Parrot
1. April 2001
Parrot Code

#copy stdin to stdout, except for lines starting with #

while left_angle_right_angle:
    if dollar_underscore[0] =eq= "#":
        continue_next;
    }
    print dollar_underscore;
}
Parrot
●   VM (Virtuelle Maschine)
Parrot
●   VM (Virtuelle Maschine)

      ●   Software - CPU
Parrot
    ●   VM (Virtuelle Maschine)

●   native/magische Register
Parrot
    ●   VM (Virtuelle Maschine)

●   native/magische Register

            ●   Continuations
Parrot
    ●   VM (Virtuelle Maschine)

●   native/magische Register

            ●   Continuations

            ●   Dan Sugalski
Parrot
    ●   VM (Virtuelle Maschine)

●   native/magische Register

            ●   Continuations

            ●   Dan Sugalski

                ●   Mastermind
Parrot
         ●   VM (Virtuelle Maschine)

     ●   native/magische Register

                 ●   Continuations

                 ●   Dan Sugalski

●   Mastermind – Einzelkämpfer
Parrot
    ●   VM (Virtuelle Maschine)

●   native/magische Register

            ●   Continuations

            ●   Dan Sugalski

           ●    Allison Randal
Allison Randal
●   Exchefin der Perl Foundation
Allison Randal
●   Exchefin der Perl Foundation

         ●   Parrot Leiterin
Allison Randal
●   Exchefin der Perl Foundation

         ●   Parrot Leiterin

         ●   Parrot Hacker
Allison Randal
●   Exchefin der Perl Foundation

         ●   Parrot Leiterin

         ●   Parrot Hacker

         ●   Specschreiber
Allison Randal
●   Exchefin der Perl Foundation

         ●   Parrot Leiterin

         ●   Parrot Hacker

         ●   Specschreiber

             ●   TGE / Punie
Parrot's Sprachen
Parrot's Sprachen
   ●   .pbc Parrot bytecode
Parrot's Sprachen
   ●   .pbc Parrot bytecode

   ●   .pasm P. Assembler
Pasm
   new P0, 'PerlArray'
   set I0, 100000
   time N0
lp1:
   push P0, I0
   dec I0
   if I0, lp1
   time N1
   sub N1, N0
   print "constr.time "
   print N1
   print "n"
Parrot's Sprachen
   ●   .pbc Parrot bytecode

   ●   .pasm P. Assembler

   ●   .pir P. Intermed. Repr.
PIR
.sub main :main
      $I0 = 0 # initialized
      if $I0 goto l1
      $I1 = 1 # init in block 1
      goto l2
  l1:
      $I1 = 2 # init in block 2
  l2:
      print $I0
      print $I1 # all paths leading here do init
      print "n"
      end
.end
Parrot's Sprachen
      ●   .pbc Parrot bytecode

      ●   .pasm P. Assembler

      ●   .pir P. Intermed. Repr.

  ●   PGE P.Grammar Engine
Parrot's Sprachen
      ●   .pbc Parrot bytecode

      ●   .pasm P. Assembler

      ●   .pir P. Intermed. Repr.

  ●   PGE P.Grammar Engine
Parrot's Sprachen
      ●   .pbc Parrot bytecode

      ●   .pasm P. Assembler

      ●   .pir P. Intermed. Repr.

  ●   PGE P.Grammar Engine

      ●   NQP Not Quit Perl 6
Parrot's Sprachen
      ●   .pbc Parrot bytecode

      ●   .pasm P. Assembler

      ●   .pir P. Intermed. Repr.

  ●   PGE P.Grammar Engine

      ●   NQP Not Quite Perl 6
Parrot's Sprachen
      ●   .pbc Parrot bytecode

      ●   .pasm P. Assembler

      ●   .pir P. Intermed. Repr.

  ●   PGE P.Grammar Engine

                ●   NQPrx
Patrick Michaud

         Parrot

  Parrot Compiler Tools

          PGE

        Rakudo
Jonathan Worthington

    Rakudo, Blikost, Zavolaj
STD.pm

Syntaxregeln

 in P6 rules

Bootstrapping

In Benutzung
elf

STD.pm parsen

mithilfe von Ruby
kp6

Flavio Glock

   mp6

    p5

   pugs
SMOP
       Daniel Ruoso

          runloop

            in C

        simple MOP

sm0p / s1p → now RI / Mildew
mehr für alle
Perl 6 - Land
Noch Fragen?
Danke

Neuperl6

  • 1.
    Was ist neuan Perl 6?
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
    Was ist neuan Perl 6?
  • 7.
    Was ist neuan Perl 5? rekursive Regex named captures smartmatch
  • 8.
    Was ist neuan Perl 5? Moose TryCatch Perl::Critic Catalyst / Mojo / Dancer / Plack
  • 9.
    Was ist neuan Perl 5? Task::Kensho Eiskreme Perl Padre / Kephra
  • 10.
  • 12.
  • 13.
  • 14.
  • 15.
    Altlasten ● ewig veraltete ' package syntax ● schlecht funktionierende do{ } while() schleifen ● unmoderne OOP & Parameterübergabe ● kryptische Spezialvariablen ● aufwändig zu ändernde Innereien ● XS
  • 16.
    Entwicklung der Syntax ● Apokalypsen ● Exegesen ● Synopsen
  • 17.
    Entwicklung der Syntax ● Apokalypsen ● Exegesen ● Synopsen
  • 18.
    Entwicklung der Syntax ● Apokalypsen ● Exegesen ● Synopsen ● wiki.perl-community.de/bin/view/Wissensbasis/PerlTafel ● http://perl-6.de/
  • 19.
    Entwicklung der Syntax ● p6l (perl6-language@perl.org) ● #perl6 (irc.freenode.org/perl6)
  • 20.
    Entwicklung der Syntax ● p6l (perl6-language@perl.org) ● #perl6 (irc.freenode.org/perl6) ● Larry Wall, Damian Conway, Patrick R. Michaud, Allison Randal, chromatic
  • 21.
    Entwicklung der Syntax ● p6l (perl6-language@perl.org) ● #perl6 (irc.freenode.org/perl6) ● Larry Wall, Damian Conway, Patrick R. Michaud, Allison Randal, chromatic ● Dan Sugalski, Luke Palmer, Audrey Tang
  • 22.
  • 23.
  • 24.
    Perl 5 -Philosophie TIMTOWTDI simple and possible context sensitive
  • 25.
    Perl 6 -Philosophie TIMTOWTDI huffman coding context sensitive waterbed theory of complexity
  • 26.
    Perl 6 -Philosophie Tim Toady huffman coding context sensitive waterbed theory of complexity
  • 27.
  • 28.
  • 29.
  • 30.
    Freiheit So wie ichdenke, kann ich's auch aufschreiben.
  • 31.
    Was ist neuan Perl 6?
  • 32.
  • 33.
    Was ist neuan Perl 6?
  • 34.
    Freiheit So wie ich denke, kann ich's auch aufschreiben. Baut Grenzen zwischen Sprachen, Programmierstilen und Ökosystemen ab.
  • 35.
    The World ofUnix (1987) C shell
  • 36.
  • 37.
  • 38.
    Variablen $scalar $scalar @array @array $array[0] @array[0] $array[-1] @array[*-1] @array[0..3] @array[0..3] %hash %hash $hash{'key'} %hash{'key'} $hash{'key'} %hash<key> @hash{'k1','k2'} %hash<k1 k2>
  • 39.
    Operator Roulette -> => . . => ~ =~ => ~~ |& => +| +& qw() => <> <> => .get ?: => ?? !!
  • 40.
    Spezialvar Roulette STDIN => $*IN @ARGS => $*ARGS $^V => $*PERLVER $^O => $*OS __LINE__ => $?LINE %+ => $/
  • 41.
  • 42.
    Variable Ausgeben print "$varn"; say $var; use Data::Dumper; my @a = (1, 1, 2, 3, 5, 8, 13, 23, 36, [qw(a b c)]); print Dumper(@a);
  • 43.
    Variable Ausgeben $VAR1 =2; 2 3 4 5 6 7 7 2 5 ARRAY(0x568e94) $VAR2 = 3; $VAR3 = 4; $VAR4 = 5; $VAR5 = 6; $VAR6 = 7; $VAR7 = 7; $VAR8 = 2; $VAR9 = 5; $VAR10 = [ 'a', 'b', 'c' ]; [2, 3, 4, 5, 6, 7, 7, 2, 5, ["a", "b", "c"]]
  • 44.
    Variable Ausgeben print "$varn"; say $var; use Data::Dumper; my @a = (1, 1, 2, 3, 5, 8, 13, 23, 36, [qw(a b c)]); print Dumper(@a); my @a = 1, 1, 2, 3, 5, 8, 13, 23, 36, [<a b c>]; @a.perl.say;
  • 45.
    kleines Spiel my @a= ('A'..'Z'); print $a[int rand 26] for 1..3; say ('A'..'Z').pick(3, :replace);
  • 46.
    Shell auslesen print "Wasist ... "; chomp($ergebnis = <STDIN>); $ergebnis = prompt "Was ist ... ";
  • 47.
    Shell auslesen print "Wasist ... "; chomp($ergebnis = <STDIN>); $ergebnis = prompt "Was ist ... "; $ergebnis = $*IN.get;
  • 48.
    Datei auslesen $inhalt =do { open my $fh, '<', 'ordner/datei.txt'; local $/; <$fh> }; $inhalt = slurp 'ordner/datei.txt';
  • 49.
    Datei zeilenweise open my$fh, '<', 'ordner/datei.txt'; while (my $zeile = <$fh>) { chomp $zeile; for lines 'ordner/datei.txt' -> $zeile {
  • 50.
    for - Schleife formy $zeile (@zeilen) { ... for @zeilen -> $zeile { ...
  • 51.
    for - Schleife for(1 .. 5) { ... for ^ 5 { ...
  • 52.
    for - Schleife formy $zeile (@zeilen) { ... for @zeilen -> $zeile { ...
  • 53.
    for - Schleife while(@zahlen) { … my $a = shift @zahlen; my $a = shift @zahlen; for @zahlen -> $a, $b { ...
  • 54.
    for - Schleife my%tabelle = (Paul => 1.78, Heinz => 2.03); while (($name, $laenge) = each %tabelle) { say "$name ist $laenge lang."; } my %tabelle = (Paul => 1.78, Heinz => 2.03); for %tabelle.kv -> $name, $länge { say "$name ist $länge lang."; }
  • 55.
    for - Schleife my@c = (@za, @zb); my $i = 0; for (0 .. $#a + $#b){ my $a = shift @{$c[$i]}; $i = abs 1 - $i; for @za Z @zb -> $a { …
  • 56.
    Schleifen for my $i(0 .. $#a) { my $a = @a[$i]; my $b = @b[$i]; my $c = @c[$i]; ... for zip (@a; @b; @c) -> $a, $b, $c { ...
  • 57.
    Schleifen for my $i(0 .. $#a) { @c[$i] = @a[$i] + @b[$i]; }
  • 58.
    Metaoperatoren for my $i(0 .. $#a) { @c[$i] = @a[$i] + @b[$i]; } @c = @a >> + << @b;
  • 59.
    Metaoperatoren my $summe; $summe +=$_ for @zahlen; my $summe = [+] @zahlen;
  • 60.
    Metaoperatoren my $sortiert =0; for ($#zahlen – 1) { last unless $zahlen[$_] > $zahlen[$_ + 1]; $sortiert = 1 if $_ == $#zahlen; } my $sortiert = [>] @zahlen;
  • 61.
    Werte vergleichen if (2 < $a and $a <= 7) { ... if 2 < $a <= 7 { … if $a ~~ 2^ .. 7 { ...
  • 62.
    Junction if ( $a== 2 or $a == 5 or $a == 7) { ... if $a ~~ 2 | 5 |7 { ...
  • 63.
    Junction if $a ~~2 | 5 |7 { … my @zahlen = 2, 5, 7; if $a ~~ any(@zahlen) { …
  • 64.
    Junction if $a ~~2 | 5 |7 { … my @zahlen = 2, 5, 7; if $a ~~ any(@zahlen) { … # alle in @ a müssen auch in @b vorkommen if all(@a) ~~ any(@b) { …
  • 65.
    Junction if $a ~~2 | 5 |7 { … my @zahlen = 2, 5, 7; if $a ~~ any(@zahlen) { … # identischer inhalt if @a ~~ @b { …
  • 66.
    Smartmatch if $a ~~2 | 5 |7 { … my @zahlen = 2, 5, 7; if $a ~~ any(@zahlen) { … # identischer inhalt if @a ~~ @b { …
  • 67.
    Signaturen sub routine { my $a = shift; my $b = shift; return unless defined $b; my $c = shift; } sub routine ($a!, $b!, $c?) { … }
  • 68.
    Signaturen sub routine { my $a = shift; my $b = shift; return unless defined $b; my @rest = @_; } sub routine ($a!, $b!, *@rest) { … }
  • 69.
    Signaturen sub potenz { my $par = shift; $par->{b} ** $par->{e}; } potenz( {b => 2, e => 7} ); sub potenz (:$b, :$e) { $b ** $e } potenz(b => 2, e => 7 );
  • 70.
    Objekte class UFO { has $.speed; method stop { $.speed = 0 } }
  • 71.
    Objekte package UFO; sub new{ bless {speed => 0 }, shift; } sub length { my $self = shift; my $speed = shift; if ($speed) { $self->{speed} = $speed } else { $self->{speed} } } sub stop { my $self = shift; $self->{speed} = 0; }
  • 72.
    Objekte class UFO isRaumschiff { has $.speed; has $!crew; method stop { $.speed = 0 } } $arv = UFO.new(); $arv.speed = 20; $arv.stop;
  • 73.
    Roles class WebCrawler doesLog4Perl { … } $objekt does Log4Perl;
  • 74.
    Roles class WebCrawler doesLog4Perl { … } $objekt does Log4Perl; role Log4Perl { has @.log_lines; has $.log_size is rw = 100; method log_message($message) { ... } }
  • 75.
    Grammars grammar Fließkommazahl { rule top {<vorzeichen>? <man> <exponent>? } token vorzeichen { + | - } rule man { . <ziffern> | <ziffern> [ . <ziffern>? ]? } rule exponent :i { e <vorzeichen>? <ziffern> } token ziffern { d+: } } Fließkommazahl.top("-6.02e+23"); say $/<exponent><sign>
  • 76.
  • 77.
    Macros macro postfix:<!> isequiv(&postfix:<++>) { [*] 1 .. $^n } say 5!; > 120
  • 78.
    Macros macro circumfix:('<!-- -->')($text) is parsed / .*? / { "" }
  • 79.
    Macros macro circumfix:('<!-- -->')($text) is parsed / .*? / { "" } augment slang Regex { token regex_metachar:<^> { ... } }
  • 80.
    Macros macro circumfix:('<!-- -->')($text) is parsed / .*? / { "" } augment slang Regex { token regex_metachar:<^> { ... } } $?PARSER
  • 81.
    Interpreter / Compiler Perl 6 auf Parrot => Rakudo Perl 6 auf CLR => Sprixel Perl 6 auf LLVM => vill Perl 6 auf SMOP => Mildew Perl 6 auf GHC => Pugs Perl 6 auf Perl 6 => elf
  • 82.
    Pugs Audrey Tang GHC Perl 6 Users Golfing System junction -O Fun
  • 83.
  • 84.
  • 85.
    Parrot Code #copy stdinto stdout, except for lines starting with # while left_angle_right_angle: if dollar_underscore[0] =eq= "#": continue_next; } print dollar_underscore; }
  • 86.
    Parrot ● VM (Virtuelle Maschine)
  • 87.
    Parrot ● VM (Virtuelle Maschine) ● Software - CPU
  • 88.
    Parrot ● VM (Virtuelle Maschine) ● native/magische Register
  • 89.
    Parrot ● VM (Virtuelle Maschine) ● native/magische Register ● Continuations
  • 90.
    Parrot ● VM (Virtuelle Maschine) ● native/magische Register ● Continuations ● Dan Sugalski
  • 91.
    Parrot ● VM (Virtuelle Maschine) ● native/magische Register ● Continuations ● Dan Sugalski ● Mastermind
  • 92.
    Parrot ● VM (Virtuelle Maschine) ● native/magische Register ● Continuations ● Dan Sugalski ● Mastermind – Einzelkämpfer
  • 93.
    Parrot ● VM (Virtuelle Maschine) ● native/magische Register ● Continuations ● Dan Sugalski ● Allison Randal
  • 94.
    Allison Randal ● Exchefin der Perl Foundation
  • 95.
    Allison Randal ● Exchefin der Perl Foundation ● Parrot Leiterin
  • 96.
    Allison Randal ● Exchefin der Perl Foundation ● Parrot Leiterin ● Parrot Hacker
  • 97.
    Allison Randal ● Exchefin der Perl Foundation ● Parrot Leiterin ● Parrot Hacker ● Specschreiber
  • 98.
    Allison Randal ● Exchefin der Perl Foundation ● Parrot Leiterin ● Parrot Hacker ● Specschreiber ● TGE / Punie
  • 99.
  • 100.
    Parrot's Sprachen ● .pbc Parrot bytecode
  • 101.
    Parrot's Sprachen ● .pbc Parrot bytecode ● .pasm P. Assembler
  • 102.
    Pasm new P0, 'PerlArray' set I0, 100000 time N0 lp1: push P0, I0 dec I0 if I0, lp1 time N1 sub N1, N0 print "constr.time " print N1 print "n"
  • 103.
    Parrot's Sprachen ● .pbc Parrot bytecode ● .pasm P. Assembler ● .pir P. Intermed. Repr.
  • 104.
    PIR .sub main :main $I0 = 0 # initialized if $I0 goto l1 $I1 = 1 # init in block 1 goto l2 l1: $I1 = 2 # init in block 2 l2: print $I0 print $I1 # all paths leading here do init print "n" end .end
  • 105.
    Parrot's Sprachen ● .pbc Parrot bytecode ● .pasm P. Assembler ● .pir P. Intermed. Repr. ● PGE P.Grammar Engine
  • 106.
    Parrot's Sprachen ● .pbc Parrot bytecode ● .pasm P. Assembler ● .pir P. Intermed. Repr. ● PGE P.Grammar Engine
  • 107.
    Parrot's Sprachen ● .pbc Parrot bytecode ● .pasm P. Assembler ● .pir P. Intermed. Repr. ● PGE P.Grammar Engine ● NQP Not Quit Perl 6
  • 108.
    Parrot's Sprachen ● .pbc Parrot bytecode ● .pasm P. Assembler ● .pir P. Intermed. Repr. ● PGE P.Grammar Engine ● NQP Not Quite Perl 6
  • 109.
    Parrot's Sprachen ● .pbc Parrot bytecode ● .pasm P. Assembler ● .pir P. Intermed. Repr. ● PGE P.Grammar Engine ● NQPrx
  • 110.
    Patrick Michaud Parrot Parrot Compiler Tools PGE Rakudo
  • 111.
    Jonathan Worthington Rakudo, Blikost, Zavolaj
  • 112.
    STD.pm Syntaxregeln in P6rules Bootstrapping In Benutzung
  • 113.
  • 114.
    kp6 Flavio Glock mp6 p5 pugs
  • 115.
    SMOP Daniel Ruoso runloop in C simple MOP sm0p / s1p → now RI / Mildew
  • 116.
  • 117.
  • 118.
  • 119.