119
Was ist neu an Perl 6?

Neuperl6

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Neuperl6

Was ist neu an Perl 6?

Page 2: Neuperl6

Herbert Breunung

Page 3: Neuperl6

Mansfelder Land

Page 4: Neuperl6

Mansfelder Land

Page 5: Neuperl6

Ägypten aka Khem

Page 6: Neuperl6

Was ist neu an Perl 6?

Page 7: Neuperl6

Was ist neu an Perl 5?

rekursive Regex

named captures

smartmatch

Page 8: Neuperl6

Was ist neu an Perl 5?

Moose

TryCatch

Perl::Critic

Catalyst / Mojo / Dancer / Plack

Page 9: Neuperl6

Was ist neu an Perl 5?

Task::Kensho

Eiskreme Perl

Padre / Kephra

Page 10: Neuperl6

Perl 6Der heilige Gral

Page 11: Neuperl6
Page 12: Neuperl6

Auf der Suche ...

Page 13: Neuperl6

Suche nach dem ver...

Page 14: Neuperl6

19. Juli 2000

Page 15: Neuperl6

Altlasten● ewig veraltete ' package syntax

● schlecht funktionierende do{ } while() schleifen

● unmoderne OOP & Parameterübergabe

● kryptische Spezialvariablen

● aufwändig zu ändernde Innereien

● XS

Page 16: Neuperl6

Entwicklung der Syntax● Apokalypsen

● Exegesen

● Synopsen

Page 17: Neuperl6

Entwicklung der Syntax● Apokalypsen

● Exegesen

● Synopsen

Page 18: Neuperl6

Entwicklung der Syntax● Apokalypsen

● Exegesen

● Synopsen

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

● http://perl-6.de/

Page 19: Neuperl6

Entwicklung der Syntax

● p6l ([email protected])

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

Page 20: Neuperl6

Entwicklung der Syntax

● p6l ([email protected])

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

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

Page 21: Neuperl6

Entwicklung der Syntax

● p6l ([email protected])

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

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

● Dan Sugalski, Luke Palmer, Audrey Tang

Page 22: Neuperl6

Larry Wall

Page 23: Neuperl6

Larry Wall

Page 24: Neuperl6

Perl 5 - Philosophie

TIMTOWTDI

simple and possible

context sensitive

Page 25: Neuperl6

Perl 6 - Philosophie

TIMTOWTDI

huffman coding

context sensitive

waterbed theory of complexity

Page 26: Neuperl6

Perl 6 - Philosophie

Tim Toady

huffman coding

context sensitive

waterbed theory of complexity

Page 27: Neuperl6

Freiheit

Page 28: Neuperl6

Freiheit

Page 29: Neuperl6

Freiheit

Page 30: Neuperl6

Freiheit

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

Page 31: Neuperl6

Was ist neu an Perl 6?

Page 32: Neuperl6

Damian Conway

Page 33: Neuperl6

Was ist neu an Perl 6?

Page 34: Neuperl6

Freiheit

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

Baut Grenzen zwischen Sprachen, Programmierstilen und Ökosystemen ab.

Page 35: Neuperl6

The World of Unix (1987)

C shell

Page 36: Neuperl6

A new dimension

C

shell

Page 37: Neuperl6

Perl 6 Syntax

Page 38: Neuperl6

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>

Page 39: Neuperl6

Operator Roulette-> => .

. => ~

=~ => ~~

| & => +| +&

qw() => <>

<> => .get

? : => ?? !!

Page 40: Neuperl6

Spezialvar RouletteSTDIN => $*IN

@ARGS => $*ARGS

$^V => $*PERLVER

$^O => $*OS

__LINE__ => $?LINE

%+ => $/

Page 41: Neuperl6

Variable Ausgebenprint "$var \n"; say $var;

Page 42: Neuperl6

Variable Ausgebenprint "$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);

Page 43: Neuperl6

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"]]

Page 44: Neuperl6

Variable Ausgebenprint "$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;

Page 45: Neuperl6

kleines Spiel

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

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

Page 46: Neuperl6

Shell auslesen

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

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

Page 47: Neuperl6

