Download - Pugs: A Perl 6 Implementation
![Page 1: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/1.jpg)
PugsAn implementation of
Perl 6Audrey Tang
![Page 2: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/2.jpg)
≝
![Page 3: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/3.jpg)
Pugs...
![Page 4: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/4.jpg)
Pugs...
≝ Perl 6 Compiler
![Page 5: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/5.jpg)
Pugs...
≝ Perl 6 Compiler
≝ Perl 6 Runtime
![Page 6: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/6.jpg)
Pugs...
≝ Perl 6 Compiler
≝ Perl 6 Runtime
≝ Perl 6 Test Suite
![Page 7: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/7.jpg)
![Page 8: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/8.jpg)
![Page 9: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/9.jpg)
![Page 10: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/10.jpg)
![Page 11: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/11.jpg)
✓
![Page 12: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/12.jpg)
Perl 6 Code
![Page 13: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/13.jpg)
Perl 6 Code
✓ 130+ Modules
![Page 14: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/14.jpg)
Perl 6 Code
✓ 130+ Modules
✓ 160+ Examples
![Page 15: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/15.jpg)
Perl 6 Code
✓ 130+ Modules
✓ 160+ Examples
✓ 18,000+ Unit Tests
![Page 16: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/16.jpg)
“Official Perl 6”
![Page 17: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/17.jpg)
“Official Perl 6”
✓ Defined by semantics,not by accidents of history
![Page 18: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/18.jpg)
“Official Perl 6”
✓ Defined by semantics,not by accidents of history
✓ Compatibility test suite(cf. JavaTest/TCK)
![Page 19: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/19.jpg)
Spec ⇔ Test
✓
![Page 20: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/20.jpg)
Test ⇔ Spec
✓
![Page 21: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/21.jpg)
⇚
![Page 22: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/22.jpg)
Perl, circa 1995
![Page 23: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/23.jpg)
• use 5.000;
Perl, circa 1995
![Page 24: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/24.jpg)
• use 5.000;• require 'fastcwd.pl';
Perl, circa 1995
![Page 25: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/25.jpg)
• use 5.000;• require 'fastcwd.pl';• require 'newgetopt.pl';
Perl, circa 1995
![Page 26: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/26.jpg)
• use 5.000;• require 'fastcwd.pl';• require 'newgetopt.pl';• require 'exceptions.pl';
Perl, circa 1995
![Page 27: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/27.jpg)
Perl, circa 2005
![Page 28: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/28.jpg)
• use v6-alpha;
Perl, circa 2005
![Page 29: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/29.jpg)
• use v6-alpha;• use perl5:DBI;
Perl, circa 2005
![Page 30: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/30.jpg)
• use v6-alpha;• use perl5:DBI;• use perl5:Encode <encode decode>;
Perl, circa 2005
![Page 31: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/31.jpg)
• use v6-alpha;• use perl5:DBI;• use perl5:Encode <encode decode>;• use perl5:Template;
Perl, circa 2005
![Page 32: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/32.jpg)
• use v6-alpha;• use perl5:DBI;• use perl5:Encode <encode decode>;• use perl5:Template;
• # Implementation of "crypt"eval "crypt()" :lang<perl5>;
Perl, circa 2005
![Page 33: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/33.jpg)
Hybrid RuncorePugs
Pugs::RuntimePugs::CompilerPugs::Grammar
Pugs.EvalPugs.Prim
Pugs.Types
Perl 5
Runtime
GHC
Runtime
![Page 34: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/34.jpg)
Hybrid Runcore
⇚ Perl 5Pugs
Pugs::RuntimePugs::CompilerPugs::Grammar
Pugs.EvalPugs.Prim
Pugs.Types
Perl 5
Runtime
GHC
Runtime
![Page 35: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/35.jpg)
Hybrid Runcore
⇚ Perl 5
⇚ Haskell
Pugs
Pugs::RuntimePugs::CompilerPugs::Grammar
Pugs.EvalPugs.Prim
Pugs.Types
Perl 5
Runtime
GHC
Runtime
![Page 36: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/36.jpg)
Hybrid Runcore
⇚ Perl 5
⇚ Haskell
⇚ C (.so/.dll)
Pugs
Pugs::RuntimePugs::CompilerPugs::Grammar
Pugs.EvalPugs.Prim
Pugs.Types
Perl 5
Runtime
GHC
Runtime
![Page 37: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/37.jpg)
⇛
![Page 38: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/38.jpg)
PugsIntermediateLanguage
![Page 39: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/39.jpg)
Compilation Flow
![Page 40: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/40.jpg)
Pugs
JavaScript
Haskell Perl 5
Backends
![Page 41: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/41.jpg)
Pugs
JavaScript
Haskell Perl 5
YARV?JVM?
CLR? PyPy?
Backends
![Page 42: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/42.jpg)
Perl 5 Backend
Augmentation (XS)PadWalker, Devel::Caller
autobox, re::override ...
SemanticsData::Bind, Class::MOP
Pugs::Runtime, Pugs::Compiler::Rule ...
Perl 5 SugarMoose, Moose::Autobox ...
Syntaxv6.pm
Pugs::Compiler::Perl6 ...
Core
perl
Tool SupportCPAN, PAUSE
Perldoc, Perl::Tidy ...
Stable
Experimental
Perl 6's CPAN stack
InfrastructureParse::Yapp
Module::Compile ...
![Page 43: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/43.jpg)
Perl 5 Backend
⇛ Augment P5VM
Augmentation (XS)PadWalker, Devel::Caller
autobox, re::override ...
SemanticsData::Bind, Class::MOP
Pugs::Runtime, Pugs::Compiler::Rule ...
Perl 5 SugarMoose, Moose::Autobox ...
Syntaxv6.pm
Pugs::Compiler::Perl6 ...
Core
perl
Tool SupportCPAN, PAUSE
Perldoc, Perl::Tidy ...
Stable
Experimental
Perl 6's CPAN stack
InfrastructureParse::Yapp
Module::Compile ...
![Page 44: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/44.jpg)
Perl 5 Backend
⇛ Augment P5VM
⇛ Deploy P6 as P5Augmentation (XS)PadWalker, Devel::Caller
autobox, re::override ...
SemanticsData::Bind, Class::MOP
Pugs::Runtime, Pugs::Compiler::Rule ...
Perl 5 SugarMoose, Moose::Autobox ...
Syntaxv6.pm
Pugs::Compiler::Perl6 ...
Core
perl
Tool SupportCPAN, PAUSE
Perldoc, Perl::Tidy ...
Stable
Experimental
Perl 6's CPAN stack
InfrastructureParse::Yapp
Module::Compile ...
![Page 45: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/45.jpg)
Perl 5 Backend
⇛ Augment P5VM
⇛ Deploy P6 as P5
⇛ v6.pm on CPANAugmentation (XS)PadWalker, Devel::Caller
autobox, re::override ...
SemanticsData::Bind, Class::MOP
Pugs::Runtime, Pugs::Compiler::Rule ...
Perl 5 SugarMoose, Moose::Autobox ...
Syntaxv6.pm
Pugs::Compiler::Perl6 ...
Core
perl
Tool SupportCPAN, PAUSE
Perldoc, Perl::Tidy ...
Stable
Experimental
Perl 6's CPAN stack
InfrastructureParse::Yapp
Module::Compile ...
![Page 46: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/46.jpg)
JavaScript Backend
![Page 47: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/47.jpg)
JavaScript Backend
⇛ Like GWT, Hop, Links...
![Page 48: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/48.jpg)
JavaScript Backend
⇛ Like GWT, Hop, Links...
⇛ Passes 90% of tests
![Page 49: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/49.jpg)
JavaScript Backend
⇛ Like GWT, Hop, Links...
⇛ Passes 90% of tests
⇛ Slow - Aim for JS2/Tamarin
![Page 50: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/50.jpg)
䷗
![Page 51: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/51.jpg)
6.0Primitives䷁
![Page 52: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/52.jpg)
6.2Functions䷗
![Page 53: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/53.jpg)
6.28Objects䷒
![Page 54: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/54.jpg)
6.283Grammars䷊
![Page 55: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/55.jpg)
6.2831Types䷡
![Page 56: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/56.jpg)
6.28318Macros䷪
![Page 57: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/57.jpg)
6.283185Self Hosting
䷀
![Page 58: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/58.jpg)
2πPerl 6!☯
![Page 59: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/59.jpg)
≠
![Page 60: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/60.jpg)
“Frivolous Toy interpreter”(as seen on Slashdot)
![Page 61: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/61.jpg)
“FrivolousToy interpreter”
![Page 62: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/62.jpg)
“FrivolousToy interpreter”
![Page 63: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/63.jpg)
“Toy interpreter”
![Page 64: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/64.jpg)
“Toy interpreter”
![Page 65: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/65.jpg)
“Toy”
![Page 66: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/66.jpg)
-Ofun
![Page 67: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/67.jpg)
☺
![Page 68: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/68.jpg)
Arrow length
Time
15500+ commits
290+ committers
![Page 69: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/69.jpg)
Test Driven
![Page 70: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/70.jpg)
Test Driven
☺Bug report ➟ Test
![Page 71: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/71.jpg)
Test Driven
☺Bug report ➟ Test
☺Smoke Server
![Page 72: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/72.jpg)
Test Driven
☺Bug report ➟ Test
☺Smoke Server
☺:todo<unspecced>
![Page 73: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/73.jpg)
Anarchistic
![Page 74: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/74.jpg)
Anarchistic
☺10+ languages
![Page 75: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/75.jpg)
Anarchistic
☺10+ languages
☺30+ sub-projects
![Page 76: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/76.jpg)
Anarchistic
☺10+ languages
☺30+ sub-projects
☺Aggressive recruiting
![Page 77: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/77.jpg)
Patches Welcome !
![Page 78: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/78.jpg)
Patches Welcome !
![Page 79: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/79.jpg)
Commits Welcome!
![Page 80: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/80.jpg)
✆
![Page 81: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/81.jpg)
irc.freenode.net#perl6
![Page 82: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/82.jpg)
λ Camels
![Page 83: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/83.jpg)
λ Camels
✆ 200+ People
![Page 84: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/84.jpg)
λ Camels
✆ 200+ People✆ 20+ Regulars
![Page 85: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/85.jpg)
λ Camels
✆ 200+ People✆ 20+ Regulars✆ TimToady++
![Page 86: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/86.jpg)
svnbot6
![Page 87: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/87.jpg)
evalbot6
![Page 88: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/88.jpg)
devbot6
![Page 89: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/89.jpg)
lambdabot
![Page 90: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/90.jpg)
IRC.pugscode.org
![Page 91: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/91.jpg)
Run.pugscode.org
![Page 92: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/92.jpg)
Dev.pugscode.org
![Page 93: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/93.jpg)
Invite.pugscode.org
![Page 94: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/94.jpg)
Smoke.pugscode.org
![Page 95: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/95.jpg)
Spec.pugscode.org
![Page 96: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/96.jpg)
Blog.pugscode.org
![Page 97: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/97.jpg)
Mailing Lists
![Page 98: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/98.jpg)
Mailing Lists
✆ perl6-users
![Page 99: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/99.jpg)
Mailing Lists
✆ perl6-users
✆ perl6-language
![Page 100: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/100.jpg)
Mailing Lists
✆ perl6-users
✆ perl6-language
✆ perl6-compiler
![Page 101: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/101.jpg)
Repositories
![Page 102: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/102.jpg)
http://svn.pugscode.org/pugs/
Repositories
![Page 103: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/103.jpg)
http://svn.pugscode.org/pugs/
http://darcs.pugscode.org/pugs/
Repositories
![Page 104: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/104.jpg)
http://svn.pugscode.org/pugs/
http://darcs.pugscode.org/pugs/
SVK
Repositories
![Page 105: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/105.jpg)
♨
![Page 106: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/106.jpg)
Erdösing
![Page 107: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/107.jpg)
Erdösing
♨ 2006..*
![Page 108: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/108.jpg)
Hackathons
![Page 109: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/109.jpg)
Hackathons♨ Taipei
![Page 110: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/110.jpg)
Hackathons♨ Taipei
♨ Vienna
![Page 111: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/111.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
![Page 112: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/112.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
♨ Amsterdam
![Page 113: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/113.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
♨ Amsterdam
♨ Echt
![Page 114: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/114.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
♨ Amsterdam
♨ Echt
♨ Lismore
![Page 115: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/115.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
♨ Amsterdam
♨ Echt
♨ Lismore
♨ Mt. Arbel
![Page 116: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/116.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
♨ Amsterdam
♨ Echt
♨ Lismore
♨ Mt. Arbel
♨ Vienna2
![Page 117: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/117.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
♨ Amsterdam
♨ Echt
♨ Lismore
♨ Mt. Arbel
♨ Vienna2
♨ Tokyo
![Page 118: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/118.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
♨ Amsterdam
♨ Echt
♨ Lismore
♨ Mt. Arbel
♨ Vienna2
♨ Tokyo
♨ Redmond
![Page 119: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/119.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
♨ Amsterdam
♨ Echt
♨ Lismore
♨ Mt. Arbel
♨ Vienna2
♨ Tokyo
♨ Redmond
♨ Chicago
![Page 120: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/120.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
♨ Amsterdam
♨ Echt
♨ Lismore
♨ Mt. Arbel
♨ Vienna2
♨ Tokyo
♨ Redmond
♨ Chicago
♨ Boston
![Page 121: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/121.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
♨ Amsterdam
♨ Echt
♨ Lismore
♨ Mt. Arbel
♨ Vienna2
♨ Tokyo
♨ Redmond
♨ Chicago
♨ Boston
♨ Portland
![Page 122: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/122.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
♨ Amsterdam
♨ Echt
♨ Lismore
♨ Mt. Arbel
♨ Vienna2
♨ Tokyo
♨ Redmond
♨ Chicago
♨ Boston
♨ Portland
♨ Sao Paulo
![Page 123: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/123.jpg)
Hackathons♨ Taipei
♨ Vienna
♨ Toronto
♨ Amsterdam
♨ Echt
♨ Lismore
♨ Mt. Arbel
♨ Vienna2
♨ Tokyo
♨ Redmond
♨ Chicago
♨ Boston
♨ Portland
♨ Sao Paulo
♨ Mountain View?
![Page 124: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/124.jpg)
Perl 6 Reconciling the
IrreconcilableAudrey Tang
![Page 125: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/125.jpg)
ℙ
![Page 126: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/126.jpg)
Practical
![Page 127: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/127.jpg)
![Page 128: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/128.jpg)
![Page 129: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/129.jpg)
![Page 130: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/130.jpg)
![Page 131: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/131.jpg)
![Page 132: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/132.jpg)
![Page 133: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/133.jpg)
![Page 134: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/134.jpg)
![Page 135: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/135.jpg)
![Page 136: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/136.jpg)
∀
![Page 137: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/137.jpg)
Abstractions➥ Sexy
![Page 138: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/138.jpg)
Closuressub make_counter { my $start = shift; return sub { ++$start };} my $from_ten = make_counter(10);my $from_three = make_counter(3); print $from_three->(); # 4print $from_three->(); # 5print $from_ten->(); # 11
![Page 139: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/139.jpg)
Staged EvaluationBEGIN { print "Compile-time"; eval $generated_code; print "Still in compiler";}print "Normal runtime";eval $more_generated_code;
![Page 140: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/140.jpg)
Runtime Typecasting
my $piece = Pawn->new;bless $piece, Queen;
![Page 141: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/141.jpg)
S
![Page 142: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/142.jpg)
Shorthands➥ Natural
![Page 143: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/143.jpg)
Contexts
# Scalar vs. List context
my $one = <STDIN>; # Read one linemy @all = <STDIN>; # Read all lines
# String vs. Numeric context
print "Lines: @all" if @all < 10;
![Page 144: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/144.jpg)
Tied Variables
tie my %search => 'Tie::Google';print $search{'Perl Pugs'}[0]{URL};# http://www.pugscode.org/
![Page 145: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/145.jpg)
Regular Expresisons
# DeCSSs''$/=\2048;while(<>){G=29;R=142;if((@a=unqT="C*",_)[20]&48){D=89;_=unqb24,qT,@b=map{ord qB8,unqb8,qT,_^$a[--D]}@INC;s/...$/1$&/;Q=unqV,qb25,_;H=73;O=$b[4]<<9|256|$b[3];Q=Q>>8^(P=(E=255)&(Q>>12^Q>>4^Q/8^Q))<<17,O=O>>8^(E&(F=(S=O>>14&7^O)^S*8^S<<6))<<9,_=(map{U=_%16orE^=R^=110&(S=(unqT,"\xb\ntd\xbz\x14d")[_/16%8]);E^=(72,@z=(64,72,G^=12*(U-2?0:S&17)),H^=_%64?12:0,@z)[_%8]}(16..271))[_]^((D>>=8)+=P+(~F&E))for@a[128..$#a]}print+qT,@a}';s/[D-HO-U_]/\$$&/g;s/q/pack+/g;eval
![Page 146: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/146.jpg)
♡
![Page 147: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/147.jpg)
Best coding➥ No coding
![Page 148: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/148.jpg)
![Page 149: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/149.jpg)
CPAN
![Page 150: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/150.jpg)
♡ 11 years
CPAN
![Page 151: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/151.jpg)
♡ 11 years
♡ 5500+ authors
CPAN
![Page 152: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/152.jpg)
♡ 11 years
♡ 5500+ authors
♡ 11000+ modules
CPAN
![Page 153: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/153.jpg)
Services
![Page 154: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/154.jpg)
♡ Package Management
Services
![Page 155: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/155.jpg)
♡ Package Management
♡ Rating & Discussion
Services
![Page 156: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/156.jpg)
♡ Package Management
♡ Rating & Discussion
♡ Smoke Testing
Services
![Page 157: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/157.jpg)
♡ Package Management
♡ Rating & Discussion
♡ Smoke Testing
♡ Issue Tracking
Services
![Page 158: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/158.jpg)
Vocabulary≩ Syntax
![Page 159: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/159.jpg)
“The Best thing happened to Perl”
![Page 160: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/160.jpg)
But...
![Page 161: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/161.jpg)
Perl 5is not the best thing
for CPAN
![Page 162: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/162.jpg)
☣
![Page 163: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/163.jpg)
SyntaxRedundancy
☣
![Page 164: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/164.jpg)
![Page 165: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/165.jpg)
• use v5;
![Page 166: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/166.jpg)
• use v5;• sub render {
![Page 167: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/167.jpg)
• use v5;• sub render {• my $self = shift;
![Page 168: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/168.jpg)
• use v5;• sub render {• my $self = shift;• my %opts = (x => 1, y => 1, z => 0, %{$_[0]});
![Page 169: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/169.jpg)
• use v5;• sub render {• my $self = shift;• my %opts = (x => 1, y => 1, z => 0, %{$_[0]});• for my $item ( $self->filter(@{ $self->{items} }) ) {
![Page 170: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/170.jpg)
• use v5;• sub render {• my $self = shift;• my %opts = (x => 1, y => 1, z => 0, %{$_[0]});• for my $item ( $self->filter(@{ $self->{items} }) ) {• print $item->draw({
x => $opts{x}, y => $opts{y}, z => $opts{z}, }), "\n";
![Page 171: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/171.jpg)
• use v5;• sub render {• my $self = shift;• my %opts = (x => 1, y => 1, z => 0, %{$_[0]});• for my $item ( $self->filter(@{ $self->{items} }) ) {• print $item->draw({
x => $opts{x}, y => $opts{y}, z => $opts{z}, }), "\n";
• }}
![Page 172: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/172.jpg)
![Page 173: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/173.jpg)
• use v6-alpha;
![Page 174: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/174.jpg)
• use v6-alpha;• method render ($x = 1, $y = 1, $z = 0) {
![Page 175: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/175.jpg)
• use v6-alpha;• method render ($x = 1, $y = 1, $z = 0) {• for @.filter(@.items) {
![Page 176: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/176.jpg)
• use v6-alpha;• method render ($x = 1, $y = 1, $z = 0) {• for @.filter(@.items) {• say .draw(:$x, :$y, :$z);
}}
![Page 177: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/177.jpg)
JengaInternals☣
![Page 178: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/178.jpg)
![Page 179: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/179.jpg)
Bug-for-bug compatibility
☣
![Page 180: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/180.jpg)
Best Practicetakes discipline
![Page 181: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/181.jpg)
![Page 182: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/182.jpg)
Best Practiceshould be Natural!
![Page 183: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/183.jpg)
⑥
![Page 184: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/184.jpg)
2000RFCs
![Page 185: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/185.jpg)
2001Parrot
![Page 186: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/186.jpg)
2002Apocalypses
![Page 187: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/187.jpg)
2003Ponie
(late, as in the late Arthur Dent)
![Page 188: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/188.jpg)
2004Synopses
![Page 189: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/189.jpg)
2005Pugs
![Page 190: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/190.jpg)
2006v6-alpha
![Page 191: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/191.jpg)
![Page 192: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/192.jpg)
☯
![Page 193: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/193.jpg)
Reconcile the Irreconcilable
![Page 194: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/194.jpg)
Static Typingvs
Dynamic Typing
![Page 195: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/195.jpg)
Types☺
![Page 196: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/196.jpg)
Typing☹
![Page 197: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/197.jpg)
Static(C++, OCaml...)
![Page 198: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/198.jpg)
☯ Efficient
Static(C++, OCaml...)
![Page 199: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/199.jpg)
☯ Efficient
☯ Robust
Static(C++, OCaml...)
![Page 200: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/200.jpg)
☯ Efficient
☯ Robust
Static(C++, OCaml...)
Dynamic
(Python, Ruby, ...)
![Page 201: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/201.jpg)
☯ Efficient
☯ Robust
☯ Productive
Static(C++, OCaml...)
Dynamic
(Python, Ruby, ...)
![Page 202: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/202.jpg)
☯ Efficient
☯ Robust
☯ Productive
☯ Flexible
Static(C++, OCaml...)
Dynamic
(Python, Ruby, ...)
![Page 203: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/203.jpg)
Gradual Typingwith Annotationsand Type Inference
![Page 204: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/204.jpg)
•use v5;•sub f {• sqrt($_[0]**2 + $_[1]**2);•}•my $five = f( 3, 4 );
![Page 205: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/205.jpg)
•use v6-alpha;•sub f {• sqrt(@_[0]**2 + @_[1]**2);•}•my $five = f( 3, 4 );
![Page 206: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/206.jpg)
•sub f (Num $x, Num $y) {• sqrt($x**2 + $y**2);•}•my Num $five = f( 3, 4 );
![Page 207: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/207.jpg)
![Page 208: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/208.jpg)
• subset Positive of Num where { $_ > 0 }
![Page 209: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/209.jpg)
• subset Positive of Num where { $_ > 0 }
• sub f ( Positive $x, Positive $y --> Positive where { $_ > ($x & $y) }) {
![Page 210: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/210.jpg)
• subset Positive of Num where { $_ > 0 }
• sub f ( Positive $x, Positive $y --> Positive where { $_ > ($x & $y) }) {
• sqrt($x ** 2 + $y ** 2);}
![Page 211: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/211.jpg)
• subset Positive of Num where { $_ > 0 }
• sub f ( Positive $x, Positive $y --> Positive where { $_ > ($x & $y) }) {
• sqrt($x ** 2 + $y ** 2);}
•my $five := f(3, 4); # inferred as Positive
![Page 212: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/212.jpg)
Domain Specific vs
General Purpose
![Page 213: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/213.jpg)
DSL(SQL, Regex, ...)
![Page 214: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/214.jpg)
☯ Concise
DSL(SQL, Regex, ...)
![Page 215: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/215.jpg)
☯ Concise
☯ Expressive
DSL(SQL, Regex, ...)
![Page 216: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/216.jpg)
☯ Concise
☯ Expressive
DSL(SQL, Regex, ...)
GPL
(Lisp, C, ...)
![Page 217: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/217.jpg)
☯ Concise
☯ Expressive
☯ Versatile
DSL(SQL, Regex, ...)
GPL
(Lisp, C, ...)
![Page 218: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/218.jpg)
☯ Concise
☯ Expressive
☯ Versatile
☯ Reusable
DSL(SQL, Regex, ...)
GPL
(Lisp, C, ...)
![Page 219: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/219.jpg)
Extensible Compilation
![Page 220: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/220.jpg)
Macros
![Page 221: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/221.jpg)
Macros
☯ Compile-time evaluation
![Page 222: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/222.jpg)
Macros
☯ Compile-time evaluation
☯ All parts are swappable
![Page 223: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/223.jpg)
Macros
☯ Compile-time evaluation
☯ All parts are swappable
☯ Even the lexer!
![Page 224: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/224.jpg)
• macro circumfix:</* */> ($x)• is parsed /.*?/• { '' }• • /* This is a C-style comment */
•
![Page 225: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/225.jpg)
• sub postfix:<!> ($x) {• [*] 1..$x• }• • say 10!; # 3628800
![Page 226: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/226.jpg)
• macro GREETING () {• # A late-bound macro• q:code(:COMPILING){ "Hello, $s" };• }
• my $s = "world";• say GREETING; # Hello, world
![Page 227: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/227.jpg)
Lazy Evaluationvs
Eager Evaluation
![Page 228: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/228.jpg)
Lazy(Haskell, Unix pipes)
![Page 229: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/229.jpg)
☯Modular
Lazy(Haskell, Unix pipes)
![Page 230: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/230.jpg)
☯Modular
☯ Reasonable
Lazy(Haskell, Unix pipes)
![Page 231: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/231.jpg)
☯Modular
☯ Reasonable
Lazy(Haskell, Unix pipes)
Eager
(everybody else)
![Page 232: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/232.jpg)
☯Modular
☯ Reasonable
☯ Direct
Lazy(Haskell, Unix pipes)
Eager
(everybody else)
![Page 233: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/233.jpg)
☯Modular
☯ Reasonable
☯ Direct
☯ Predictable
Lazy(Haskell, Unix pipes)
Eager
(everybody else)
![Page 234: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/234.jpg)
Return-type Polymorphism with Laziness Annotations
![Page 235: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/235.jpg)
![Page 236: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/236.jpg)
• # "cat"for =<> { .say }
![Page 237: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/237.jpg)
• # "cat"for =<> { .say }
• # "cat", together with line numbersfor each(1..*; =<>) { say "Line $^num: $^text";}
![Page 238: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/238.jpg)
![Page 239: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/239.jpg)
• # Lists are lazy by default
![Page 240: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/240.jpg)
• # Lists are lazy by default• my @fib := (
![Page 241: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/241.jpg)
• # Lists are lazy by default• my @fib := (• 0, 1,
![Page 242: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/242.jpg)
• # Lists are lazy by default• my @fib := (• 0, 1,• each(@fib; @fib[1..*]).map(&infix:<+>)
);
![Page 243: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/243.jpg)
• # Lists are lazy by default• my @fib := (• 0, 1,• each(@fib; @fib[1..*]).map(&infix:<+>)
);•
say "The first ten numbers are: @fib[^10]";
![Page 244: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/244.jpg)
![Page 245: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/245.jpg)
• # Items are eager values. However...
![Page 246: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/246.jpg)
• # Items are eager values. However...• my $ignored = lazy { 10 ** (10 * 10) };
![Page 247: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/247.jpg)
• # Items are eager values. However...• my $ignored = lazy { 10 ** (10 * 10) };• my $unused = lazy { say 1..$ignored };
![Page 248: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/248.jpg)
• # Items are eager values. However...• my $ignored = lazy { 10 ** (10 * 10) };• my $unused = lazy { say 1..$ignored };
• say "Hello, world!";
![Page 249: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/249.jpg)
Classesvs
Prototypes
![Page 250: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/250.jpg)
Classes(Java, Smalltalk, ...)
![Page 251: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/251.jpg)
☯ Typeful
Classes(Java, Smalltalk, ...)
![Page 252: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/252.jpg)
☯ Typeful
☯ Disciplined
Classes(Java, Smalltalk, ...)
![Page 253: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/253.jpg)
☯ Typeful
☯ Disciplined
Classes(Java, Smalltalk, ...)
Prototypes
(JavaScript, Lua, ...)
![Page 254: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/254.jpg)
☯ Typeful
☯ Disciplined
☯ Adaptive
Classes(Java, Smalltalk, ...)
Prototypes
(JavaScript, Lua, ...)
![Page 255: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/255.jpg)
☯ Typeful
☯ Disciplined
☯ Adaptive
☯ Convenient
Classes(Java, Smalltalk, ...)
Prototypes
(JavaScript, Lua, ...)
![Page 256: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/256.jpg)
Meta-ObjectProtocol
![Page 257: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/257.jpg)
![Page 258: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/258.jpg)
• class Dog is Mammal does Companion {
![Page 259: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/259.jpg)
• class Dog is Mammal does Companion {•
my $.count where 0..100;
![Page 260: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/260.jpg)
• class Dog is Mammal does Companion {•
my $.count where 0..100;•
has $!brain;
![Page 261: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/261.jpg)
• class Dog is Mammal does Companion {•
my $.count where 0..100;•
has $!brain;
• has &.vocalize = &say; has $.name is rw = "Fido";
![Page 262: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/262.jpg)
• class Dog is Mammal does Companion {•
my $.count where 0..100;•
has $!brain;
• has &.vocalize = &say; has $.name is rw = "Fido";
• has $.fur handles Groomable; has $.tail handles <wag hang>;
![Page 263: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/263.jpg)
• class Dog is Mammal does Companion {•
my $.count where 0..100;•
has $!brain;
• has &.vocalize = &say; has $.name is rw = "Fido";
• has $.fur handles Groomable; has $.tail handles <wag hang>;
• method companion handles s/^owner_// { ... }}
![Page 264: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/264.jpg)
![Page 265: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/265.jpg)
• my Dog $fido .= new;
![Page 266: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/266.jpg)
• my Dog $fido .= new;•
$fido.HOW; # the meta object for Dog
![Page 267: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/267.jpg)
• my Dog $fido .= new;•
$fido.HOW; # the meta object for Dog• $fido.WHAT; # the Dog prototype object
![Page 268: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/268.jpg)
• my Dog $fido .= new;•
$fido.HOW; # the meta object for Dog• $fido.WHAT; # the Dog prototype object• $fido.WHICH; # $fido’s Object ID
![Page 269: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/269.jpg)
• my Dog $fido .= new;•
$fido.HOW; # the meta object for Dog• $fido.WHAT; # the Dog prototype object• $fido.WHICH; # $fido’s Object ID
• Dog.isa(Dog); $fido.isa(Dog);
![Page 270: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/270.jpg)
![Page 271: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/271.jpg)
• $fido.HOW.add_method( 'bark', method () { $.vocalize('Woof!') });
![Page 272: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/272.jpg)
• $fido.HOW.add_method( 'bark', method () { $.vocalize('Woof!') });
• Dog.can('bark'); $fido.can('bark');
![Page 273: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/273.jpg)
Threadsvs
Processes
![Page 274: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/274.jpg)
Threads(Implicit sharing)
![Page 275: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/275.jpg)
☯ Intuitive
Threads(Implicit sharing)
![Page 276: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/276.jpg)
☯ Intuitive
☯ Parallelizable
Threads(Implicit sharing)
![Page 277: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/277.jpg)
☯ Intuitive
☯ Parallelizable
Threads(Implicit sharing)
Processes
(Explicit sharing)
![Page 278: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/278.jpg)
☯ Intuitive
☯ Parallelizable
☯ Deterministic
Threads(Implicit sharing)
Processes
(Explicit sharing)
![Page 279: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/279.jpg)
☯ Intuitive
☯ Parallelizable
☯ Deterministic
☯Manageable
Threads(Implicit sharing)
Processes
(Explicit sharing)
![Page 280: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/280.jpg)
Concurrency☺ ☺ ☺
![Page 281: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/281.jpg)
Locking☹ ☹ ☹
![Page 282: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/282.jpg)
![Page 283: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/283.jpg)
•async { $x.withdraw(3);
$y.deposit(3);}
![Page 284: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/284.jpg)
•async { $x.withdraw(3);
$y.deposit(3);}
☣ Race Condition ☣
![Page 285: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/285.jpg)
![Page 286: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/286.jpg)
• async { $x.lock; $y.lock;
![Page 287: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/287.jpg)
• async { $x.lock; $y.lock;
• $x.withdraw(3); $y.deposit(3);}
![Page 288: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/288.jpg)
• async { $x.lock; $y.lock;
• $x.withdraw(3); $y.deposit(3);}
• async { $y.lock; $x.lock;}
![Page 289: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/289.jpg)
• async { $x.lock; $y.lock;
• $x.withdraw(3); $y.deposit(3);}
• async { $y.lock; $x.lock;}
☣ Deadlock ☣
![Page 290: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/290.jpg)
SoftwareTransactional
Memory
![Page 291: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/291.jpg)
![Page 292: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/292.jpg)
•async {• contend { # begin transaction• $x.withdraw(3); $y.deposit(3);
• } # commit or rollback•}
![Page 293: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/293.jpg)
![Page 294: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/294.jpg)
• # Retry with "defer"method withdraw ($n) { defer if $.balance < $n; $.balance -= $n;}
![Page 295: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/295.jpg)
• # Retry with "defer"method withdraw ($n) { defer if $.balance < $n; $.balance -= $n;}
•# Choice with "maybe"sub transfer ($x1, $x2, $y) { maybe { $x1.withdraw(3) } maybe { $x2.withdraw(3) } $y.deposit(3);}
![Page 296: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/296.jpg)
• # Retry with "defer"method withdraw ($n) { defer if $.balance < $n; $.balance -= $n;}
•# Choice with "maybe"sub transfer ($x1, $x2, $y) { maybe { $x1.withdraw(3) } maybe { $x2.withdraw(3) } $y.deposit(3);}
•# Composable with nested "maybe"contend { maybe { transfer($x1, $x2, $y) } maybe { transfer($x3, $x4, $y) }}
![Page 297: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/297.jpg)
SIMDvs
MIMD
![Page 298: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/298.jpg)
SIMD(APL, Fortran)
![Page 299: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/299.jpg)
☯ Simple
SIMD(APL, Fortran)
![Page 300: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/300.jpg)
☯ Simple
☯ Scalable
SIMD(APL, Fortran)
![Page 301: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/301.jpg)
☯ Simple
☯ Scalable
SIMD(APL, Fortran)
MIMD
(everybody else)
![Page 302: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/302.jpg)
☯ Simple
☯ Scalable
☯ Richer types
SIMD(APL, Fortran)
MIMD
(everybody else)
![Page 303: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/303.jpg)
☯ Simple
☯ Scalable
☯ Richer types
☯ Familiar flow
SIMD(APL, Fortran)
MIMD
(everybody else)
![Page 304: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/304.jpg)
![Page 305: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/305.jpg)
• # Hyper Operator (SSE/GPU friendly)[1, 1, 2, 3, 5] »+« [1, 2, 3, 5, 8];
![Page 306: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/306.jpg)
• # Hyper Operator (SSE/GPU friendly)[1, 1, 2, 3, 5] »+« [1, 2, 3, 5, 8];
• # === [2, 3, 5, 8, 13]
![Page 307: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/307.jpg)
![Page 308: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/308.jpg)
•# Recursive Visits-« [[1, 2], 3];
![Page 309: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/309.jpg)
•# Recursive Visits-« [[1, 2], 3];
•# === [[-1, -2], -3]
![Page 310: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/310.jpg)
![Page 311: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/311.jpg)
•# Hyper Methods[1, 4, 9, 16]».sqrt;
![Page 312: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/312.jpg)
•# Hyper Methods[1, 4, 9, 16]».sqrt;
•# === [1, 2, 3, 4]
![Page 313: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/313.jpg)
![Page 314: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/314.jpg)
• % time pugs -e '(1..100000)>>.sqrt'real 9.387suser 9.219s
![Page 315: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/315.jpg)
• % time pugs -e '(1..100000)>>.sqrt'real 9.387suser 9.219s
•% time env GHCRTS=-N2 pugs -e '(1..100000)>>.sqrt'real 5.807suser 6.959s
![Page 316: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/316.jpg)
![Page 317: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/317.jpg)
• # Junctionssub is_prime (Int $n --> Bool) { $n % all(2 .. $n.sqrt+1);}
![Page 318: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/318.jpg)
• # Junctionssub is_prime (Int $n --> Bool) { $n % all(2 .. $n.sqrt+1);}
•sub has_twin_prime (Int $n --> Bool) { is_prime($n & ($n ± 2));}
![Page 319: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/319.jpg)
• # Junctionssub is_prime (Int $n --> Bool) { $n % all(2 .. $n.sqrt+1);}
•sub has_twin_prime (Int $n --> Bool) { is_prime($n & ($n ± 2));}
•sub infix:<±> ($x, $y) { ($x + $y) | ($x - $y);}
![Page 320: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/320.jpg)
• # Junctionssub is_prime (Int $n --> Bool) { $n % all(2 .. $n.sqrt+1);}
•sub has_twin_prime (Int $n --> Bool) { is_prime($n & ($n ± 2));}
•sub infix:<±> ($x, $y) { ($x + $y) | ($x - $y);}
•
![Page 321: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/321.jpg)
My Languagevs
Your Language
![Page 322: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/322.jpg)
Perl 6
![Page 323: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/323.jpg)
☯ Better
Perl 6
![Page 324: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/324.jpg)
☯ Better
☯ Better
Perl 6
![Page 325: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/325.jpg)
☯ Better
☯ Better
Perl 6 Others
![Page 326: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/326.jpg)
☯ Better
☯ Better
☯ Better
Perl 6 Others
![Page 327: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/327.jpg)
☯ Better
☯ Better
☯ Better
☯ Better
Perl 6 Others
![Page 328: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/328.jpg)
![Page 329: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/329.jpg)
•use jsan:DOM;•use perl5:DBI;•use haskell:Numeric;•use your_language:FavouriteModule;
![Page 330: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/330.jpg)
Pugs
JavaScript
Haskell Perl 5
YARV?JVM?
CLR? PyPy?
![Page 331: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/331.jpg)
✈
![Page 332: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/332.jpg)
When willPerl 6 be released?
![Page 333: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/333.jpg)
By Christmas!
![Page 334: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/334.jpg)
When Perl 6 arrives,every day will be like
Christmas!❆
![Page 335: Pugs: A Perl 6 Implementation](https://reader037.vdocuments.us/reader037/viewer/2022103016/554ab307b4c905e4668b553c/html5/thumbnails/335.jpg)
Thank you!
☺