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

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

  • Upload
    andysh

  • View
    2.520

  • Download
    2

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Знакомство с Perl 6

Знакомство

с Perl 6

Page 2: Знакомство с Perl 6

220 слайдов

Page 3: Знакомство с Perl 6

2000

Про Perl 6 говорят с

Page 4: Знакомство с Perl 6

2003

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

Page 5: Знакомство с Perl 6

2007

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

Page 6: Знакомство с Perl 6

2009

Сейчас

Page 7: Знакомство с Perl 6

Готов ли Perl 6?

Page 8: Знакомство с Perl 6

Готов ли Perl 6?

Ну почти

Page 9: Знакомство с Perl 6

Когда будет?

Page 10: Знакомство с Perl 6

Когда будет?

На Рождество

Page 11: Знакомство с Perl 6

Когда будет?

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

Page 12: Знакомство с Perl 6

pre-alpha

2009-2010

Page 13: Знакомство с Perl 6

Когда в production?

Page 14: Знакомство с Perl 6

Когда в production?

Зависит от нас

Page 15: Знакомство с Perl 6

Когда в production?

Зависит от вас

Page 16: Знакомство с Perl 6

Когда в production?

Уже сейчас!

Page 17: Знакомство с Perl 6

Когда в production?

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

Page 18: Знакомство с Perl 6

Perl 6?

Зачем вообще нужен

Page 19: Знакомство с Perl 6

с Perl 4 на Perl 5?

Кто помнит переход

Page 20: Знакомство с Perl 6

4 != 5

Page 21: Знакомство с Perl 6

5 != 6

Page 22: Знакомство с Perl 6

5 != 6

Page 23: Знакомство с Perl 6

Perl = Perl

Page 24: Знакомство с Perl 6

‘Perl’ eq ‘Perl’

Page 25: Знакомство с Perl 6

Как изучать

Perl 6?

Page 26: Знакомство с Perl 6

Где взять

Perl 6?

Page 27: Знакомство с Perl 6

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

Perl 6?

Page 28: Знакомство с Perl 6

?

Page 29: Знакомство с Perl 6

Как изучать

Page 30: Знакомство с Perl 6

Как изучать

Знать Perl 5

изучить отличия

Page 31: Знакомство с Perl 6

Как изучать

Знать Perl 5

изучить отличия

Не знать Perl 5

Page 32: Знакомство с Perl 6

Как изучать

Знать Perl 5

изучить отличия

Не знать Perl 5

изучитьдокументацию

Page 33: Знакомство с Perl 6

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

Page 34: Знакомство с Perl 6

У нас есть два языка!

Page 35: Знакомство с Perl 6

У нас есть два языка!

Perl 5 и Perl 6

Page 36: Знакомство с Perl 6

У нас есть два языка!

Perl 5 и Perl 6

Завоевание мира стало проще

Page 37: Знакомство с Perl 6

Отличия от Perl 5

Page 38: Знакомство с Perl 6

Отличия от Perl 5(не все)

Page 39: Знакомство с Perl 6

Отличия от Perl 5

Page 40: Знакомство с Perl 6

Отличия от Perl 5

В идеологии

Page 41: Знакомство с Perl 6

Синтаксис Perl 6описан грамматикой

Page 42: Знакомство с Perl 6

Синтаксис Perl 6описан грамматикой

Синтаксис Perl 5задан реализацией

Page 43: Знакомство с Perl 6

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

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

Page 44: Знакомство с Perl 6

Perl 6 компилируется

Page 45: Знакомство с Perl 6

Perl 6 компилируется

Perl 5 интерпретируется

Page 46: Знакомство с Perl 6

Программа

Компилятор

Виртуальная машина

Байт-код

Page 47: Знакомство с Perl 6

Программа

Компилятор

Виртуальная машина

Байт-код

Page 48: Знакомство с Perl 6

BasicForthJakoLispm4OokPerl 6Perl 5PythonRubySchemeTcl

Page 49: Знакомство с Perl 6

BasicForthJakoLispm4OokPerl 6Perl 5PythonRubySchemeTcl

байт-код

Page 50: Знакомство с Perl 6

BasicForthJakoLispm4OokPerl 6Perl 5PythonRubySchemeTcl

LOL-код

