SlideShare uma empresa Scribd logo
1 de 119
Baixar para ler offline
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

Mais conteúdo relacionado

Destaque

Como confundir la “luz al final del túnel” con “un mercancías de frente”
Como confundir la “luz al final del túnel” con “un mercancías de frente”Como confundir la “luz al final del túnel” con “un mercancías de frente”
Como confundir la “luz al final del túnel” con “un mercancías de frente”Lagranpartida
 
Apache Falcon at Hadoop Summit 2013
Apache Falcon at Hadoop Summit 2013Apache Falcon at Hadoop Summit 2013
Apache Falcon at Hadoop Summit 2013Seetharam Venkatesh
 
What’s cool in the new and updated OSGi specs (DS, Cloud and more) - David Bo...
What’s cool in the new and updated OSGi specs (DS, Cloud and more) - David Bo...What’s cool in the new and updated OSGi specs (DS, Cloud and more) - David Bo...
What’s cool in the new and updated OSGi specs (DS, Cloud and more) - David Bo...mfrancis
 
Apache Falcon - Sanjeev Tripurari
Apache Falcon - Sanjeev TripurariApache Falcon - Sanjeev Tripurari
Apache Falcon - Sanjeev TripurariDevOpsBangalore
 
Perl 5.20: Feature, Kultur, Module, Werkzeuge
Perl 5.20: Feature, Kultur, Module, WerkzeugePerl 5.20: Feature, Kultur, Module, Werkzeuge
Perl 5.20: Feature, Kultur, Module, Werkzeugelichtkind
 
Perl 6 in Context
Perl 6 in ContextPerl 6 in Context
Perl 6 in Contextlichtkind
 
Data, The New Currency
Data, The New CurrencyData, The New Currency
Data, The New CurrencyDonald Miner
 

Destaque (8)

Como confundir la “luz al final del túnel” con “un mercancías de frente”
Como confundir la “luz al final del túnel” con “un mercancías de frente”Como confundir la “luz al final del túnel” con “un mercancías de frente”
Como confundir la “luz al final del túnel” con “un mercancías de frente”
 
Apache Falcon at Hadoop Summit 2013
Apache Falcon at Hadoop Summit 2013Apache Falcon at Hadoop Summit 2013
Apache Falcon at Hadoop Summit 2013
 
What’s cool in the new and updated OSGi specs (DS, Cloud and more) - David Bo...
What’s cool in the new and updated OSGi specs (DS, Cloud and more) - David Bo...What’s cool in the new and updated OSGi specs (DS, Cloud and more) - David Bo...
What’s cool in the new and updated OSGi specs (DS, Cloud and more) - David Bo...
 
Apache Falcon - Sanjeev Tripurari
Apache Falcon - Sanjeev TripurariApache Falcon - Sanjeev Tripurari
Apache Falcon - Sanjeev Tripurari
 
Java fx tools
Java fx toolsJava fx tools
Java fx tools
 
Perl 5.20: Feature, Kultur, Module, Werkzeuge
Perl 5.20: Feature, Kultur, Module, WerkzeugePerl 5.20: Feature, Kultur, Module, Werkzeuge
Perl 5.20: Feature, Kultur, Module, Werkzeuge
 
Perl 6 in Context
Perl 6 in ContextPerl 6 in Context
Perl 6 in Context
 
Data, The New Currency
Data, The New CurrencyData, The New Currency
Data, The New Currency
 

Semelhante a Neuperl6

Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Moscow.pm
 
UglifyJS 使用文档
UglifyJS 使用文档UglifyJS 使用文档
UglifyJS 使用文档明 李
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 

Semelhante a Neuperl6 (6)

Perl para sysadmins
Perl para sysadminsPerl para sysadmins
Perl para sysadmins
 
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
 
UglifyJS 使用文档
UglifyJS 使用文档UglifyJS 使用文档
UglifyJS 使用文档
 
Why Ruby?
Why Ruby?Why Ruby?
Why Ruby?
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
MS Swit 2010
MS Swit 2010MS Swit 2010
MS Swit 2010
 

Mais de lichtkind

Wx::Perl::Smart
Wx::Perl::SmartWx::Perl::Smart
Wx::Perl::Smartlichtkind
 
P6kontext2014
P6kontext2014P6kontext2014
P6kontext2014lichtkind
 
Complete Programming
Complete ProgrammingComplete Programming
Complete Programminglichtkind
 
P6 OO vs Moose (&Moo)
P6 OO vs Moose (&Moo)P6 OO vs Moose (&Moo)
P6 OO vs Moose (&Moo)lichtkind
 
Perl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz EditionPerl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz Editionlichtkind
 
Writing Perl 6 Rx
Writing Perl 6 RxWriting Perl 6 Rx
Writing Perl 6 Rxlichtkind
 
Wundertüte Perl
Wundertüte PerlWundertüte Perl
Wundertüte Perllichtkind
 
Perl 6 Regex und Grammars
Perl 6 Regex und GrammarsPerl 6 Regex und Grammars
Perl 6 Regex und Grammarslichtkind
 
Perl 6 Datastructures
Perl 6 DatastructuresPerl 6 Datastructures
Perl 6 Datastructureslichtkind
 
