Slide 1

Slide 1 text

mzp RubyistͷͨΊͷ ܕೖ໳

Slide 2

Slide 2 text

ࣗݾ঺հ • Twitter/Github: mzp • ໊ݹ԰͔Βདྷ·ͨ͠ • ͓࢓ࣄͰ͸RailsΛॻ͍͍ͯ·͢ • OCamlͱ͔ͷܕͷڧ͍ݴޠ͕޷͖Ͱ͢

Slide 3

Slide 3 text

એ఻ Ϋϥ΢υ੥ٻ؅ཧαʔϏεMisoca ʮࣄۀऀؒͷऔҾΛ࠷దԽ͢Δʯ

Slide 4

Slide 4 text

໊ݹ԰Rubyձٞ02

Slide 5

Slide 5 text

Rubyͱͷग़ձ͍ • େֶ1೥ͷͱ͖ʹ࢖͍͸ ͡Ίͨɻ • ΋͏10೥ͨͬͯΔ… • ઌഐʹPerlΛקΊΒΕͨ ͷ͕͖͔͚ͬ ↓͜ΕಡΜͩ

Slide 6

Slide 6 text

LLશ੝ظ • ౰࣌͸LL(Lightweight Language)ͱͯ͠ɺ·ͱΊͯޠ ΒΕ͍ͯͨɻ • Pݴޠ(Perl, Python, PHP, Ruby)Έ͍ͨͳݴ༿΋͋ͬͨ http://magazine.rubyist.net/?0016-LLRingReport ※ݸਓͷײ૝Ͱ͢

Slide 7

Slide 7 text

੩తܕ෇͖ݴޠͱͷൺֱ • Java/C++ͱ͍ͬͨ੩తܕ෇͖ݴޠͱൺֱ͞Εͯͨ • Ұ෦ͷਓ͸disͬͯͨ • ࢓ࣄͰ͸JavaɺझຯͰLLɺΈ͍ͨͳਓ͕ଟ͔ͬͨ ※ݸਓͷײ૝Ͱ͢

Slide 8

Slide 8 text

ͦΕ͔Β10೥… • LLͰ࢓ࣄ͢Δͷ͸௝͍͠࿩Ͱ͸ͳ͘ͳͬͨ • Scala, Swift, F#, Go, TypeScript ͳͲ৽͍͠੩తܕ෇ ͖ݴޠ΋ొ৔͍ͯ͠Δ • ੩తܕ෇͖ݴޠ͕ͳͥ໓ͼͳ͔ͬͨͷ͔ɻ • ౰࣌ͷඇ೉͕ؒҧͬͯͨ? • μϝͳ෦෼͕վળ͞Εͨ?

Slide 9

Slide 9 text

౰࣌ͷ੩తܕ෇͖ݴޠ

Slide 10

Slide 10 text

ର৅ͱͳͬͨݴޠ • C++03: C++ 0x(΋͘͠͸11)͸·ͩϦϦʔε͞Εͯ ͍·ͤΜ • Java1.4: Java5͕ϦϦʔε͞ΕΔ௚લɺ΋͘͠͸Ϧ Ϧʔε௚ޙͰ͢

Slide 11

Slide 11 text

↓1िؒલͷ༑ਓͷπΠʔτ

Slide 12

Slide 12 text

ඇ೉͞Εͨ఺ 1. ίϯύΠϧʹ͕͔͔࣌ؒΔ 2. จ๏͕৑௕ 3. ܕ͕ځ۶ 4. ܕͷ͍ͤͰهड़ྔ͕૿͑Δ

Slide 13

Slide 13 text

ίϯύΠϧʹ͕͔͔࣌ؒΔ • ίϯύΠϧܕݴޠ: ίϯύΠϧ͕ऴΘΔ·Ͱಈ࡞Λ ֬ೝͰ͖ͳ͍ɻ • ΠϯλϓϦλܕݴޠ: ͙͢ʹ࣮ߦͯ͠ಈ࡞Λ֬ೝͰ ͖Δɻ

Slide 14

Slide 14 text

จ๏͕৑௕ class Main { public static void main(String args[]) { System.out.println("Hello, world!!"); } } puts “Hello, world!!” Java Ruby

Slide 15

Slide 15 text

ܕ͕ځ۶ (ͦͷ··Ͱ͸ॻ͚ͳ͍ɺ޻෉͕ඞཁ) x = [ 1, 2, “fizz”, [] ] ੩తܕ෇͖ݴޠ Ruby

Slide 16

Slide 16 text

ܕͷ͍ͤͰهड़ྔ͕૿͑Δ ArrayList xs = new ArrayList(); xs.add((Object)new Integer(1)); xs.add((Object)new Integer(2)); xs.add((Object)new Integer(3)); [1, 2, 3] Java Ruby

Slide 17

Slide 17 text

͜͜·Ͱͷ·ͱΊ • ੩తܕ෇͖ݴޠ͸ॏްͰ͋Δ • هड़ྔ΋ଟ͍͠ɺಈ͔͢·Ͱͷ΋େม → ͍ܰݴޠ(Lightweight Language)ͷ΄͏͕ศར!!