Page 51: Знакомство с Perl 6

Отличия от Perl 5

В синтаксисе

Page 52: Знакомство с Perl 6

Хаффманизизация

Page 53: Знакомство с Perl 6

print "Hello, World!";

Perl 5

Page 54: Знакомство с Perl 6

say "は、ラクダの方法";

Perl 6

Page 55: Знакомство с Perl 6

"は、ラクダの方法".say;

Perl 6

Page 56: Знакомство с Perl 6

my $ναριαβλε =   "は、ラクダの方法";

Perl 6

Page 57: Знакомство с Perl 6

$str.chars;$str.bytes;$str.glyphs;

Perl 6

Page 58: Знакомство с Perl 6

$str.chars.say;

Perl 6

Page 59: Знакомство с Perl 6

$str.chars.say;

3.14.elems.say;

Perl 6

Page 60: Знакомство с Perl 6

Унификация

Page 61: Знакомство с Perl 6

Cигилы

Page 62: Знакомство с Perl 6

my @arr = (0..5);say $arr[2];

Perl 5

Page 63: Знакомство с Perl 6

my @arr = (0..5);say @arr[2];

Perl 6

Page 64: Знакомство с Perl 6

my @arr = (0..5);say @arr[2, 3];

Perl 6

Page 65: Знакомство с Perl 6

my @arr = (0..5);say @arr.elems;

Perl 6

Page 66: Знакомство с Perl 6

my %hash = (    city => "Tashkent",    year => 2009);say $hash{city};

Perl 5

Page 67: Знакомство с Perl 6

my %hash = (    city => "Tashkent",    year => 2009);say %hash<city>;

Perl 6

Page 68: Знакомство с Perl 6

my %hash =     city => "Tashkent",    year => 2009;say %hash<city year>;

Perl 6

Page 69: Знакомство с Perl 6

my %hash =     city => "Tashkent",    year => 2009;say %hash.kv;

Perl 6

Page 70: Знакомство с Perl 6

Сигилы — не тип переменной

Page 71: Знакомство с Perl 6

Сигилы — интерфейс контейнера

Page 72: Знакомство с Perl 6

@Объект реализует роль Positional

и поддерживает методpostcircumfix:<[ ]>

Page 73: Знакомство с Perl 6

%Объект реализует роль Associative

и поддерживает методpostcircumfix:<{ }>

Page 74: Знакомство с Perl 6

&Объект реализует роль Callable

и поддерживает методpostcircumfix:<( )>

Page 75: Знакомство с Perl 6

qw

Page 76: Знакомство с Perl 6

my @cities = (    "Moscow", "Kiev", "Tashkent");

Perl 5

Page 77: Знакомство с Perl 6

my @cities =    "Moscow", "Kiev", "Tashkent";

Perl 6

Page 78: Знакомство с Perl 6

my @cities = qw(Moscow Kiev Tashkent);

Perl 5

Page 79: Знакомство с Perl 6

my @cities = <Moscow Kiev Tashkent>;

Perl 6

Page 80: Знакомство с Perl 6

Твигилы

Page 81: Знакомство с Perl 6

$ENV{SERVER_NAME}

Perl 5

Page 82: Знакомство с Perl 6

%*ENV<SERVER_NAME>

Perl 6

Page 83: Знакомство с Perl 6

%*ENV<SERVER_NAME>

Perl 6

Page 84: Знакомство с Perl 6

%*ENV<SERVER_NAME>

Perl 6

Page 85: Знакомство с Perl 6

%*ENV<SERVER_NAME>

Perl 6

Page 86: Знакомство с Perl 6

$var$.var$^var$:var$*var

$?var$=var$!var

Page 87: Знакомство с Perl 6

Perl 5

__LINE____FILE__

__PACKAGE__

Page 88: Знакомство с Perl 6

Perl 6

$?LINE$?FILE

$?PACKAGE

Page 89: Знакомство с Perl 6

Цепочки сравнений

Page 90: Знакомство с Perl 6

if ($latitude > 41.2 &&    $latitude < 41.4) {    print "Tashkent\n";}

Perl 5

Page 91: Знакомство с Perl 6

if 41.2 < $latitude < 41.4 {    say "Tashkent";}

Page 92: Знакомство с Perl 6

Контексты