Perl 6 Datenstrukturen
Perl 6 DatenstrukturenPerl 6 Datenstrukturen
Perl 6 Datenstrukturenlichtkind
 
Document Driven Development
Document Driven DevelopmentDocument Driven Development
Document Driven Developmentlichtkind
 
Modern wx perl
Modern wx perlModern wx perl
Modern wx perllichtkind
 
Bettereditors
BettereditorsBettereditors
Bettereditorslichtkind
 
Was können wir von Rebol lernen?
Was können wir von Rebol lernen?Was können wir von Rebol lernen?
Was können wir von Rebol lernen?lichtkind
 
Perl Testing
Perl TestingPerl Testing
Perl Testinglichtkind
 
Perl in der Wiki
Perl in der WikiPerl in der Wiki
Perl in der Wikilichtkind
 
What is Kephra about?
What is Kephra about?What is Kephra about?
What is Kephra about?lichtkind
 
What we can learn from Rebol?
What we can learn from Rebol?What we can learn from Rebol?
What we can learn from Rebol?lichtkind
 

Mais de lichtkind (20)

Wx::Perl::Smart
Wx::Perl::SmartWx::Perl::Smart
Wx::Perl::Smart
 
P6kontext2014
P6kontext2014P6kontext2014
P6kontext2014
 
Complete Programming
Complete ProgrammingComplete Programming
Complete Programming
 
P6 OO vs Moose (&Moo)
P6 OO vs Moose (&Moo)P6 OO vs Moose (&Moo)
P6 OO vs Moose (&Moo)
 
Perl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz EditionPerl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz Edition
 
P6oo
P6ooP6oo
P6oo
 
Writing Perl 6 Rx
Writing Perl 6 RxWriting Perl 6 Rx
Writing Perl 6 Rx
 
Wundertüte Perl
Wundertüte PerlWundertüte Perl
Wundertüte Perl
 
Perl 6 Regex und Grammars
Perl 6 Regex und GrammarsPerl 6 Regex und Grammars
Perl 6 Regex und Grammars
 
Perl 6 Datastructures
Perl 6 DatastructuresPerl 6 Datastructures
Perl 6 Datastructures
 
Perl 6 Datenstrukturen
Perl 6 DatenstrukturenPerl 6 Datenstrukturen
Perl 6 Datenstrukturen
 
Document Driven Development
Document Driven DevelopmentDocument Driven Development
Document Driven Development
 
Modern wx perl
Modern wx perlModern wx perl
Modern wx perl
 
Bettereditors
BettereditorsBettereditors
Bettereditors
 
Hgit
HgitHgit
Hgit
 
Was können wir von Rebol lernen?
Was können wir von Rebol lernen?Was können wir von Rebol lernen?
Was können wir von Rebol lernen?
 
Perl Testing
Perl TestingPerl Testing
Perl Testing
 
Perl in der Wiki
Perl in der WikiPerl in der Wiki
Perl in der Wiki
 
What is Kephra about?
What is Kephra about?What is Kephra about?
What is Kephra about?
 
What we can learn from Rebol?
What we can learn from Rebol?What we can learn from Rebol?
What we can learn from Rebol?
 

Neuperl6

  • 1. Was ist neu an Perl 6?
  • 6. Was ist neu an Perl 6?
  • 7. Was ist neu an Perl 5? rekursive Regex named captures smartmatch
  • 8. Was ist neu an Perl 5? Moose TryCatch Perl::Critic Catalyst / Mojo / Dancer / Plack
  • 9. Was ist neu an Perl 5? Task::Kensho Eiskreme Perl Padre / Kephra
  • 11.
  • 13. Suche nach dem ver...
  • 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
  • 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
  • 30. Freiheit So wie ich denke, kann ich's auch aufschreiben.
  • 31. Was ist neu an Perl 6?
  • 33. Was ist neu an Perl 6?
  • 34. Freiheit So wie ich denke, kann ich's auch aufschreiben. Baut Grenzen zwischen Sprachen, Programmierstilen und Ökosystemen ab.
  • 35. The World of Unix (1987) C shell
  • 36. A new dimension C shell
  • 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 %+ => $/
  • 42. 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);
  • 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 "$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;
  • 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 "Was ist ... "; chomp($ergebnis = <STDIN>); $ergebnis = prompt "Was ist ... ";
  • 47. Shell auslesen print "Was ist ... "; 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 for my $zeile (@zeilen) { ... for @zeilen -> $zeile { ...
  • 51. for - Schleife for (1 .. 5) { ... for ^ 5 { ...
  • 52. for - Schleife for my $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 is Raumschiff { has $.speed; has $!crew; method stop { $.speed = 0 } } $arv = UFO.new(); $arv.speed = 20; $arv.stop;
  • 73. Roles class WebCrawler does Log4Perl { … } $objekt does Log4Perl;
  • 74. Roles class WebCrawler does Log4Perl { … } $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>
  • 77. Macros macro postfix:<!> is equiv(&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
  • 85. 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; }
  • 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
  • 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 P6 rules Bootstrapping In Benutzung
  • 114. kp6 Flavio Glock mp6 p5 pugs
  • 115. SMOP Daniel Ruoso runloop in C simple MOP sm0p / s1p → now RI / Mildew
  • 117. Perl 6 - Land
  • 119. Danke