Perl 6 by example
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Perl 6 by example

  • 2,059 views
Uploaded on

Going through existing Perl 6 programmes to see how early adopters use the language today, before Perl 6 is completed in any sence.

Going through existing Perl 6 programmes to see how early adopters use the language today, before Perl 6 is completed in any sence.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,059
On Slideshare
1,708
From Embeds
351
Number of Embeds
8

Actions

Shares
Downloads
18
Comments
0
Likes
2

Embeds 351

http://onperl.ru 298
http://www.onperl.ru 36
http://planetperl.ru 9
http://xss.yandex.net 4
http://192.168.178.200:3000 1
http://planetperl.ru. 1
http://www.planetperl.ru 1
http://www.informatica.md 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Perl 6 by example
  • 2. A talk about a kind of phylosophy of Perl 6 learning process
  • 3. proto.perl6.org
  • 4. Proto is a hyper- lightweight dependency tracking and module installation system
  • 5. pls is its new name
  • 6. We don’t care of all that
  • 7. What we do care of are
  • 8. 54 Perl 6 projects are on proto.perl6.org
  • 9. history.back()
  • 10. 2003
  • 11. perl6.ru launched
  • 12. It observed the code from parrot/languages/ perl6/examples folder
  • 13. Record #15 Example research. loop()
  • 14. mandel.p6 was the most exciting
  • 15. loop ($y=30; $C = $y*0.1 - 1.5, $y--;) {    loop ($x=0; $c = $x*0.04 - 2.0, $z=0.0,    $Z=0.0, $x++ < 75;) {       loop ($r=$c, $i=$C, $k=0;       $t = $z*$z - $Z*$Z + $r,       $Z = 2.0*$z*$Z + $i, $z=$t, $k<112;       $k++) {    . . .
  • 16. ................::::::::::::::::::::::::::::::::::::::::::::............... ...........::::::::::::::::::::::::::::::::::::::::::::::::::::::.......... ........::::::::::::::::::::::::::::::::::,,,,,,,:::::::::::::::::::....... .....:::::::::::::::::::::::::::::,,,,,,,,,,,,,,,,,,,,,,:::::::::::::::.... ...::::::::::::::::::::::::::,,,,,,,,,,,,;;;!:H!!;;;,,,,,,,,:::::::::::::.. :::::::::::::::::::::::::,,,,,,,,,,,,,;;;;!!/>&*|& !;;;,,,,,,,::::::::::::: ::::::::::::::::::::::,,,,,,,,,,,,,;;;;;!!//)|.*#|>/!;;;;;,,,,,,::::::::::: ::::::::::::::::::,,,,,,,,,,,,;;;;;;!!!!//>|:    !:|//!!;;;;;,,,,,::::::::: :::::::::::::::,,,,,,,,,,;;;;;;;!!/>>I>>)||I#     H&))>////*!;;,,,,:::::::: ::::::::::,,,,,,,,,,;;;;;;;;;!!!!/>H:  #|              IH&*I#/;;,,,,::::::: ::::::,,,,,,,,,;;;;;!!!!!!!!!!//>|.H:                     #I>!!;;,,,,:::::: :::,,,,,,,,,;;;;!/||>///>>///>>)|H                         %|&/;;,,,,,::::: :,,,,,,,,;;;;;!!//)& :;I*,H#&||&/                           *)/!;;,,,,,:::: ,,,,,,;;;;;!!!//>)IH:,        ##                            #&!!;;,,,,,:::: ,;;;;!!!!!///>)H%.**           *                            )/!;;;,,,,,::::                                                           &)/!!;;;,,,,,:::: ,;;;;!!!!!///>)H%.**           *                            )/!;;;,,,,,:::: ,,,,,,;;;;;!!!//>)IH:,        ##                            #&!!;;,,,,,:::: :,,,,,,,,;;;;;!!//)& :;I*,H#&||&/                           *)/!;;,,,,,:::: :::,,,,,,,,,;;;;!/||>///>>///>>)|H                         %|&/;;,,,,,::::: ::::::,,,,,,,,,;;;;;!!!!!!!!!!//>|.H:                     #I>!!;;,,,,:::::: ::::::::::,,,,,,,,,,;;;;;;;;;!!!!/>H:  #|              IH&*I#/;;,,,,::::::: :::::::::::::::,,,,,,,,,,;;;;;;;!!/>>I>>)||I#     H&))>////*!;;,,,,:::::::: ::::::::::::::::::,,,,,,,,,,,,;;;;;;!!!!//>|:    !:|//!!;;;;;,,,,,::::::::: ::::::::::::::::::::::,,,,,,,,,,,,,;;;;;!!//)|.*#|>/!;;;;;,,,,,,::::::::::: :::::::::::::::::::::::::,,,,,,,,,,,,,;;;;!!/>&*|& !;;;,,,,,,,::::::::::::: ...::::::::::::::::::::::::::,,,,,,,,,,,,;;;!:H!!;;;,,,,,,,,:::::::::::::.. .....:::::::::::::::::::::::::::::,,,,,,,,,,,,,,,,,,,,,,:::::::::::::::.... ........::::::::::::::::::::::::::::::::::,,,,,,,:::::::::::::::::::....... ...........::::::::::::::::::::::::::::::::::::::::::::::::::::::..........
  • 17. history.now()
  • 18. The method: try to understand what you don’t understand
  • 19. You’ll find impressive things
  • 20. mandelbrot project Mandelbrot set in Perl 6
  • 21. my $height = @*ARGS[0] // 31; my $width = $height; my $max_iterations = 50; my $upper-right = -2 + (5/4)i; my $lower-left = 1/2 - (5/4)i;
  • 22. my $height = @*ARGS[0] // 31; my $width = $height; my $max_iterations = 50; my $upper-right = -2 + (5/4)i; my $lower-left = 1/2 - (5/4)i; Global variable and defined-or
  • 23. my $height = @*ARGS[0] // 31; my $width = $height; my $max_iterations = 50; my $upper-right = -2 + (5/4)i; my $lower-left = 1/2 - (5/4)i; Complex numbers (wow!)
  • 24. sub mandel(Complex $c) { my $z = 0i; for ^$max_iterations { $z = $z * $z + $c; return 1 if ($z.abs > 2); } return 0; }
  • 25. sub mandel(Complex $c) { my $z = 0i; for ^$max_iterations { $z = $z * $z + $c; return 1 if ($z.abs > 2); } return 0; } 0..$max_iterations range
  • 26. for subdivide($upper-right.re, $lower-left.re, $height) -> $re { ... (@line, $middle, @line.reverse).join(' ').say; }
  • 27. for subdivide($upper-right.re, $lower-left.re, $height) -> $re { ... (@line, $middle, @line.reverse).join(' ').say; } Hyphens in variable names
  • 28. for subdivide($upper-right.re, $lower-left.re, $height) -> $re { ... (@line, $middle, @line.reverse).join(' ').say; } for loop and its variable
  • 29. for subdivide($upper-right.re, $lower-left.re, $height) -> $re { ... (@line, $middle, @line.reverse).join(' ').say; } Nested method calls
  • 30. (@line, $middle, @line.reverse).map ({ @color_map[$_] }).join(' ').say; Method calls on a list
  • 31. 53 Perl 6 projects still left
  • 32. FakeDBI and FakeDBD
  • 33. class FakeDBI:auth<mberends>:ver<0.0.1> { has $!err; has $!errstr; method connect( $dsn, $username, $password, :$RaiseError=0, :$PrintError=0, :$AutoCommit=1 ) { Declaring and defining a class
  • 34. class FakeDBI:auth<mberends>:ver<0.0.1> { has $!err; has $!errstr; method connect( $dsn, $username, $password, :$RaiseError=0, :$PrintError=0, :$AutoCommit=1 ) { Who is the author
  • 35. class FakeDBI:auth<mberends>:ver<0.0.1> { has $!err; has $!errstr; method connect( $dsn, $username, $password, :$RaiseError=0, :$PrintError=0, :$AutoCommit=1 ) { Version number
  • 36. class FakeDBI:auth<mberends>:ver<0.0.1> { has $!err; has $!errstr; method connect( $dsn, $username, $password, :$RaiseError=0, :$PrintError=0, :$AutoCommit=1 ) { Class variables
  • 37. class FakeDBI:auth<mberends>:ver<0.0.1> { has $!err; has $!errstr; method connect( $dsn, $username, $password, :$RaiseError=0, :$PrintError=0, :$AutoCommit=1 ) { Not too easy to guess
  • 38. bash-3.2$ grep '$!' * -r S02-bits.pod: $!foo object attribute private storage
  • 39. class FakeDBI:auth<mberends>:ver<0.0.1> { has $!err; has $!errstr; method connect( $dsn, $username, $password, :$RaiseError=0, :$PrintError=0, :$AutoCommit=1 ) { Twigils indicate private variables
  • 40. class FakeDBI:auth<mberends>:ver<0.0.1> { has $!err; has $!errstr; method connect( $dsn, $username, $password, :$RaiseError=0, :$PrintError=0, :$AutoCommit=1 ) { Class method
  • 41. class FakeDBI:auth<mberends>:ver<0.0.1> { has $!err; has $!errstr; method connect( $dsn, $username, $password, :$RaiseError=0, :$PrintError=0, :$AutoCommit=1 ) { Positional arguments
  • 42. class FakeDBI:auth<mberends>:ver<0.0.1> { has $!err; has $!errstr; method connect( $dsn, $username, $password, :$RaiseError=0, :$PrintError=0, :$AutoCommit=1 ) { Named arguments
  • 43. class FakeDBI:auth<mberends>:ver<0.0.1> { has $!err; has $!errstr; method connect( $dsn, $username, $password, :$RaiseError=0, :$PrintError=0, :$AutoCommit=1 ) { Default values
  • 44. given $drivername { when 'CSV' {...} when 'mysql' { . . . } default {...} } given/when known from Perl 5.10 :-)
  • 45. 52 Perl 6 projects still left
  • 46. Really 52 left?
  • 47. Much more!
  • 48. perl6-examples on github cookbook module-management doc parsers euler perlmonks games shootout interpreters tutorial lib wsg
  • 49. perl6-examples on github cookbook module-management doc parsers euler perlmonks games shootout interpreters tutorial lib wsg
  • 50. eulerproject.net README prob005-unobe.pl prob025-polettix.pl prob001-cspencer.pl prob006-polettix.pl prob029-polettix.pl prob001-eric256.pl prob007-polettix.pl prob052-duff.pl prob001-hexmode.pl prob008-duff.pl prob053-duff.pl prob001-unobe.pl prob008-duff2.pl prob063-moritz.pl prob002-eric256.pl prob009-polettix.pl prob063-polettix.pl prob002-hexmode.pl prob010-polettix.pl prob081-matrix.txt prob003-eric256.pl prob011-moritz.pl prob081-moritz.pl prob003-hexmode.pl prob012-polettix.pl prob092-moritz.pl prob003-lanny.p6 prob017-duff.pl prob104-moritz.pl prob004-unobe.pl prob024-moritz.pl
  • 51. eulerproject.net README prob005-unobe.pl prob025-polettix.pl prob001-cspencer.pl prob006-polettix.pl prob029-polettix.pl prob001-eric256.pl prob007-polettix.pl prob052-duff.pl prob001-hexmode.pl prob008-duff.pl prob053-duff.pl prob001-unobe.pl prob008-duff2.pl prob063-moritz.pl prob002-eric256.pl prob009-polettix.pl prob063-polettix.pl prob002-hexmode.pl prob010-polettix.pl prob081-matrix.txt prob003-eric256.pl prob011-moritz.pl prob081-moritz.pl prob003-hexmode.pl prob012-polettix.pl prob092-moritz.pl prob003-lanny.p6 prob017-duff.pl prob104-moritz.pl prob004-unobe.pl prob024-moritz.pl
  • 52. # A simple implementation # of Eratosthenes' sieve sub primes_iterator { return sub { state %D; state $q //= 2; $q //= 2; Again, pure Perl 5.10 :-)
  • 53. $ perl6 prob007-polettix.pl ===SORRY!=== Symbol '%D' not predeclared in primes_iterator (prob007-polettix.pl:17)
  • 54. my %D; my $q; # A simple implementation # of Eratosthenes' sieve sub primes_iterator { return sub { #state %D; #state $q //= 2; $q //= 2; OK, let’s use global variables this time
  • 55. $ perl6 prob007-polettix.pl . . . Time passed. . . result: 104743
  • 56. my $it = primes_iterator(); for 1 .. $nth - 1 -> $i { $it(); say "found $i primes so far" unless $i % 100; } say 'result: ', $it(); Subroutine reference in a scalar
  • 57. 51 + ∞ Perl 6 projects still left
  • 58. SVG.pm
  • 59. my $svg = :svg[ :width(200), :height(200), circle => [ :cx(100), :cy(100), :r(50) ], text => [ :x(10), :y(20), "hello" ] ]; Hash reference of hash references?
  • 60. .perl() explains
  • 61. say $svg.perl; "svg" => ["width" => 200, "height" => 200, "circle" => ["cx" => 100, "cy" => 100, "r" => 50], "text" => ["x" => 10, "y" => 20, "hello"]]
  • 62. 50 + ∞ Perl 6 projects still left
  • 63. Andrew Shitov talks.shitov.ru | andy@shitov.ru