Slide 18

Slide 18 text

࠷ۙͷ੩తܕ෇͖ݴޠ

Slide 19

Slide 19 text

࠷ۙొ৔ͨ͠੩తܕ෇͖ݴޠ • Scala: JVM্Ͱಈ࡞͢Δݴޠɻ better Javaͱͯ͠࢖ͬ ͍ͯΔͱ͜Ζ΋ଟ͍ɻ • F#: .NET্Ͱಈ࡞͢Δؔ਺ܕݴޠɻOCamlʹେ͖ͳӨ ڹΛड͚͍ͯΔɻ • OCaml/Haskell: ؔ਺ܕݴޠɻ࠷ۙɺొ৔ͨ͠Θ͚Ͱ͸ ͳ͍͕ɺ࿩୊ʹͳΓ͕ͪɻ • ͦͷଞ: AltJSɺSwiftɺ….

Slide 20

Slide 20 text

Ͳ͏มΘ͔ͬͨ 1. ίϯύΠϧʹ͕͔͔࣌ؒΔ 2. จ๏͕৑௕ 3. ܕ͕ځ۶ 4. ܕͷ͍ͤͰهड़ྔ͕૿͑Δ

Slide 21

Slide 21 text

ίϯύΠϧʹ͕͔͔࣌ؒΔ • ʮίϯύΠϧ଎౓͕վળ͠·ͨ͠!!ʯͬͯݴ͓͏ͱ ͨ͠ΒɺScala͸ܹ஗ͩͬͨ… • ͨͿΜΈΜͳզຫͯ͠Δ

Slide 22

Slide 22 text

http://tototoshi.hatenablog.com/entry/20130614/1371221918

Slide 23

Slide 23 text

Q. Scala͸ͳͥ஗͍ͷ

Slide 24

Slide 24 text

จ๏͕৑௕ ϦονͳϦςϥϧ΍ܕਪ࿦͕ಋೖ͞Εɺ͍ͩͿ୹͘ ͳͬͨ let () = print_endline "Hello, world!!" OCaml object Main extends App { println("Hello, world") } Scala

Slide 25

Slide 25 text

ܕ͕ځ۶ɾܕͷ͍ͤͰهड़ྔ͕૿͑Δ • ౰࣌ͱࠓͰ͸ܕͷҐஔ෇͚͕ҟͳΔɻ • ౰࣌ͷܕ: ऑ͍ܕ෇͚ɻܕ҆શ͕อূ͞Εͳ͍ɻ • ࠓͷܕ: ڧ͍ܕ෇͚ɻܕ҆શ͕อূ͞ΕΔɻ • ܕ҆શ: ͜͜Ͱ͸ʮ࣮ߦ࣌ʹܕΤϥʔ͕ى͖ͳ͍ʯ ͘Β͍ͷҙຯɻ

Slide 26

Slide 26 text

ऑ͍ܕ෇͚ • ܕνΣοΫʹ௨ͬͯ΋ɺʮܕ҆શʯ͕อূ͞Εͳ͍ • Java/C++ʹ͸Ωϟετ͕͋ΔͷͰɺίϯύΠϧʹ ੒ޭͯ͠΋ܕʹΑΔΤϥʔ͕ى͖Δ͔΋͠Εͳ͍ Foo*p = (Foo*)0x42; p->f(); // ← ࢮ͵(ͨͿΜ)ɻ C++

Slide 27

Slide 27 text

ڧ͍ܕ෇͚ • ܕνΣοΫʹ௨Ε͹ɺʮܕ҆શʯ͕อূ͞ΕΔ • Ωϟετ౳ͷܕΛڧ੍తʹมߋ͢Δํ๏͸ͳ͍ • ୯७ʹΩϟετΛͳ͚ͨͩͩ͘͠ͱɺ੍໿͕ݫ͘͠ ͳΔ͚ͩͰخ͘͠ͳ͍ • → ܕʹؔ͢Δڧྗͳػೳ͕༻ҙ͞ΕΔ͜ͱ͕ଟ ͍

Slide 28

Slide 28 text

࠷ۙͷܕγεςϜ

Slide 29

Slide 29 text

ܕਪ࿦ • ܕΛ(͋Δఔ౓)ॻ͔ͳͯ͘΋OK • Ͳ͜·Ͱਪ࿦ͯ͘͠ΕΔ͔͸ݴޠʹΑͬͯҟͳΔ // xsͷܕ͸string listͱਪ࿦͞ΕΔ let xs = ["foo"; "bar"; "baz"] OCaml

Slide 30

Slide 30 text

Scalaͷܕਪ࿦ • ϝιουͷҾ਺ɺฦΓ஋͸ਪ࿦͠ͳ͍ • ม਺ఆٛͷܕ͸ਪ࿦͢Δ // ϝιουͷҾ਺ͱฦΓ஋ͷܕ͸ॻ͘(লུͰ͖ͳ͍) def f(x : Int, y : Int) : Int = { // ม਺ఆٛͷܕ͸লུͰ͖Δ val z = x + y z } Scala

