Successfully reported this slideshow.
Знакомство

с   Perl 6
220 слайдов
Про Perl 6 говорят с


      2000
perl6.ru появился в


      2003
Это мой 7-й рассказ с


       2007
Сейчас


2009
Готов ли Perl 6?
Готов ли Perl 6?


 Ну почти
Когда будет?
Когда будет?


На Рождество
Когда будет?


На Рождество
 (год не указан)
pre-alpha


2009-2010
Когда в production?
Когда в production?


Зависит от нас
Когда в production?


Зависит от вас
Когда в production?


 Уже сейчас!
Когда в production?


        Уже сейчас!
(На самом деле года через два после релиза)
Зачем вообще нужен


     Perl 6?
Кто помнит переход


с   Perl 4 на Perl 5?
4 != 5
5 != 6
5 != 6
Perl = Perl
‘Perl’ eq ‘Perl’
Как изучать


 Perl 6?
Где взять


Perl 6?
Можно ли попробовать


      Perl 6?
?
Как изучать
Как изучать

Знать Perl 5

 изучить
 отличия
Как изучать

Знать Perl 5   Не знать Perl 5

 изучить
 отличия
Как изучать

Знать Perl 5   Не знать Perl 5

 изучить          изучить
 отличия       документацию
Изучать ли
ламповую схемотехнику,
когда есть транзисторы?
У нас есть два языка!
У нас есть два языка!

 Perl 5 и Perl 6
У нас есть два языка!

  Perl 5 и Perl 6
Завоевание мира стало проще
Отличия от Perl 5
Отличия от Perl 5
    (не все)
Отличия от Perl 5
Отличия от Perl 5
  В идеологии
Синтаксис Perl 6
описан грамматикой
Синтаксис Perl 6
описан грамматикой

  Синтаксис Perl 5
задан реализацией
Много реализаций
 (пока нет ни одной завершенной)



     Одна реализация
(портирована на многие платформы)
Perl 6 компилируется
Perl 6 компилируется



Perl 5 интерпретируется
Программа
Компилятор

Байт-код

Виртуальная машина
Программа
Компилятор

Байт-код

Виртуальная машина
Basic
Forth
Jako
Lisp
m4
Ook
Perl 6
Perl 5
Python
Ruby
Scheme
Tcl
Basic
Forth
Jako
Lisp
m4
Ook
Perl 6
Perl 5
Python
Ruby
Scheme
         байт-код
Tcl
Basic
Forth
Jako
Lisp
m4
Ook
Perl 6
Perl 5
Python
Ruby
Scheme
         LOL-код
Tcl
Отличия от Perl 5
 В синтаксисе
Хаффманизизация
Perl 5
print quot;Hello, World!quot;;
Perl 6
say quot;      quot;;
Perl 6
quot;   quot;.say;
Perl 6
my $ναριαβλε =
   quot;               quot;;
Perl 6
$str.chars;
$str.bytes;
$str.glyphs;
Perl 6
$str.chars.say;
Perl 6
$str.chars.say;

3.14.elems.say;
Унификация
Cигилы
Perl 5
my @arr = (0..5);
say $arr[2];
Perl 6
my @arr = (0..5);
say @arr[2];
Perl 6
my @arr = (0..5);
say @arr[2, 3];
Perl 6
my @arr = (0..5);
say @arr.elems;
Perl 5
my %hash = (
    city => quot;Tashkentquot;,
    year => 2009
);
say $hash{city};
Perl 6
my %hash = (
    city => quot;Tashkentquot;,
    year => 2009
);
say %hash<city>;
Perl 6
my %hash = 
    city => quot;Tashkentquot;,
    year => 2009
;
say %hash<city year>;
Perl 6
my %hash = 
    city => quot;Tashkentquot;,
    year => 2009
;
say %hash.kv;
Сигилы — не тип переменной
Сигилы — интерфейс контейнера
@
Объект реализует роль Positional
    и поддерживает метод
     postcircumfix:<[ ]>
%
Объект реализует роль Associative
     и поддерживает метод
      postcircumfix:<{ }>