Page 93: Знакомство с Perl 6

my @array = (5..10);

say ~@array;

   5 6 7 8 9 10

Строковый контекст

Page 94: Знакомство с Perl 6

my @array = (5..10);

say +@array;

   6

Числовой контекст

Page 95: Знакомство с Perl 6

my @array = (5..10);

say ~ hash @array;

                   5  6                   7  8                   9  10

Строковый контекств контексте хеша

Page 96: Знакомство с Perl 6

my @array = (5..10);

say ?+@array;

Булевый контекст

Page 97: Знакомство с Perl 6

Конкатенация строк

Page 98: Знакомство с Perl 6

print     "Uzbek "   . "Perl "   . "Workshop";

Page 99: Знакомство с Perl 6

print     "Uzbek "   ~ "Perl "   ~ "Workshop";

Page 100: Знакомство с Perl 6

Установка Rakudo

Page 101: Знакомство с Perl 6

Исключения

Page 102: Знакомство с Perl 6

eval {    print 1/0;}if ($@) {    print_error();}

Perl 5

Page 103: Знакомство с Perl 6

try {    say 1/0;

    CATCH {        print_error();    }}

Perl 6

Page 104: Знакомство с Perl 6

try {    say 1/0;

    CATCH {        print_error();    }}

Perl 6

Page 105: Знакомство с Perl 6

Циклы

Page 106: Знакомство с Perl 6

foreach (@list) {   . . .}

Perl 5

Page 107: Знакомство с Perl 6

for (@list) {   . . .}

Perl 5

Page 108: Знакомство с Perl 6

for @list {   . . .}

Perl 6

Page 109: Знакомство с Perl 6

for @list ‐> $x {   say $x;}

Perl 6

Page 110: Знакомство с Perl 6

for @list ‐> $x {   say $x;}

Perl 6

Page 111: Знакомство с Perl 6

for @list ‐> $x, $y {   say $x + $y}

Perl 6

Page 112: Знакомство с Perl 6

loop(my $t = 300; $t; $t‐‐){   sleep 1;};

Perl 6

Page 113: Знакомство с Perl 6

Функции

Page 114: Знакомство с Perl 6

sub flight($from, $to) {   say "$from ‐‐> $to";}

flight("Москва",        "Ташкент");

Page 115: Знакомство с Perl 6

sub flight($from, $to) {   say "$from ‐‐> $to";}

flight("Москва",        "Ташкент");

Page 116: Знакомство с Perl 6

sub flight($from, $to) {   say "$from ‐‐> $to";}

flight "Москва",        "Ташкент";

Page 117: Знакомство с Perl 6

sub flight($from, $to) {   say "$from ‐‐> $to";}

flight   from => "Москва",    to   => "Ташкент";

Page 118: Знакомство с Perl 6

sub flight($from, $to) {   say "$from ‐‐> $to";}

flight   from => "Москва",    to   => "Ташкент";

Page 119: Знакомство с Perl 6

sub choose(@a, @b) {   return      any(@a) < all(@b) ??      1 !! 2;}

say choose(    @SkyExpressPrices,    @AeroflotPrices);

Page 120: Знакомство с Perl 6

Гипероператоры

Page 121: Знакомство с Perl 6

my @Flight = (...);my @Food = (...);

Page 122: Знакомство с Perl 6

my @Flight = (...);my @Food = (...);

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

Page 123: Знакомство с Perl 6

my @Flight = (...);my @Food = (...);

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

@FullPrice >>+=<< $Fuel;

Page 124: Знакомство с Perl 6

my @Flight = (...);my @Food = (...);

my @FullPrice =    @Flight »+« @Food;

Page 125: Знакомство с Perl 6

Объединения

Page 126: Знакомство с Perl 6

Объединения

(квантовые суперпозиции)

Объединения

Page 127: Знакомство с Perl 6

sub choose(@a, @b) {   return      any(@a) < all(@b) ??      1 !! 2;}

Page 128: Знакомство с Perl 6

say 1     if 20 == 10 | 20 | 30;

Page 129: Знакомство с Perl 6

say 1     if 20 == 10 | 20 | 30;

say 1    if 20 == any(10, 20, 30);

Page 130: Знакомство с Perl 6

say 1    if 20 == none(1, 2, 3);