Slide 31

Slide 31 text

OCamlͷܕਪ࿦ • ؔ਺ͷҾ਺ɺฦΓ஋΋ਪ࿦͢Δ (* ϝιουͷҾ਺ͱฦΓ஋ͷܕΛলུͰ͖Δ *) let f x y = (* ม਺ఆٛͷܕ΋লུͰ͖Δ *) let z = x + y in z OCaml

Slide 32

Slide 32 text

ܕ͕͍ܰ • ܕΛ࡞Δํ๏͕ଟ͍ • ϑΝΠϧΛ࡞ͬͯɺΫϥεΛఆٛͯ͠…ɺΈ͍ͨͳ ͜ͱΛ͠ͳͯ͘΋৽͍͠ܕΛ࡞ΕΔ • Ұ෦ͷਓ͸ʮܕ͕͍ܰʯͱදݱ͢Δ

Slide 33

Slide 33 text

௚ੵܕ • 2ͭҎ্ͷܕΛ૊ʹͨ͠ܕ def getPoint() : (Int, Int) = { (1, 2) } Scala def get_point [1, 2] # x࠲ඪͱy࠲ඪ end Ruby (Int, Int) Ͱɺ2ͭͷIntͷ஋ͷ ૊Λද͢ܕΛ࡞ΕΔ

Slide 34

Slide 34 text

௚࿨ܕ • ͓ޓ͍ʹ۠ผ͞ΕΔܕΛఆٛ͢Δ • C/Javaͷenumʹࣅ͍ͯΔ͕ύϥϝʔλΛ࣋ͯΔͷ ͰΑΓॊೈ (* τϥϯϓͷΧʔυΛఆٛ͢Δ *) type card = Number of int | J | Q | K OCaml

Slide 35

Slide 35 text

ύλʔϯϚον • ௚࿨ܕʹରͯ͠ͷ෼ذ͸ɺઐ༻ͷߏจ͕͋Δ • ໢ཏ͍ͯ͠Δ͜ͱΛίϯύΠϥ͕อূ͢Δ (* Χʔυͷ਺஋Λऔಘ͢Δؔ਺ *) let get_number x = match x with | Numebr n -> n | J -> 11 | Q -> 12 | K -> 13

Slide 36

Slide 36 text

΋ͬͱ͍͢͝ܕ • Ϩίʔυܕ: ௚ੵܕͷ1छɻ0൪໨ɺ1൪໨ͱ͍͏஋ ͷ͔ΘΓʹɺ໊લΛ༩͑ΕΔɻ • ߏ଄త෦෼ܕ: fͱ͍͏ϝιουͱgͱ͍͏ϝιου Λ͍࣋ͬͯΔܕɺͱ͍͏ͷ͕දݱͰ͖Δɻ(Ұ෦Ͱ ੩తduck typeͱݺ͹ΕΔ) • ܕ෇͖printf: printf "%s" ͸string͔͠ड͚ͱΒͳ ͍ɺͱ͍͏͜ͱ͕Ͱ͖Δ

Slide 37

Slide 37 text

ܕͰՄೳʹͳΔ͜ͱ • ܕͷදݱྗ্͕͍ͬͯΔͷͰઃܭҙਤΛදݱͰ͖Δ • ίϯύΠϧ͕ҰछͷςετʹͳΔ • ྫ: ը໘ʹग़ྗ͢Δจࣈྻ͸ඞͣαχλΠζ͞Ε ͯͳ͚Ε͹ͳΒ͍(ϑΝϯτϜλΠϓ; ༓ྶܕ) • υΩϡϝϯτͷҰछʹͳΔ • ݕࡧ΋Ͱ͖Δ: Hoogle, OCamlScope

Slide 38

Slide 38 text

Rubyͬͯܕ͸͔ͭͳ͍ͷ? • RubyʹܕΛ͚ͭΔ͜ͱΛ໨తͱͨ͠ϓϩδΣΫτ ͕͋Δ • ྫ: Diamondback Ruby http://www.cs.umd.edu/projects/PL/druby/ class String ##% "+" : (String) -> String def +(p0); end ##% insert : (Fixnum, String) -> String def insert(p0, p1); end ... end

Slide 39

Slide 39 text

·ͱΊ: Ͳ͕͍͍ͬͪͷ? • έʔεɾόΠɾέʔε • ܕ͸੍໿: Ͱ͖Δ͜ͱ͕ಘΔ͕ɺޡΓ΋ݮΒ͢ • ҆શੑΛॏࢹ͢ΔͳΒܕΛ࢖͏΂͖ͩ͠ɺߴ଎ʹ ࡞Γ͍ͨͳΒܕΛ࢖Θͳͯ͘΋͍͍ • ܕγεςϜʹ΋͍Ζ͍Ζ͋ΔͷͰɺঢ়گʹซͤͯબ ୒͠·͠ΐ͏