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

Like this? Share it with your network

Share

Perl 6 by example

on

  • 2,038 views

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.

Statistics

Views

Total Views
2,038
Views on SlideShare
1,689
Embed Views
349

Actions

Likes
2
Downloads
17
Comments
0

8 Embeds 349

http://onperl.ru 296
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
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Perl 6 by example Presentation 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