Page 131: Знакомство с Perl 6

my $j = 2009 | 2010;

say 1 if 2009 == $j;

Page 132: Знакомство с Perl 6

Перегрузкаоператоров и функций

Page 133: Знакомство с Perl 6

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

Перегрузкаоператоров и функций

Page 134: Знакомство с Perl 6

1 + 2

2.71 + 3.14

Page 135: Знакомство с Perl 6

multi sub

    elections($candidate);

multi sub

    elections(@candidates);

Page 136: Знакомство с Perl 6

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

say 10 + 20;     ‐10

Page 137: Знакомство с Perl 6

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

say 2009!;

Page 138: Знакомство с Perl 6

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

say 2009!;

Page 139: Знакомство с Perl 6

Где взять

Page 140: Знакомство с Perl 6

Предыстория

Page 141: Знакомство с Perl 6

Parrot 0.1.0

languages/perl6

Page 142: Знакомство с Perl 6

Parrot 0.1.0

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

Page 143: Знакомство с Perl 6

Parrot 0.1.0

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

real.perl6.ru

Page 144: Знакомство с Perl 6

PUGS

Page 145: Знакомство с Perl 6

PUGS

Perl User’s Golfing System

Page 146: Знакомство с Perl 6

PUGS

Perl User’s Golfing System

Написан на Haskell

Page 147: Знакомство с Perl 6

PUGS

Perl User’s Golfing System

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

Page 148: Знакомство с Perl 6

PUGS

Perl User’s Golfing System

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

на тот момент

Page 149: Знакомство с Perl 6

use v6;

Page 150: Знакомство с Perl 6

use v6;

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

Page 151: Знакомство с Perl 6

use v6;

Moose?

Page 152: Знакомство с Perl 6

use v6;

5.10?

Page 153: Знакомство с Perl 6

Perl 6 не один

Pugs

Rakudo

SMOPKindaPerl6

Elf

Page 154: Знакомство с Perl 6

Rakudo

Page 155: Знакомство с Perl 6

Rakudo

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

Page 156: Знакомство с Perl 6

Rakudo

Компилятор в PIR-код

Page 157: Знакомство с Perl 6

Установка Rakudo

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

Page 158: Знакомство с Perl 6

Установка Rakudo

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

$ cd rakudo

Page 159: Знакомство с Perl 6

Установка Rakudo

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

$ cd rakudo

$ perl Configure.pl ‐‐gen‐parrot

Page 160: Знакомство с Perl 6

Установка Rakudo

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

$ cd rakudo

$ perl Configure.pl ‐‐gen‐parrot

Page 161: Знакомство с Perl 6

Установка Rakudo

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

$ cd rakudo

$ perl Configure.pl ‐‐gen‐parrot

$ make

Page 162: Знакомство с Perl 6

Установка Rakudo

Сегодня нет make install

Page 163: Знакомство с Perl 6

Установка Rakudo

$ ./perl6 ‐v

Page 164: Знакомство с Perl 6

Установка 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.

Page 165: Знакомство с Perl 6

Компилятор Rakudo

rakudo.org

Page 166: Знакомство с Perl 6

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

parrot.org

Page 167: Знакомство с Perl 6

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

pugscode.org

Page 168: Знакомство с Perl 6

Веб-приложения на Perl 6

Page 169: Знакомство с Perl 6

real.perl6.ru

2004 год

Page 170: Знакомство с Perl 6

int main() {    char* argv[] = {

        "parrot", 

        getenv ("PATH_TRANSLATED"),

        NULL

    };    execvp("/parrot‐0.1.0/parrot", argv);    return 0;}

Page 171: Знакомство с Perl 6

my @keys = (    'SERVER_NAME',    'REMOTE_ADDR',    'HTTP_USER_AGENT');my $key;foreach $key (@keys){   print1 "$key=%ENV{$key}<br />";}

Page 172: Знакомство с Perl 6

my @keys = (    'SERVER_NAME',    'REMOTE_ADDR',    'HTTP_USER_AGENT');my $key;foreach $key (@keys){   print1 "$key=%ENV{$key}<br />";}

Page 173: Знакомство с Perl 6