Shell auslesen

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

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

Page 48: Neuperl6

Datei auslesen

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

local $/; <$fh> };

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

Page 49: Neuperl6

Datei zeilenweise

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

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

Page 50: Neuperl6

for - Schleife

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

for @zeilen -> $zeile { ...

Page 51: Neuperl6

for - Schleife

for (1 .. 5) { ...

for ^ 5 { ...

Page 52: Neuperl6

for - Schleife

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

for @zeilen -> $zeile { ...

Page 53: Neuperl6

for - Schleife

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

for @zahlen -> $a, $b { ...

Page 54: Neuperl6

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.";}

Page 55: Neuperl6

for - Schleifemy @c = (\@za, \@zb);my $i = 0;for (0 .. $#a + $#b){ my $a = shift @{$c[$i]}; $i = abs 1 - $i;

for @za Z @zb -> $a { …

Page 56: Neuperl6

Schleifenfor my $i (0 .. $#a) { my $a = @a[$i]; my $b = @b[$i]; my $c = @c[$i]; ...

for zip (@a; @b; @c) -> $a, $b, $c { ...

Page 57: Neuperl6

Schleifenfor my $i (0 .. $#a) { @c[$i] = @a[$i] + @b[$i];}

Page 58: Neuperl6

Metaoperatorenfor my $i (0 .. $#a) { @c[$i] = @a[$i] + @b[$i];}

@c = @a >> + << @b;

Page 59: Neuperl6

Metaoperatorenmy $summe; $summe += $_ for @zahlen;

my $summe = [+] @zahlen;

Page 60: Neuperl6

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

my $sortiert = [>] @zahlen;

Page 61: Neuperl6

Werte vergleichen

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

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

Page 62: Neuperl6

Junction

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

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

Page 63: Neuperl6

Junction

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

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

Page 64: Neuperl6

Junction

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

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

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

Page 65: Neuperl6

Junction

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

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

# identischer inhaltif @a ~~ @b { …

Page 66: Neuperl6

Smartmatch

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

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

# identischer inhaltif @a ~~ @b { …

Page 67: Neuperl6

Signaturen

sub routine { my $a = shift; my $b = shift; return unless defined $b; my $c = shift; }

sub routine ($a!, $b!, $c?) { … }

Page 68: Neuperl6

Signaturen

sub routine { my $a = shift; my $b = shift; return unless defined $b; my @rest = @_; }

sub routine ($a!, $b!, *@rest) { … }

Page 69: Neuperl6

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 );

Page 70: Neuperl6

Objekte

class UFO {

has $.speed;

method stop { $.speed = 0 }}

Page 71: Neuperl6

Objektepackage 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;}

Page 72: Neuperl6

Objekteclass UFO is Raumschiff {

has $.speed; has $!crew;

method stop { $.speed = 0 }}

$arv = UFO.new();$arv.speed = 20;$arv.stop;

Page 73: Neuperl6

Roles class WebCrawler does Log4Perl { … }

$objekt does Log4Perl;

Page 74: Neuperl6

Roles class WebCrawler does Log4Perl { … }

$objekt does Log4Perl;

role Log4Perl { has @.log_lines; has $.log_size is rw = 100; method log_message($message) { ... }}

Page 75: Neuperl6

Grammarsgrammar 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>

Page 76: Neuperl6

Macros

macro postfix:<!>

Page 77: Neuperl6

Macros

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

say 5!;> 120

Page 78: Neuperl6

Macros

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

Page 79: Neuperl6

Macros

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

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

Page 80: Neuperl6

Macros

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

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

$?PARSER

Page 81: Neuperl6

Interpreter / CompilerPerl 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

Page 82: Neuperl6

PugsAudrey Tang

GHC

Perl 6 Users Golfing System

junction

-O Fun

Page 83: Neuperl6

Parrot

Page 84: Neuperl6

1. April 2001

Page 85: Neuperl6

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;}

Page 86: Neuperl6

Parrot● VM (Virtuelle Maschine)

Page 87: Neuperl6

Parrot● VM (Virtuelle Maschine)

● Software - CPU

Page 88: Neuperl6

Parrot● VM (Virtuelle Maschine)

● native/magische Register

Page 89: Neuperl6

Parrot● VM (Virtuelle Maschine)

● native/magische Register

● Continuations

Page 90: Neuperl6

Parrot● VM (Virtuelle Maschine)

● native/magische Register

● Continuations

● Dan Sugalski

Page 91: Neuperl6

Parrot● VM (Virtuelle Maschine)

● native/magische Register

● Continuations

● Dan Sugalski

● Mastermind

Page 92: Neuperl6

Parrot● VM (Virtuelle Maschine)

● native/magische Register

● Continuations

● Dan Sugalski

● Mastermind – Einzelkämpfer

Page 93: Neuperl6

Parrot● VM (Virtuelle Maschine)

● native/magische Register

● Continuations

● Dan Sugalski

● Allison Randal

Page 94: Neuperl6

Allison Randal● Exchefin der Perl Foundation

Page 95: Neuperl6

Allison Randal● Exchefin der Perl Foundation

● Parrot Leiterin

Page 96: Neuperl6

Allison Randal● Exchefin der Perl Foundation

● Parrot Leiterin

● Parrot Hacker

Page 97: Neuperl6

Allison Randal● Exchefin der Perl Foundation

● Parrot Leiterin

● Parrot Hacker

● Specschreiber

Page 98: Neuperl6

Allison Randal● Exchefin der Perl Foundation

● Parrot Leiterin

● Parrot Hacker

● Specschreiber

● TGE / Punie

Page 99: Neuperl6

Parrot's Sprachen

Page 100: Neuperl6

Parrot's Sprachen● .pbc Parrot bytecode

Page 101: Neuperl6

Parrot's Sprachen● .pbc Parrot bytecode

● .pasm P. Assembler

Page 102: Neuperl6

Pasm new P0, 'PerlArray' set I0, 100000 time N0lp1: push P0, I0 dec I0 if I0, lp1 time N1 sub N1, N0 print "constr.time " print N1 print "\n"

Page 103: Neuperl6

Parrot's Sprachen● .pbc Parrot bytecode

● .pasm P. Assembler

● .pir P. Intermed. Repr.

Page 104: Neuperl6

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

Page 105: Neuperl6

Parrot's Sprachen● .pbc Parrot bytecode

● .pasm P. Assembler

● .pir P. Intermed. Repr.

● PGE P.Grammar Engine

Page 106: Neuperl6

Parrot's Sprachen● .pbc Parrot bytecode

● .pasm P. Assembler

● .pir P. Intermed. Repr.

● PGE P.Grammar Engine

Page 107: Neuperl6

Parrot's Sprachen● .pbc Parrot bytecode

● .pasm P. Assembler

● .pir P. Intermed. Repr.

● PGE P.Grammar Engine

● NQP Not Quit Perl 6

Page 108: Neuperl6

Parrot's Sprachen● .pbc Parrot bytecode

● .pasm P. Assembler

● .pir P. Intermed. Repr.

● PGE P.Grammar Engine

● NQP Not Quite Perl 6

Page 109: Neuperl6

Parrot's Sprachen● .pbc Parrot bytecode

● .pasm P. Assembler

● .pir P. Intermed. Repr.

● PGE P.Grammar Engine

● NQPrx

Page 110: Neuperl6

Patrick Michaud

Parrot

Parrot Compiler Tools

PGE

Rakudo

Page 111: Neuperl6

Jonathan Worthington

Rakudo, Blikost, Zavolaj

Page 112: Neuperl6

STD.pm

Syntaxregeln

in P6 rules

Bootstrapping

In Benutzung

Page 113: Neuperl6

elf

STD.pm parsen

mithilfe von Ruby

Page 114: Neuperl6

kp6

Flavio Glock

mp6

p5

pugs

Page 115: Neuperl6

SMOP

Daniel Ruoso

runloop

in C

simple MOP

sm0p / s1p → now RI / Mildew

Page 116: Neuperl6

mehr für alle

Page 117: Neuperl6

Perl 6 - Land

Page 118: Neuperl6

Noch Fragen?

Page 119: Neuperl6

Danke