&
Объект реализует роль Callable
   и поддерживает метод
    postcircumfix:<( )>
qw
Perl 5

my @cities = (
    quot;Moscowquot;, quot;Kievquot;, quot;Tashkentquot;
);
Perl 6

my @cities =
    quot;Moscowquot;, quot;Kievquot;, quot;Tashkentquot;
;
Perl 5

my @cities = qw(Moscow Kiev Tashkent);
Perl 6

my @cities = <Moscow Kiev Tashkent>;
Твигилы
Perl 5

$ENV{SERVER_NAME}
Perl 6

%*ENV<SERVER_NAME>
Perl 6

%*ENV<SERVER_NAME>
Perl 6

%*ENV<SERVER_NAME>
Perl 6

%*ENV<SERVER_NAME>
$var
$.var
$^var
$:var
$*var
$?var
$=var
$!var
Perl 5

 __LINE__
 __FILE__
__PACKAGE__
Perl 6

 $?LINE
 $?FILE
$?PACKAGE
Цепочки сравнений
Perl 5
if ($latitude > 41.2 &&
    $latitude < 41.4) {
    print quot;Tashkentnquot;;
}
if 41.2 < $latitude < 41.4 {
    say quot;Tashkentquot;;
}
Контексты
Строковый контекст

   my @array = (5..10);
   say ~@array;


   5 6 7 8 9 10
Числовой контекст

   my @array = (5..10);
   say +@array;

   6
Строковый контекст
       в контексте хеша
   my @array = (5..10);
   say ~ hash @array;

   5  6
   7  8
   9  10
Булевый контекст

my @array = (5..10);
say ?+@array;
Конкатенация строк
print
     quot;Uzbek quot;
   . quot;Perl quot;
   . quot;Workshopquot;;
print
     quot;Uzbek quot;
   ~ quot;Perl quot;
   ~ quot;Workshopquot;;
Установка Rakudo
Исключения
Perl 5
eval {
    print 1/0;
}
if ($@) {
    print_error();
}
Perl 6
try {
    say 1/0;

    CATCH {
        print_error();
    }
}
Perl 6
try {
    say 1/0;

    CATCH {
        print_error();
    }
}
Циклы
Perl 5
foreach (@list) {
   . . .
}
Perl 5
for (@list) {
   . . .
}
Perl 6
for @list {
   . . .
}
Perl 6
for @list ‐> $x {
   say $x;
}
Perl 6
for @list ‐> $x {
   say $x;
}
Perl 6
for @list ‐> $x, $y {
   say $x + $y
}
Perl 6
loop(my $t = 300; $t; $t‐‐){
   sleep 1;
};
Функции
sub flight($from, $to) {
   say quot;$from ‐‐> $toquot;;
}

flight(quot;Москваquot;, 
       quot;Ташкентquot;);
sub flight($from, $to) {
   say quot;$from ‐‐> $toquot;;
}

flight(quot;Москваquot;, 
       quot;Ташкентquot;);
sub flight($from, $to) {
   say quot;$from ‐‐> $toquot;;
}

flight quot;Москваquot;, 
       quot;Ташкентquot;;
sub flight($from, $to) {
   say quot;$from ‐‐> $toquot;;
}

flight
   from => quot;Москваquot;, 
   to   => quot;Ташкентqu...
sub flight($from, $to) {
   say quot;$from ‐‐> $toquot;;
}

flight
   from => quot;Москваquot;, 
   to   => quot;Ташкентqu...
sub choose(@a, @b) {
   return
      any(@a) < all(@b) ??
      1 !! 2;
}