sub params2hash(    %params,    @params_key,    @params_value){    for 0 .. @params_key ‐> $c {        %params{@params_key[$c]} =            @params_value[$c];    }}

Page 174: Знакомство с Perl 6

.include "counter.imc"

open     P0, "counter.txt"readline S0, P0set      I0, S0inc      I0set      I2, 0seek     P0, I2, I2print    P0, I0close    P0

Page 175: Знакомство с Perl 6

november-wiki.org

2008 год

Page 176: Знакомство с Perl 6

Рождество — December

Вики на Perl 6 — November

Page 177: Знакомство с Perl 6

Про чтоне рассказал?

Page 178: Знакомство с Perl 6

Про классы

Page 179: Знакомство с Perl 6

Про классы,про роли

Page 180: Знакомство с Perl 6

Про классы,про роли

и про грамматики

Page 181: Знакомство с Perl 6

Кратко об этом на примере November

Page 182: Знакомство с Perl 6

#!perl6

use v6;

use CGI;

use Wiki;

my Wiki $wiki = Wiki.new;

$wiki.init();

my $cgi = CGI.new;

$cgi.init();

$wiki.handle_request($cgi);

Page 183: Знакомство с Perl 6

Классы и роли

Page 184: Знакомство с Perl 6

class Wiki does Session {

    my $.template_path       is rw;

    my $.userfile_path       is rw;

    has Storage $.storage    is rw;

    has CGI     $.cgi        is rw;

    . . .

}

Page 185: Знакомство с Perl 6

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

Page 186: Знакомство с Perl 6

has Storage $.storage is rw;

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

$.storage = Storage::File.new();$.storage.init();

Page 187: Знакомство с Perl 6

my $input = $*IN.slurp();

self.parse_params(%params, $input);

Page 188: Знакомство с Perl 6

Грамматика

Page 189: Знакомство с Perl 6

if $par ~~ Text::Markup::Wiki::Minimal::Syntax::paragraph 

{

    . . .

}

else {

   $result = '<p>Could not parse paragraph.</p>';

}

Page 190: Знакомство с Perl 6

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 { '[' || ']' }}

Page 191: Знакомство с Perl 6

grammar Text::Markup::Wiki::Minimal::Syntax {

}

Page 192: Знакомство с Perl 6

token paragraph {    ^ [<heading> || <parchunk>+] $};

Page 193: Знакомство с Perl 6

token heading {    '==' <parchunk>+ '=='

};

Page 194: Знакомство с Perl 6

STD.pm — 150 КБ

Page 195: Знакомство с Perl 6

Что почитать

Page 196: Знакомство с Perl 6

Июнь 2003

Page 197: Знакомство с Perl 6

Июнь 2004

Page 198: Знакомство с Perl 6

Июнь 2004 2005

Page 199: Знакомство с Perl 6

2005

Page 200: Знакомство с Perl 6

2007?

Page 201: Знакомство с Perl 6
Page 202: Знакомство с Perl 6

Это все уже история

Page 203: Знакомство с Perl 6
Page 204: Знакомство с Perl 6

Документация

Page 205: Знакомство с Perl 6

RFCs,

Apocalypses, Exegeses

Page 206: Знакомство с Perl 6

Все это уже история

Page 207: Знакомство с Perl 6

RFCs,

Apocalypses, Exegeses,

Synopses

Page 208: Знакомство с Perl 6

Synopses

perlcabal.org/syn

Page 209: Знакомство с Perl 6

Synopses

perlcabal.org/syn

S1 . . . S33

Page 210: Знакомство с Perl 6

S = Synopses

Page 211: Знакомство с Perl 6

S = Spec

Page 212: Знакомство с Perl 6

Кого почитать

Page 213: Знакомство с Perl 6

Мориц Ленц

perlgeek.de

Page 214: Знакомство с Perl 6

Габор Сабо

szabgab.com

Page 215: Знакомство с Perl 6

Джонатан Вортингтонuse.perl.org/

~JonathanWorthington

Page 216: Знакомство с Perl 6

Карл Мэсак

use.perl.org/~masak

Page 217: Знакомство с Perl 6

Патрик Мишо

use.perl.org/~pmichaud

Page 218: Знакомство с Perl 6

Илья Беликин

ihrd.livejournal.com

Page 219: Знакомство с Perl 6

perl6.ru