$30 off During Our Annual Pro Sale. View Details »

History from Perl 1.0 to Perl 6

AnaTofuZ
September 14, 2018

History from Perl 1.0 to Perl 6

Roppongi.pm #1でのトークです

AnaTofuZ

September 14, 2018
Tweet

More Decks by AnaTofuZ

Other Decks in Science

Transcript

  1. History from Perl 1.0 to Perl 6

    ~ͬ͟ͱݟΔPerlͷྺ࢙~
    ീӢΞφάϥ@AnaTofuZ
    Roppongi.pm #1 9/14

    View Slide

  2. ϋΠαΠ!!!

    View Slide

  3. Okinawa.pm
    ͔Βདྷ·ͨ͠

    View Slide

  4. Ξφάϥ(@AnaTofuZ)Ͱ͢
    • ԭೄ/ླྀٿେֶ޻ֶ෦৘ใ޻ֶՊB4

    (དྷ೥΋ֶੜͰ͢)
    • ԭೄग़਎Ͱ͸ͳ͍ͷͰ࠮ٗͱݴΘΕ·͢
    • Okinawa.pm,PerlೖֶࣜinԭೄʹΑ͍͘·͢
    • ࠷ۙ਌஌ΒͣΛൈࣃ͠·͍ͬͯ͘ΔͷͰ

    ޱ͔Β݂ͷຯ͕͠·͢

    View Slide

  5. ͋Δ೔

    View Slide

  6. ;ͱࢥ͏

    View Slide

  7. Perl5

    View Slide

  8. Perl5

    View Slide

  9. Perl1
    Perl2
    Perl3
    Perl4

    View Slide

  10. ࣮ࡏ
    ͨ͠ͷ͔

    View Slide

  11. ීஈ࢖͍ͬͯΔPerlͬͯ…
    • େମͷํ͕ར༻͍ͯ͠Δ΋ͷ͸Perl5.*

    (Ұ෦ք۾Ͱ͸Perl6)
    • Perl5.*͕͋Δͱ͍͏͜ͱ͸ɼͦΕҎલͷ

    Perl1.0~Perl4.0͕ଘࡏ͍ͯ͠Δ͸ͣ

    View Slide

  12. History from Perl 1.0 to Perl 6

    ~ͬ͟ͱݟΔPerlͷྺ࢙~
    ീӢΞφάϥ@AnaTofuZ
    Roppongi.pm

    View Slide

  13. ͜ͷτʔΫͰ͸
    • ͜ͷτʔΫͰ͸ࠓ͸୭΋࢖͍ͬͯͳ͍(͸ͣ)ͳ

    ྺ࢙తͳPerlΛbuildͯ͠ಛੑΛ୳Γ·͢
    • ݱࡏͷPerl5ʹࢸΔ·ͰͷPerlͷྺ࢙Λ20෼Ͱݟͯ
    ͍͖·͢
    • ࡉ͔͍buildͷ࢓ํ͸࠙਌ձͰڵຯ͕͋Ε͹

    ͓࿩͠·͢

    View Slide

  14. ΞδΣϯμ
    • Perl1.0
    • Perl2.0
    • Perl3.0
    • Perl4.0
    • Perl5.0
    • Perl6

    View Slide

  15. աڈͷPerlͷ୳͠ํ
    • ࠓͷϦϙδτϦ͸Perl5
    • ϒϥϯν্ʹPerl4ͷ࠷ऴ൫͸ଘࡏ͍ͯ͠Δ
    • άάͬͯ΋ͳ͔ͳ͔Perl2,Perl3ͷίʔυ͸

    ݟ͔ͭΒͳ͍

    View Slide

  16. View Slide

  17. View Slide

  18. View Slide

  19. ʊਓਓਓਓਓਓਓਓਓਓਓਓਓʊ
    ʼɹPerl5ͷϦϙδτϦʹݱଘɹʻ
    ʉY^Y^Y^Y^Y^Y^Y^Y^Y^Y^ʉ

    View Slide

  20. Perlͷྺ࢙
    • Perl1.0ͷ࣌୅ͷϦϦʔε͕ϦϙδτϦʹ

    ࢒͍ͬͯΔ
    • ॳظ͸LarryʹΑΓMLʹ౤ߘ͞Ε͍ͯΔ

    (google group͔Βݱࡏ΋ӾཡՄೳ)
    • GitHub্Ͱ͸id:TimTody (LarryͷΞΧ΢ϯτ)͕
    commit͍ͯ͠ΔࣄʹͳͬͯΔ

    View Slide

  21. աڈͷPerlͷงғؾͷ஌Γํ
    • ී௨ʹݕࡧͯ͠΋αϯϓϧίʔυ౳͕

    ग़ͯ͜ͳ͍Մೳੑ͕ߴ͍
    • manͱςετίʔυ͕ख͕͔Γ
    • manͰ࣮૷͞Ε͍ͯΔػೳΛ֬ೝ
    • ςετίʔυͰ࣮ࡍͷ࢖͍ํΛ୳Δ

    View Slide

  22. աڈͷPerlͷbuildํ๏
    • Mac OSͷ৔߹σϑΥϧτͰೖ͍ͬͯΔgcc͜ͱ
    clangͰ͸ϔομʔϑΝΠϧؔ࿈ͷΤϥʔ͕ଟൃ
    • ͦͷͨΊࣗલͰgccΛbuildͯͦ͠ΕΛར༻͢Δ
    ඞཁ͕͋Δ
    • brewͰinstallͨ͠gccͰ͸ବ໨

    View Slide

  23. Perl1.0

    View Slide

  24. Perl1.0
    • ݱଘ͢Δ࠷ݹͷPerl
    • LarryWall͕ॻ͍ͨ
    • C,awk,sed,shͷྑ͍ͱ͜ΖΛऔͬͨݴޠ
    • 1987/12/18ʹϦϦʔε(stat͢Δͱ֬ೝͰ͖Δ)

    View Slide

  25. ؾʹͳΔPerl1.0࠷৽ಈ޲(2)
    • As a birthday present to Perl and Larry, through
    the work of the perl1-porters, in particular Richard
    Clamp, resurrected here is Perl 1.0 with minimal
    patches for modern machines.
    • ϕʔΦ΢ϧϑͷࢻͱڞʹ2002೥ͷ12݄19೔ʹ

    gcc-3ʹରԠͨ͠ύονͷtag͕ଧͨΕΔ
    • LarryͱPerl΁ͷ͓஀ੜ೔ϓϨθϯτ

    View Slide

  26. ؾʹͳΔPerl1.0࠷৽ಈ޲(2)
    • chastai͞Μ͕Perl1.0ͷϝϯςΛ͍ͯͨ͠΋ͷ
    Λbitbucketʹ͍͋͛ͯͨ

    https://bitbucket.org/chastai/perl-1.0
    • ·͔͞ͷςετ͕100%௨Δ
    • ࠓ೔ݟͨΒϦϙδτϦ͕ফ͍͑ͯͨ

    View Slide

  27. Perl5ͷσʔλܕ
    • εΧϥʔ
    • ഑ྻ
    • ϋογϡ
    • ϦϑΝϨϯε

    View Slide

  28. Perl1ͷσʔλܕ
    • εΧϥʔ
    • ഑ྻ
    • ϋογϡ
    • ϦϑΝϨϯε

    View Slide

  29. Perl1ͷσʔλܕ
    • εΧϥʔ
    • ഑ྻ
    • ϋογϡ
    • ϦϑΝϨϯε

    View Slide

  30. Perl1ͷσʔλܕ
    • εΧϥʔ
    • ഑ྻ + ࿈૝഑ྻ

    View Slide

  31. Perl1ͷσʔλܕ
    • εΧϥʔ
    • ഑ྻ + ࿈૝഑ྻ

    View Slide

  32. Perl1ͷσʔλܕ
    • String
    • String഑ྻ + ࿈૝഑ྻ

    View Slide

  33. Perl1Ͱͳ͍΋ͷ
    • ൣғԋࢉࢠ
    • foreach (ग़དྷͳ͘͸ͳ͍)
    • ଞϞδϡʔϧ
    • use
    • my,our,local…

    View Slide

  34. Perl1Ͱ͋Δ΋ͷ
    • ஔ׵
    • جຊਖ਼نදݱ
    • Ϧετૢ࡞ (shift,unsift,pop,push)
    • @_
    • จࣈྻԋࢉࢠ
    • chop
    • each

    View Slide

  35. αϒϧʔνϯ΋͋Δͧ!!
    sub MAX {
    $max = pop(@_);
    while ($foo = pop(@_)) {
    $max = $foo if $max < $foo;
    }
    $max;
    }
    ...
    $bestday = do MAX($mon,$tue,$wed,$thu,$fri);

    View Slide

  36. for loop΋ग़དྷΔͧ!!
    #!/usr/bin/env perl
    @array = (1,2,3,4,5,6,7,8,9,10);
    for ( $i = 0; $i < $#array; $i++){
    print $array[$i] ."\n";
    }

    View Slide

  37. for loop (੒ޭ)
    #!/usr/bin/env perl
    @array = (1,2,3,4,5,6,7,8,9,10);
    for ( $i = 0; $i < $#array; $i++){
    print $array["$i"] ."\n";
    }

    View Slide

  38. ऑ఺
    • γϯϘϧςʔϒϧʹΞΫηεͰ͖ͳ͍
    • αϒϧʔνϯʹ഑ྻΛ౉ͤͳ͍

    (ग़དྷͳ͘͸ͳ͍)
    • ίϯύΠϧΤϥʔͷϝοηʔδ͕ແͯ͘ݫ͠
    ͍

    View Slide

  39. Perl1.0/perl.h
    • Perlͷ಺෦σʔλܕ͸perl.hͰtypedef͠

    େจࣈͷํΛར༻͢Δ
    1 typedef struct arg ARG;
    2 typedef struct cmd CMD;
    3 typedef struct formcmd FCMD;
    4 typedef struct scanpat SPAT;
    5 typedef struct stab STAB;
    6 typedef struct stio STIO;
    7 typedef struct string STR;
    8 typedef struct atbl ARRAY;
    9 typedef struct htbl HASH;

    View Slide

  40. Perl1.0ͷ഑ྻ
    • atblߏ଄ମ͕഑ྻͱͯ͠ػೳ
    • ࣮૷͸ࢸͬͯγϯϓϧͰSTRͷϙΠϯλ഑ྻͱ

    ഑ྻͷ࠷େ஋ary_max,ݸ਺ͷ൑அʹ࢖͏ary_fill
    • 

    1 struct atbl {
    2 STR **ary_array;
    3 int ary_max;
    4 int ary_fill;
    5 };

    View Slide

  41. Perl2.0

    View Slide

  42. Perl2.0
    • 1988೥6݄5೔ϦϦʔε
    • foreach͕௥Ճ
    • local͕ॳొ৔
    • σʔλߏ଄͕Perl1.0ΑΓ΋ෳࡶʹॻ͖׵ΘΔ
    • ࿈૝഑ྻͷdelete͕௥Ճ
    • (౰࣌)sedΑΓ΋ߴ଎ʹͳͬͨ

    View Slide

  43. Perl2.0
    • ֦ுਖ਼نදݱ͕αϙʔτ

    /(foo|bar)/, /(foo)*/,/(foo)+/
    • \s,\S,\d,\D͕࢖༻Մೳʹ
    • αϒϧʔνϯͷ࠶ؼݺͼग़͕͠Մೳʹͳͬͨ
    • do ‘foo.pl’ ͳͲͰ֎෦ϑΝΠϧΛऔΓࠐΊΔ༷ʹ
    • libҎԼʹPerl੡ͷϞδϡʔϧ͕஀ੜ(getopt.plͳͲ)

    View Slide

  44. Perl2.0ͰϑΟϘφον਺ྻ
    1 sub fib {
    2 local($arg) = @_;
    3 local($foo);
    4 $level++;
    5 if ($arg <= 2) {
    6 $foo = 1;
    7 }
    8 else {
    9 $foo = do fib($arg-1) + do fib($arg-2);
    10 }
    11 $level--;
    12 $foo;
    13 }

    View Slide

  45. Perl2.0͓΋͠ΖϙΠϯτ
    • จࣈྻதͷ഑ྻ͸ల։͞Εͳ͍
    1 @helo = (1,2,3);
    2
    3 print @helo.”\n”; #3
    4 print “@helo\n"; #@hello

    View Slide

  46. Perl2.0ͷStringܕ
    • STAB͕಺෦ʹຒΊࠐ·ΕΔΑ͏ʹͳͬͨ
    1 struct string {
    2 char * str_ptr; /* pointer to malloced string */
    3 double str_nval; /* numeric value, if any */
    4 int str_len; /* allocated size */
    5 int str_cur; /* length of str_ptr as a C string */
    6 union {
    7 STR *str_next; /* while free, link to next free str */
    8 STAB *str_magic; /* while in use, ptr to magic stab, if an
    */
    9 } str_link;
    10 char str_pok; /* state of str_ptr */
    11 char str_nok; /* state of str_nval */
    12 char str_rare; /* used by search strings */
    13 char str_prev; /* also used by search strings */
    14 };

    View Slide

  47. Perl3.0

    View Slide

  48. Perl3.0
    • 1988೥6݄5೔ϦϦʔε
    • ҹ৅ͱͯ͠Perl5ͷݪܕ͕׬੒͢Δ
    • foreach͕಺෦తʹforͱಉ౳ʹͳΔ
    • ൣғԋࢉࢠ..͕഑ྻίϯςΩετʹରԠ

    View Slide

  49. Perl3
    • ܕάϩϒ͕ొ৔

    αϒϧʔνϯʹ೚ҙͷม਺Λ౉͢ࣄ͕Մೳʹ
    •࿈૝഑ྻ͕ެࣜͷσʔλܕʹঢ֨

    εΧϥʔ,εΧϥʔͷ഑ྻ,εΧϥʔͷ࿈૝഑ྻ
    ͷ3छྨ

    View Slide

  50. Perl3
    • αϒϧʔνϯίʔϧ͕do hoge͔Β

    &hogeʹมߋ͞Ε,Ҿ਺ͳ͠Ͱ΋࣮ߦՄೳʹ
    • -uΦϓγϣϯ͕௥Ճ͞ΕPerlεΫϦϓτ࣮ߦޙ
    ʹdump͢Δػೳ͕͍ͭͨ(όΠφϦ͕ੜ੒ग़
    དྷΔΑ͏ʹͳͬͨ)

    View Slide

  51. Perl3
    • จࣈྻதͷ@array͕ల։͞ΕΔΑ͏ʹͳͬͨ
    • αϒϧʔνϯ΍mainͰshiftͱॻ͘ͱARGV͔@_
    ΛΑ͠ͳʹର৅ʹͯ͘͠ΕΔΑ͏ʹਐԽ
    • mkdir,chrootͳͲͷOSܥͷؔ਺௥Ճ
    • reverse,definedͳͲ͕௥Ճ͞ΕΔ

    View Slide

  52. ൣғԋࢉࢠͷಈ͖
    • scalar operatorͱͯ͠ͷಈ͖

    (҉໧తʹߦ൪߸$.ͱൺֱ)
    2 if (101 .. 200) { print; } # print 2nd hundred lines
    3
    4 next line if (1 .. /^$/); # skip header lines
    5
    6 s/^/> / if (/^$/ .. eof()); # quote body
    7
    9 for (101 .. 200) { print; } # print $_ 100 times
    10
    11 @foo = @foo[$[ .. $#foo]; # an expensive no-op
    12 @foo = @foo[$#foo-4 .. $#foo]; # slice last 5 items
    • array operatorͱͯ͠ͷಈ͖

    View Slide

  53. Perl3
    • ܕάϩϒ

    Perl͕ม਺ͷ৘ใΛอଘ͢ΔγϯϘϧςʔϒϧ
    ΁ͷΞΫηεํ๏

    View Slide

  54. Perl3-Perl4ͷܕάϩϒ
    1 #!../perl
    2
    3 $hoge = "wanwan";
    4 %hoge = ('cat' , "nyanya");
    5 *foo = *hoge;
    6
    7 print "$foo{'cat'}\n";
    8 *piyo = $_main{'hoge'};
    9 print "$piyo\n";

    View Slide

  55. (ࢀߟ)Perl5ͷܕάϩϒ
    1 #!/usr/bin/env perl
    2 our $hoge = 'wanwa';
    3 $hoge_glob = *hoge{SCALAR};
    4
    5 print "${$hoge_glob}\n";

    View Slide

  56. Perl5ͷܕάϩϒͱͷҧ͍
    • ΤϯτϦʔΛ·Δ͝ͱ࣋ͬͯ͘ΔͨΊSCALAR
    ͳͲͷࢦఆ͕ෆՄೳ
    • $_main͕mainؔ਺ͷγϯϘϧςʔϒϧͰ͋Γ
    ௚઀ૢ࡞Մೳ(%main::Ͱ͸ͳ͍)

    View Slide

  57. Perl3ͷεΧϥʔܕ
    1 struct string {
    2 char * str_ptr; /* pointer to malloced string */
    3 union {
    4 double str_nval; /* numeric value, if any */
    5 STAB *str_stab; /* magic stab for magic "key" string */
    6 long str_useful; /* is this search optimization effective? */
    7 ARG *str_args; /* list of args for interpreted string */
    8 HASH *str_hash; /* string represents an assoc array (stab?) */
    9 ARRAY *str_array; /* string represents an array */
    10 } str_u;
    11 int str_len; /* allocated size */
    12 int str_cur; /* length of str_ptr as a C string */
    13 STR *str_magic; /* while free, link to next free str */
    14 /* while in use, ptr to "key" for magic items */
    15 char str_pok; /* state of str_ptr */
    16 char str_nok; /* state of str_nval */
    17 unsigned char str_rare; /* used by search strings */
    18 unsigned char str_state; /* one of SS_* below */
    19 /* also used by search strings for backoff */
    20 #ifdef TAINT
    21 bool str_tainted; /* 1 if possibly under control of $< */
    22 #endif
    23 };

    View Slide

  58. Perl3ςΫχοΫ
    • ଟ࣍ݩ഑ྻ͸࿈૝഑ྻΛ࢖ͬͯΤϛϡϨʔτ
    ͍ͯͨ͠
    1 %hash = ();
    2
    3 $hash{'piyo','foo'} = "hoge";
    4
    5 print "$hash{'piyo','foo'}\n";
    • ࿈૝഑ྻͷ =>͸·ͩ࢖͑ͣ, ’΍”΋লུෆՄ

    View Slide

  59. Perl3ͷ಺෦ߏ଄
    • Newzͱ͍͏ϚΫϩͰsafemalloc͞ΕΔ༷ʹ
    ͳͬͨ

    (Perl2·Ͱ͸ܕͷؔ਺಺Ͱmalloc͍ͯͨ͠)

    View Slide

  60. Perl4.0

    View Slide

  61. Perl4ͷมߋ఺
    • 1991೥3݄21೔ϦϦʔε
    • ϓϩάϥϛϯάPerlग़൛ه೦ʹϦϦʔε͞Εͨ
    • bug fixͱίʔυͷվྑ͕ओ

    View Slide

  62. Perl4ͷมߋ఺
    • MS-DOS,OS2ʹରԠ࢝͠ΊΔ
    • YaccͰจ๏Λఆ͍ٛͯͨ͠ϑΝΠϧ໊͕perl.y͔
    Βperly.yʹमਖ਼͞ΕΔ
    • mainؔ਺΋perly.c͔Βperl.cʹमਖ਼
    • ςετίʔυͷ֦ுࢠΛ”.t”ʹ౷Ұ

    View Slide

  63. Perl4ͷมߋ఺
    • NDBM୯ମ͔ΒGNUͷDBϚωʔδϟʔͷGDBM
    ΋ϋογϡੜ੒࣌ʹαϙʔτ࢝͠ΊΔ
    • Time::LocalͷݪܕtimelocalϥΠϒϥϦ͕ύο
    έʔδʹՃΘΔ
    • SETREGIDͳͲͷϚΫϩͷ໊લ͕HAS_SETREGID
    ʹมߋ͞ΕΔ

    View Slide

  64. Perl4ͷࢥ͍ग़
    • require͕ొ৔
    • Ұ੪Λ෩ᴆͨ͠jcode.plͳͲ͕ొ৔
    • ౰࣌ͷύοέʔδͷ۠੾Γ͸::Ͱ͸ͳ͘’

    &jcode::convert (Perl5)

    &jcode’convert (Perl4)

    View Slide

  65. Perl4/perl.h
    1 typedef struct arg ARG;
    2 typedef struct cmd CMD;
    3 typedef struct formcmd FCMD;
    4 typedef struct scanpat SPAT;
    5 typedef struct stio STIO;
    6 typedef struct sub SUBR;
    7 typedef struct string STR;
    8 typedef struct atbl ARRAY;
    9 typedef struct htbl HASH;
    10 typedef struct regexp REGEXP;
    11 typedef struct stabptrs STBP;
    12 typedef struct stab STAB;
    13 typedef struct callsave CSV;
    • Perl4Ͱ͸

    View Slide

  66. Perl5.0

    View Slide

  67. Perl5
    • େ͖͘Perl͕ॻ͖׵ΘΔ
    • ΦϖίʔυΛར༻ͨ͠ίϯύΠϧ+ΠϯλϓϦ
    λܕͷݴޠ΁ͱ੾ΓସΘΔ
    • PerlͷΦϖίʔυ͸ؔ਺ͱରԠ

    View Slide

  68. Perl5
    • ϦϑΝϨϯε,blessొ৔
    • strictϞʔυ͕ଘࡏ͍ͯ͠ͳ͍ͨΊ





    ͜Μͳॻ͖ํ΋ςετίʔυʹొ৔
    6 # Test real references.
    7
    8 $FOO = \$BAR;
    9 $BAR = \$BAZ;
    10 $BAZ = "ok 8\n";
    11 print $$$FOO;

    View Slide

  69. Perl5
    • miniperl͕buildର৅ͱͯ͠ొ৔
    • perlͷυΩϡϝϯτ͕man͔Βpodʹมߋ͞Ε

    miniperlΛར༻͠buildͨ͠pod2manΛར༻͠

    manΛੜ੒͢Δ༷ʹͳͬͨ
    • use,my,XS͕ొ৔

    View Slide

  70. Perl5ͷσʔλߏ଄
    • ಺෦తʹεΧϥʔܕ͸SVܕʹඥ͚ͮ͞ΕΔ

    (ݱࡏͷPerl5ͱಉ༷ͷߏ଄)
    • όΠτίʔυΛ֨ೲ͢ΔOPܕͳͲ΋ొ৔
    • Perl4·Ͱͱ͸ҟͳΓɼߏ଄ମ໊ͷେจࣈ͕ܕ
    ໊ͱͳ͍ͬͯΔ

    View Slide

  71. Perl5.0ͷSVܕ
    • ݱࡏͷPerl5ͱ͸த਎͕ҟͳΔ͕͓͓Αͦݪܕ
    ͕࡞ΒΕ͍ͯΔ
    1 /* Using C's structural equivalence to help emulate C++
    inheritance here... */
    2
    3 struct sv {
    4 void* sv_any; /* pointer to something */
    5 U32 sv_refcnt; /* how many references to us */
    6 U32 sv_flags; /* what we are */
    7 };

    View Slide

  72. perl.hͰtypedef͞Ε͍ͯΔ
    σʔλܕͷਪҠ
    • Perl1.0
    • 9
    • Perl2.0
    • 11
    • Perl3.0
    • 12
    • Perl4.0
    • 14
    • Perl5.0
    • 49

    View Slide

  73. Perl5.10
    • featureϓϥάϚ͕ಋೖ͞ΕͨΓͱPerlͷసػ
    ͱͳͬͨόʔδϣϯͷ1ͭ
    • ͜ͷόʔδϣϯ͔ΒPerlͷtagͷ໋໊نଇ͕ม
    ߋ͞ΕΔ

    old: perl-5.95

    new: v5.10.0

    View Slide

  74. Perl5.03
    • ͓͓ΑͦPerl5.003_01ͱPerl5.003_02ͷؒ

    ͘Β͍ʹAnaTofuZ͕஀ੜ͢Δ

    View Slide

  75. Perl5/perl.h
    1 typedef struct Outrec Outrec;
    2 typedef struct interpreter PerlInterpreter;
    3 typedef struct ff FF;
    4 typedef struct sv SV;
    5 typedef struct av AV;
    6 typedef struct hv HV;
    7 typedef struct cv CV;
    8 typedef struct regexp REGEXP;
    9 typedef struct gp GP;
    10 typedef struct sv GV;
    11 typedef struct io IO;
    12 typedef struct context CONTEXT;
    13 typedef struct block BLOCK;

    View Slide

  76. ྺ࢙తͳPerlͷϙΠϯτ
    • ࠷ޙͷߦ຤ͷ;Λলུ͕okͱ͍͏ػೳ͸ແ͍ҝ

    ϫϯϥΠφʔͰ΋ perl -e ‘print “1\n”;’ͱ

    ηϛίϩϯ͕ඞਢ
    • versionΛݟΔʹ͸-vΦϓγϣϯ

    (௕͍Φϓγϣϯ͸ະରԠ)

    View Slide

  77. ػೳతͳൺֱ
    • 1ສͱ1ઍສͷFizzBuzzΛܭଌ
    • bytecodeʹམͱ͞ͳ͍෼

    ਺͕গͳ͍৔߹

    ॳظͷPerl͕ߴ଎
    • ݅਺͕ଟ͍৔߹bytecode

    ʹམͱ͢Perl5͕ߴ଎
    5JUMF
















    ສ ઍສ

    View Slide

  78. Perl6

    View Slide

  79. Perl6
    • ເ͋;ΕΔݴޠ
    • NQPͱݺ͹ΕΔPerl6ͷαϒηοτͰPerl6͸
    هड़͞Ε͍ͯΔ
    • ݱࡏ͸Rakudo͕΄΅ެࣜ
    • MoarVM,JVM,js,GraalVMͰಈ͘

    View Slide

  80. Perl6
    • ࢓༷ͱ࣮૷͕ಉҰͩͬͨPerl5ͱҧ͍

    ࢓༷ͱ࣮૷͕෼཭͍ͯ͠Δ
    • ࢓༷͸http://design.perl6.org/
    • ࣮૷తͳυΩϡϝϯτ͸

    https://docs.perl6.org/

    View Slide

  81. Rakudo
    • MoarVMͰ͸6modelͱ͍͏ΦϒδΣΫτγε
    ςϜΛ࠾༻͍ͯ͠Δ
    • ࠷ۙ͸JIT͕Α͘commit͞Ε͍ͯΔ

    View Slide

  82. 231KͷϩάΞφϥΠζΛ͢Δ
    • Perl5
    • 0.04s
    • Ruby
    • 0.15s
    • Python
    • 0.06s
    • Java
    • 0.27s
    • Perl6(Moar)
    • 0.86s
    • Perl6(JVM)
    • 21.48s

    View Slide

  83. 3GͷϩάΞφϥΠζΛ͢Δ
    • Perl5
    • 41.35s
    • Ruby
    • 574.52s
    • Python
    • 101.16s
    • Java
    • 48.85s
    • Perl6(Moar)
    • 2331.08s
    • Perl6(JVM)
    • 1665.56s

    View Slide

  84. ·ͱΊ
    • Perl͸Perl5ͱPerl6Ͱେن໛ͳमਖ਼͕ೖͬͨ
    • ݴޠతʹ͸Perl1.0͔ΒPerl5͸៉ྷʹਐԽͯ͠
    ͍͍ͬͯΔ

    View Slide

  85. ػೳతͳൺֱ
    • 1ສͱ1ઍສͷFizzBuzzΛܭଌ
    • bytecodeʹམͱ͞ͳ͍෼

    ਺͕গͳ͍৔߹

    ॳظͷPerl͕ߴ଎
    • ݅਺͕ଟ͍৔߹bytecode

    ʹམͱ͢Perl5͕ߴ଎
    5JUMF



















    ສ ઍສ

    View Slide