say choose(
    @SkyExpressPrices,
    @Aeroflo...
Гипероператоры
my @Flight = (...);
my @Food = (...);
my @Flight = (...);
my @Food = (...);

my @FullPrice = 
   @Flight >>+<< @Food;
my @Flight = (...);
my @Food = (...);

my @FullPrice = 
   @Flight >>+<< @Food;

@FullPrice >>+=<< $Fuel;
my @Flight = (...);
my @Food = (...);

my @FullPrice = 
   @Flight »+« @Food;
Объединения
Объединения

  (квантовые
суперпозиции)
sub choose(@a, @b) {
   return
      any(@a) < all(@b) ??
      1 !! 2;
}
say 1 
    if 20 == 10 | 20 | 30;
say 1 
    if 20 == 10 | 20 | 30;

say 1
    if 20 == any(10, 20, 30);
say 1
    if 20 == none(1, 2, 3);
my $j = 2009 | 2010;

say 1 if 2009 == $j;
Перегрузка
операторов и функций
Перегрузка
операторов и функций

   (множественная
  диспетчеризация)
1 + 2


2.71 + 3.14
multi sub
    elections($candidate);


multi sub
    elections(@candidates);
multi infix:<+> ($a, $b) {
   return $a ‐ $b;
}

say 10 + 20;     ‐10
multi postfix:<!> ($n) {
   return [*] 1..$n;
}

say 2009!;
multi postfix:<!> ($n) {
   return [*] 1..$n;
}

say 2009!;
Где взять
Предыстория
Parrot 0.1.0

languages/perl6
Parrot 0.1.0

Для компиляции файла
  грамматики Perl 6
  нужен 1 ГБ памяти
Parrot 0.1.0

Настоящий байткод



 real.perl6.ru
PUGS
PUGS

Perl User’s Golfing System
PUGS

Perl User’s Golfing System

  Написан на Haskell
PUGS

Perl User’s Golfing System

 Вместе с GHC собирается
      часа четыре
PUGS

Perl User’s Golfing System

    Самое большое
  подмножество языка
     на тот момент
use v6;
use v6;


Модули на CPAN для Perl 5
use v6;


Moose?
use v6;


 5.10?
Perl 6 не один

Pugs         Elf
Rakudo
          KindaPerl6
   SMOP
Rakudo
Rakudo

   Rakudo-do —
путь верблюда (яп.)
Rakudo

Компилятор в PIR-код
Установка Rakudo

$ git clone git://github.com/rakudo/rakudo.git
Установка Rakudo

$ git clone git://github.com/rakudo/rakudo.git


$ cd rakudo
Установка Rakudo

$ git clone git://github.com/rakudo/rakudo.git


$ cd rakudo


$ perl Configure.pl ‐‐gen‐parrot
Установка Rakudo

$ git clone git://github.com/rakudo/rakudo.git


$ cd rakudo


$ perl Configure.pl ‐‐gen‐parrot
Установка Rakudo

$ git clone git://github.com/rakudo/rakudo.git


$ cd rakudo


$ perl Configure.pl ‐‐gen‐parrot


$ make
Установка Rakudo

Сегодня нет make install
Установка Rakudo

$ ./perl6 ‐v
Установка Rakudo

$ ./perl6 ‐v


This is Rakudo Perl 6, revision 38679 built on 
parrot 1.1.0‐devel
for darwin‐thread‐mult...
Компилятор Rakudo



    rakudo.org
Виртуальная машина
       Parrot


     parrot.org
Документация, тесты
   и грамматика


    pugscode.org
Веб-приложения
    на Perl 6
real.perl6.ru

 2004 год
int main() {
    char* argv[] = {
        quot;parrotquot;, 
        getenv (quot;PATH_TRANSLATEDquot;),
        NULL
    ...
my @keys = (
    'SERVER_NAME',
    'REMOTE_ADDR',
    'HTTP_USER_AGENT'
);
my $key;
foreach $key (@keys){
   print1 quot;...
my @keys = (
    'SERVER_NAME',
    'REMOTE_ADDR',
    'HTTP_USER_AGENT'
);
my $key;
foreach $key (@keys){
   print1 quot;...
sub params2hash(
    %params,
    @params_key,
    @params_value){
    for 0 .. @params_key ‐> $c {
        %params{@param...
.include quot;counter.imcquot;


open     P0, quot;counter.txtquot;
readline S0, P0
set      I0, S0
inc      I0
set      I...
november-wiki.org

    2008 год
Рождество — December

Вики на Perl 6 — November
Про что
не рассказал?
Про классы
Про классы,
 про роли
Про классы,
    про роли
и про грамматики
Кратко об этом
на примере November
#!perl6
use v6;


use CGI;
use Wiki;


my Wiki $wiki = Wiki.new;
$wiki.init();
my $cgi = CGI.new;
$cgi.init();
$wiki.handl...
Классы и роли
class Wiki does Session {
    my $.template_path       is rw;
    my $.userfile_path       is rw;


    has Storage $.stor...
method handle_request(CGI $cgi) {
    $.cgi = $cgi;
    my $action = $cgi.param<action> // 'view';
    given $action {
   ...
has Storage $.storage is rw;



class Storage {
    . . .
}
class Storage::File is Storage {
    . . .
}

$.storage = Stor...
my $input = $*IN.slurp();
self.parse_params(%params, $input);
Грамматика
if $par ~~ Text::Markup::Wiki::Minimal::Syntax::paragr
{
    . . .
}
else {
   $result = '<p>Could not parse paragraph.</p...
grammar Text::Markup::Wiki::Minimal::Syntax {
    token paragraph { ^ [<heading> || <parchunk>+] $ };
    token heading { ...
grammar 
Text::Markup::Wiki::Minimal::Syntax {



}
token paragraph { 
   ^ [<heading> || <parchunk>+] $
};
token heading {
    '==' <parchunk>+ '=='
};
STD.pm — 150 КБ
Что почитать
Июнь 2003
Июнь 2004
Июнь 2004   2005
2005
2007?
Это все уже история
Документация
RFCs,
Apocalypses,
Exegeses
Все это уже история
RFCs,
Apocalypses,
Exegeses,
Synopses
Synopses

perlcabal.org/syn
Synopses

perlcabal.org/syn

   S1 . . . S33
S = Synopses
S = Spec
Кого почитать
Мориц Ленц

 perlgeek.de
Габор Сабо

 szabgab.com
Джонатан
 Вортингтон
   use.perl.org/
~JonathanWorthington
Карл Мэсак

use.perl.org/~masak
Патрик Мишо

use.perl.org/~pmichaud
Илья Беликин

ihrd.livejournal.com
perl6.ru
__END__


Андрей Шитов

http://shitov.ru   |   andy@shitov.ru
‎Знакомство с Perl 6‎
‎Знакомство с Perl 6‎
Upcoming SlideShare
Loading in …5
×

‎Знакомство с Perl 6‎

1,848 views

Published on

Published in: Technology
  • Be the first to comment

‎Знакомство с Perl 6‎

  1. 1. Знакомство с Perl 6
  2. 2. 220 слайдов
  3. 3. Про Perl 6 говорят с 2000
  4. 4. perl6.ru появился в 2003
  5. 5. Это мой 7-й рассказ с 2007
  6. 6. Сейчас 2009
  7. 7. Готов ли Perl 6?
  8. 8. Готов ли Perl 6? Ну почти
  9. 9. Когда будет?
  10. 10. Когда будет? На Рождество
  11. 11. Когда будет? На Рождество (год не указан)
  12. 12. pre-alpha 2009-2010
  13. 13. Когда в production?
  14. 14. Когда в production? Зависит от нас
  15. 15. Когда в production? Зависит от вас
  16. 16. Когда в production? Уже сейчас!
  17. 17. Когда в production? Уже сейчас! (На самом деле года через два после релиза)
  18. 18. Зачем вообще нужен Perl 6?
  19. 19. Кто помнит переход с Perl 4 на Perl 5?
  20. 20. 4 != 5
  21. 21. 5 != 6
  22. 22. 5 != 6
  23. 23. Perl = Perl
  24. 24. ‘Perl’ eq ‘Perl’
  25. 25. Как изучать Perl 6?
  26. 26. Где взять Perl 6?
  27. 27. Можно ли попробовать Perl 6?
  28. 28. ?
  29. 29. Как изучать
  30. 30. Как изучать Знать Perl 5 изучить отличия
  31. 31. Как изучать Знать Perl 5 Не знать Perl 5 изучить отличия
  32. 32. Как изучать Знать Perl 5 Не знать Perl 5 изучить изучить отличия документацию
  33. 33. Изучать ли ламповую схемотехнику, когда есть транзисторы?
  34. 34. У нас есть два языка!
  35. 35. У нас есть два языка! Perl 5 и Perl 6
  36. 36. У нас есть два языка! Perl 5 и Perl 6 Завоевание мира стало проще
  37. 37. Отличия от Perl 5
  38. 38. Отличия от Perl 5 (не все)
  39. 39. Отличия от Perl 5
  40. 40. Отличия от Perl 5 В идеологии
  41. 41. Синтаксис Perl 6 описан грамматикой
  42. 42. Синтаксис Perl 6 описан грамматикой Синтаксис Perl 5 задан реализацией
  43. 43. Много реализаций (пока нет ни одной завершенной) Одна реализация (портирована на многие платформы)
  44. 44. Perl 6 компилируется
  45. 45. Perl 6 компилируется Perl 5 интерпретируется
  46. 46. Программа Компилятор Байт-код Виртуальная машина
  47. 47. Программа Компилятор Байт-код Виртуальная машина
  48. 48. Basic Forth Jako Lisp m4 Ook Perl 6 Perl 5 Python Ruby Scheme Tcl
  49. 49. Basic Forth Jako Lisp m4 Ook Perl 6 Perl 5 Python Ruby Scheme байт-код Tcl
  50. 50. Basic Forth Jako Lisp m4 Ook Perl 6 Perl 5 Python Ruby Scheme LOL-код Tcl
  51. 51. Отличия от Perl 5 В синтаксисе
  52. 52. Хаффманизизация
  53. 53. Perl 5 print quot;Hello, World!quot;;
  54. 54. Perl 6 say quot; quot;;
  55. 55. Perl 6 quot; quot;.say;
  56. 56. Perl 6 my $ναριαβλε =    quot; quot;;
  57. 57. Perl 6 $str.chars; $str.bytes; $str.glyphs;
  58. 58. Perl 6 $str.chars.say;
  59. 59. Perl 6 $str.chars.say; 3.14.elems.say;
  60. 60. Унификация
  61. 61. Cигилы
  62. 62. Perl 5 my @arr = (0..5); say $arr[2];
  63. 63. Perl 6 my @arr = (0..5); say @arr[2];
  64. 64. Perl 6 my @arr = (0..5); say @arr[2, 3];
  65. 65. Perl 6 my @arr = (0..5); say @arr.elems;
  66. 66. Perl 5 my %hash = (     city => quot;Tashkentquot;,     year => 2009 ); say $hash{city};
  67. 67. Perl 6 my %hash = (     city => quot;Tashkentquot;,     year => 2009 ); say %hash<city>;
  68. 68. Perl 6 my %hash =      city => quot;Tashkentquot;,     year => 2009 ; say %hash<city year>;
  69. 69. Perl 6 my %hash =      city => quot;Tashkentquot;,     year => 2009 ; say %hash.kv;
  70. 70. Сигилы — не тип переменной
  71. 71. Сигилы — интерфейс контейнера
  72. 72. @ Объект реализует роль Positional и поддерживает метод postcircumfix:<[ ]>
  73. 73. % Объект реализует роль Associative и поддерживает метод postcircumfix:<{ }>
  74. 74. & Объект реализует роль Callable и поддерживает метод postcircumfix:<( )>
  75. 75. qw
  76. 76. Perl 5 my @cities = (     quot;Moscowquot;, quot;Kievquot;, quot;Tashkentquot; );
  77. 77. Perl 6 my @cities =     quot;Moscowquot;, quot;Kievquot;, quot;Tashkentquot; ;
  78. 78. Perl 5 my @cities = qw(Moscow Kiev Tashkent);
  79. 79. Perl 6 my @cities = <Moscow Kiev Tashkent>;
  80. 80. Твигилы
  81. 81. Perl 5 $ENV{SERVER_NAME}
  82. 82. Perl 6 %*ENV<SERVER_NAME>
  83. 83. Perl 6 %*ENV<SERVER_NAME>
  84. 84. Perl 6 %*ENV<SERVER_NAME>
  85. 85. Perl 6 %*ENV<SERVER_NAME>
  86. 86. $var $.var $^var $:var $*var $?var $=var $!var
  87. 87. Perl 5 __LINE__ __FILE__ __PACKAGE__
  88. 88. Perl 6 $?LINE $?FILE $?PACKAGE
  89. 89. Цепочки сравнений
  90. 90. Perl 5 if ($latitude > 41.2 &&     $latitude < 41.4) {     print quot;Tashkentnquot;; }
  91. 91. if 41.2 < $latitude < 41.4 {     say quot;Tashkentquot;; }
  92. 92. Контексты
  93. 93. Строковый контекст my @array = (5..10); say ~@array;    5 6 7 8 9 10
  94. 94. Числовой контекст my @array = (5..10); say +@array;    6
  95. 95. Строковый контекст в контексте хеша my @array = (5..10); say ~ hash @array;    5  6    7  8    9  10
  96. 96. Булевый контекст my @array = (5..10); say ?+@array;
  97. 97. Конкатенация строк
  98. 98. print      quot;Uzbek quot;    . quot;Perl quot;    . quot;Workshopquot;;
  99. 99. print      quot;Uzbek quot;    ~ quot;Perl quot;    ~ quot;Workshopquot;;
  100. 100. Установка Rakudo
  101. 101. Исключения
  102. 102. Perl 5 eval {     print 1/0; } if ($@) {     print_error(); }
  103. 103. Perl 6 try {     say 1/0;     CATCH {         print_error();     } }
  104. 104. Perl 6 try {     say 1/0;     CATCH {         print_error();     } }
  105. 105. Циклы
  106. 106. Perl 5 foreach (@list) {    . . . }
  107. 107. Perl 5 for (@list) {    . . . }
  108. 108. Perl 6 for @list {    . . . }
  109. 109. Perl 6 for @list ‐> $x {    say $x; }
  110. 110. Perl 6 for @list ‐> $x {    say $x; }
  111. 111. Perl 6 for @list ‐> $x, $y {    say $x + $y }
  112. 112. Perl 6 loop(my $t = 300; $t; $t‐‐){    sleep 1; };
  113. 113. Функции
  114. 114. sub flight($from, $to) {    say quot;$from ‐‐> $toquot;; } flight(quot;Москваquot;,         quot;Ташкентquot;);
  115. 115. sub flight($from, $to) {    say quot;$from ‐‐> $toquot;; } flight(quot;Москваquot;,         quot;Ташкентquot;);
  116. 116. sub flight($from, $to) {    say quot;$from ‐‐> $toquot;; } flight quot;Москваquot;,         quot;Ташкентquot;;
  117. 117. sub flight($from, $to) {    say quot;$from ‐‐> $toquot;; } flight    from => quot;Москваquot;,     to   => quot;Ташкентquot;;
  118. 118. sub flight($from, $to) {    say quot;$from ‐‐> $toquot;; } flight    from => quot;Москваquot;,     to   => quot;Ташкентquot;;
  119. 119. sub choose(@a, @b) {    return       any(@a) < all(@b) ??       1 !! 2; } say choose(     @SkyExpressPrices,     @AeroflotPrices );
  120. 120. Гипероператоры
  121. 121. my @Flight = (...); my @Food = (...);
  122. 122. my @Flight = (...); my @Food = (...); my @FullPrice =     @Flight >>+<< @Food;
  123. 123. my @Flight = (...); my @Food = (...); my @FullPrice =     @Flight >>+<< @Food; @FullPrice >>+=<< $Fuel;
  124. 124. my @Flight = (...); my @Food = (...); my @FullPrice =     @Flight »+« @Food;
  125. 125. Объединения
  126. 126. Объединения (квантовые суперпозиции)
  127. 127. sub choose(@a, @b) {    return       any(@a) < all(@b) ??       1 !! 2; }
  128. 128. say 1      if 20 == 10 | 20 | 30;
  129. 129. say 1      if 20 == 10 | 20 | 30; say 1     if 20 == any(10, 20, 30);
  130. 130. say 1     if 20 == none(1, 2, 3);
  131. 131. my $j = 2009 | 2010; say 1 if 2009 == $j;
  132. 132. Перегрузка операторов и функций
  133. 133. Перегрузка операторов и функций (множественная диспетчеризация)
  134. 134. 1 + 2 2.71 + 3.14
  135. 135. multi sub     elections($candidate); multi sub     elections(@candidates);
  136. 136. multi infix:<+> ($a, $b) {    return $a ‐ $b; } say 10 + 20;     ‐10
  137. 137. multi postfix:<!> ($n) {    return [*] 1..$n; } say 2009!;
  138. 138. multi postfix:<!> ($n) {    return [*] 1..$n; } say 2009!;
  139. 139. Где взять
  140. 140. Предыстория
  141. 141. Parrot 0.1.0 languages/perl6
  142. 142. Parrot 0.1.0 Для компиляции файла грамматики Perl 6 нужен 1 ГБ памяти
  143. 143. Parrot 0.1.0 Настоящий байткод real.perl6.ru
  144. 144. PUGS
  145. 145. PUGS Perl User’s Golfing System
  146. 146. PUGS Perl User’s Golfing System Написан на Haskell
  147. 147. PUGS Perl User’s Golfing System Вместе с GHC собирается часа четыре
  148. 148. PUGS Perl User’s Golfing System Самое большое подмножество языка на тот момент
  149. 149. use v6;
  150. 150. use v6; Модули на CPAN для Perl 5
  151. 151. use v6; Moose?
  152. 152. use v6; 5.10?
  153. 153. Perl 6 не один Pugs Elf Rakudo KindaPerl6 SMOP
  154. 154. Rakudo
  155. 155. Rakudo Rakudo-do — путь верблюда (яп.)
  156. 156. Rakudo Компилятор в PIR-код
  157. 157. Установка Rakudo $ git clone git://github.com/rakudo/rakudo.git
  158. 158. Установка Rakudo $ git clone git://github.com/rakudo/rakudo.git $ cd rakudo
  159. 159. Установка Rakudo $ git clone git://github.com/rakudo/rakudo.git $ cd rakudo $ perl Configure.pl ‐‐gen‐parrot
  160. 160. Установка Rakudo $ git clone git://github.com/rakudo/rakudo.git $ cd rakudo $ perl Configure.pl ‐‐gen‐parrot
  161. 161. Установка Rakudo $ git clone git://github.com/rakudo/rakudo.git $ cd rakudo $ perl Configure.pl ‐‐gen‐parrot $ make
  162. 162. Установка Rakudo Сегодня нет make install
  163. 163. Установка Rakudo $ ./perl6 ‐v
  164. 164. Установка Rakudo $ ./perl6 ‐v This is Rakudo Perl 6, revision 38679 built on  parrot 1.1.0‐devel for darwin‐thread‐multi‐2level. Copyright 2006‐2008, The Perl Foundation.
  165. 165. Компилятор Rakudo rakudo.org
  166. 166. Виртуальная машина Parrot parrot.org
  167. 167. Документация, тесты и грамматика pugscode.org
  168. 168. Веб-приложения на Perl 6
  169. 169. real.perl6.ru 2004 год
  170. 170. int main() {     char* argv[] = {         quot;parrotquot;,          getenv (quot;PATH_TRANSLATEDquot;),         NULL     };     execvp(quot;/parrot‐0.1.0/parrotquot;, argv);     return 0; }
  171. 171. my @keys = (     'SERVER_NAME',     'REMOTE_ADDR',     'HTTP_USER_AGENT' ); my $key; foreach $key (@keys){    print1 quot;$key=%ENV{$key}<br />quot;; }
  172. 172. my @keys = (     'SERVER_NAME',     'REMOTE_ADDR',     'HTTP_USER_AGENT' ); my $key; foreach $key (@keys){    print1 quot;$key=%ENV{$key}<br />quot;; }
  173. 173. sub params2hash(     %params,     @params_key,     @params_value){     for 0 .. @params_key ‐> $c {         %params{@params_key[$c]} =             @params_value[$c];     } }
  174. 174. .include quot;counter.imcquot; open     P0, quot;counter.txtquot; readline S0, P0 set      I0, S0 inc      I0 set      I2, 0 seek     P0, I2, I2 print    P0, I0 close    P0
  175. 175. november-wiki.org 2008 год
  176. 176. Рождество — December Вики на Perl 6 — November
  177. 177. Про что не рассказал?
  178. 178. Про классы
  179. 179. Про классы, про роли
  180. 180. Про классы, про роли и про грамматики
  181. 181. Кратко об этом на примере November
  182. 182. #!perl6 use v6; use CGI; use Wiki; my Wiki $wiki = Wiki.new; $wiki.init(); my $cgi = CGI.new; $cgi.init(); $wiki.handle_request($cgi);
  183. 183. Классы и роли
  184. 184. class Wiki does Session {     my $.template_path       is rw;     my $.userfile_path       is rw;     has Storage $.storage    is rw;     has CGI     $.cgi        is rw;     . . . }
  185. 185. method handle_request(CGI $cgi) {     $.cgi = $cgi;     my $action = $cgi.param<action> // 'view';     given $action {         when 'view' {              self.view_page(); return;         }         when 'edit' {             self.edit_page(); return;         }         when 'log_in' {             self.log_in(); return;         }     }     self.not_found(); }
  186. 186. has Storage $.storage is rw; class Storage {     . . . } class Storage::File is Storage {     . . . } $.storage = Storage::File.new(); $.storage.init();
  187. 187. my $input = $*IN.slurp(); self.parse_params(%params, $input);
  188. 188. Грамматика
  189. 189. if $par ~~ Text::Markup::Wiki::Minimal::Syntax::paragr {     . . . } else {    $result = '<p>Could not parse paragraph.</p>'; }
  190. 190. grammar Text::Markup::Wiki::Minimal::Syntax {     token paragraph { ^ [<heading> || <parchunk>+] $ };     token heading { '==' <parchunk>+ '==' };     token parchunk { <twext> || <wikimark> || <metachar> ||              <malformed> };     token twext { [ <.alnum> || <.otherchar> || <.whitespace> ]           + };     token otherchar { <[ !..% (../ : ; ? @  ^..` {..~ ]> };     token whitespace { ' ' | n };     token wikimark { '[[' <twext> ']]' };     token metachar { '<' || '>' || '&' || ' };     token malformed { '[' || ']' } }
  191. 191. grammar  Text::Markup::Wiki::Minimal::Syntax { }
  192. 192. token paragraph {     ^ [<heading> || <parchunk>+] $ };
  193. 193. token heading {     '==' <parchunk>+ '==' };
  194. 194. STD.pm — 150 КБ
  195. 195. Что почитать
  196. 196. Июнь 2003
  197. 197. Июнь 2004
  198. 198. Июнь 2004 2005
  199. 199. 2005
  200. 200. 2007?
  201. 201. Это все уже история
  202. 202. Документация
  203. 203. RFCs, Apocalypses, Exegeses
  204. 204. Все это уже история
  205. 205. RFCs, Apocalypses, Exegeses, Synopses
  206. 206. Synopses perlcabal.org/syn
  207. 207. Synopses perlcabal.org/syn S1 . . . S33
  208. 208. S = Synopses
  209. 209. S = Spec
  210. 210. Кого почитать
  211. 211. Мориц Ленц perlgeek.de
  212. 212. Габор Сабо szabgab.com
  213. 213. Джонатан Вортингтон use.perl.org/ ~JonathanWorthington
  214. 214. Карл Мэсак use.perl.org/~masak
  215. 215. Патрик Мишо use.perl.org/~pmichaud
  216. 216. Илья Беликин ihrd.livejournal.com
  217. 217. perl6.ru
  218. 218. __END__ Андрей Шитов http://shitov.ru | andy@shitov.ru

×