Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
·ͱΊ: Ͳ͕͍͍ͬͪͷ? • έʔεɾόΠɾέʔε • ܕ੍: Ͱ͖Δ͜ͱ͕ಘΔ͕ɺޡΓݮΒ͢ • ҆શੑΛॏࢹ͢ΔͳΒܕΛ͏͖ͩ͠ɺߴʹ ࡞Γ͍ͨͳΒܕΛΘͳ͍͍ͯ͘ • ܕγεςϜʹ͍Ζ͍Ζ͋ΔͷͰɺঢ়گʹซͤͯબ ͠·͠ΐ͏