Slide 1

Slide 1 text

TypedCoffeeScriptͬͯɺ͋ͬͨΒΑ ͘ͳ͍Ͱ͔͢ @mizchi altjs෢ಆձ

Slide 2

Slide 2 text

About&me • @mizchi • ओʹϑϩϯτΤϯυΤϯδχΞ • AltJSϚχΞ • ࠷ۙ͸LLVM΍phaser.js(WebGLͷ2dήʔϜΤϯδϯ)ʹڵຯ

Slide 3

Slide 3 text

TypedCoffeeScript ͱ͸

Slide 4

Slide 4 text

ͳʹ͜Ε? • mizchi/TypedCoffeeScript • ʮܕ෇͖ʯCoffeeScript • CoffeeScriptͷεʔύʔηοτ(ݩͷcoffee͸શ෦௨͢) • CoffeeScriptͷจ๏.+.TypeScript෩Subtyping • ൵؍తܕਪ࿦(ޙड़) • ੩తղੳ

Slide 5

Slide 5 text

CoffeeScript:,એݴ n = 42 p = x: 1, y: 2

Slide 6

Slide 6 text

TypeCoffeeScript:.એݴ n :: Number = 42 struct Point x :: Int y :: Int p :: Point = x: 1, y: 2

Slide 7

Slide 7 text

TypedCoffeeScript͸ԿΛ͔ͨ͠ʁ • ܕΞϊςʔγϣϯͷղऍ • ߏ଄ମએݴ • ୅ೖ࣌ܕνΣοΫ • ΦϒδΣΫτϦςϥϧͷਪ࿦ • Int%&>%Numberͷμ΢ϯΩϟετ(Number%:>%Float%:>%Int)

Slide 8

Slide 8 text

CoffeeScript:,ؔ਺ {sqrt, pow} = Math distance = (from, to) -> sqrt pow(from.x - to.x, 2) + pow(from.y - to.y, 2) console.log distance {x: 0, y: 0}, {x: 3, y: 4} #=> 5

Slide 9

Slide 9 text

TypedCoffeeScript:/ؔ਺ sqrt :: Number * Number -> Float pow :: (Number, Number) -> Float {sqrt, pow} = Math distance :: Point * Point -> Float distance = (from, to) -> sqrt pow(from.x - to.x, 2) + pow(from.y - to.y, 2) console.log distance {x: 0, y: 0}, {x: 3, y: 4} #=> 5

Slide 10

Slide 10 text

TypedCoffeeScript:/ؔ਺ foo = Int -> Int -> Int foo = (m) -> (n) -> m * n n :: Int = foo(3)(2) ͜Μͳ͜ͱ΋

Slide 11

Slide 11 text

TypedCoffeeScript͸ԿΛ͔ͨ͠ʁ • લஔܕΞϊςʔγϣϯ • BinaryOperatorͷਪ࿦:.(+.Float.Float).4>.Float • ؔ਺ࣜͷܕνΣοΫ • ؔ਺ద༻ͷܕνΣοΫ • ະఆٛγϯϘϧͷAnyܕ΁ͷϑΥʔϧόοΫ(consoleະఆٛ)

Slide 12

Slide 12 text

Structual(Subtyping struct Point {x :: Int, y :: Int} p :: Point = {x: 1, y: 2, z: 3} n :: Int = p.z # type error p3d :: {x :: Int, y :: Int, z :: Int} = p # type error • ୅ೖઌ͕αϒΫϥεͰ͋Δ͜ͱΛཁٻ͢Δ • ܕΞϊςʔγϣϯ͕એݴ͞ΕͨγϯϘϧ(ม਺)͸Ҏ߱ͦͷΠϯλ ʔϑΣʔεͰৼΔ෣͏

Slide 13

Slide 13 text

൵؍తܕਪ࿦ • ͢΂ͯͷࣜ͸implicitଐੑͩͱԾఆ͢Δ • implicitଐੑಉ࢜Ͱܕਪ࿦ΛࢼΈࣦͯഊͨ͠৔߹͸" implicitଐੑͷAnyܕʹϑΥʔϧόοΫ͢Δ • Ϣʔβʔ͕ΞϊςʔγϣϯΛهड़ͨࣜ͠͸ඇimplicitଐੑ • ඇimplicitଐੑ͕ؔΘͬͯܕਪ࿦͕ࣦഊͨ͠৔߹ɺΤϥʔͱ ͳΔ

Slide 14

Slide 14 text

ͦͷଞͷػೳ • array • nullable • class͔ࣜΒͷߏ଄ମࣗಈநग़ • generics(wip) • TypeScript5importer(wip)

Slide 15

Slide 15 text

ͳͥ࡞͔ͬͨ • CoffeeScriptͰϥΠϒϥϦΛࢼͭͭ͠ϓϩτλΠϓΛ࡞Γ·͘Δ • ݎ࿚ͳઃܭΛ໨ࢦ͢ͱ΍͸Γܕ͕΄͘͠ͳΔ • TypeScriptͰॻ͖ͳ͓͢ͱܕఆٛΛॻ͍ͯҰ೔͕ऴΘΔ • CoffeeScriptͷତམͨ͠จ๏ͷ··Ͱɺܕ͕ͳ͍ঢ়ଶ͔Βɺஈ֊ తʹҠߦͰ͖ΔΑ͏ͳݴޠ͕΄͍͠ͳΝ…

Slide 16

Slide 16 text

ݱ࣮తͳधཁ • HTML5ΞϓϦέʔγϣϯͷڊେԽ • ͱ͘ʹγϯάϧϖʔδΞϓϦέʔγϣϯ(SPA)ͷधཁ • ֤͕ࣾେن໛CoffeeScriptͷϦιʔεΛ๊͑ͯΔͬΆ͍ • εʔύʔηοτͳίϯύΠϥஔ͖׵͑Ͱஈ֊తʹܕ؀ڥͷҠߦ

Slide 17

Slide 17 text

ओ؍ʹجͮ͘coffeeͱtypescriptͷൺֱ • CoffeeScriptͷϝϦοτ • ͔͍͍ͬ͜ • CoffeeScriptͷσϝϦοτ • ܕ͕ͳ͍ • TypeScriptͷϝϦοτ • ܕ͕͋Δ

Slide 18

Slide 18 text

CoffeeScript+++TypeScript Զ͕ߟ͑ͨ࠷ڧͷAltJS

Slide 19

Slide 19 text

࠷ۙͷਐḿ • CoffeeScriptReduxͷsuper࣮૷ • TypeScriptͷܕఆٛϑΝΠϧͷύʔαΛ࡞ͬͨ(mizchi/dts8 parser) • ↑ʹରԠ͢ΔͨΊʹ಺෦ASTΛ΄΅θϩ͔Βॻ͖௚ͨ͠

Slide 20

Slide 20 text

ݱࡏͷϓϩδΣΫτͷ՝୊ • झຯ࣌ؒͰ࡞Δʹ͸։ൃ͔͔࣌ؒΓ͗͢໰୊ • Ϋϥ΢υϑΝϯσΟϯάͰ͖ͳ͍͔ߟҊத • ύτϩϯืूதɻ๻ͷ౔೔ͷϞνϕʔγϣϯΛۚͰങ͍·ͤΜ ͔?#$>#اۀ༷ • ʮ΍Δؾʯ͕͋ͬͨΒSublimeText/VimͷΠϯςϦηϯε͙Β͍ ·Ͱ࡞ΕΔ͔΋Ͷ??? • ֎ਓ͔Β͍Ζ͍Ζཁ๬͕͘Δ

Slide 21

Slide 21 text

ྺ࢙ • ࡢ೥8݄:$jashkenas/coffeescript$ͷίʔυಡΈ࢝ΊΔ • ࡢ೥10݄:$ϩϯυϯग़ுதͷඈߦػͷதͰϓϩτλΠϓΛ࡞Δ • ࡢ೥12݄:$ܕਪ࿦ΛҰ௨Γ࡞Δ • ࠓ೥1~3݄:$ଔ࿦๩͗͢͠ϫϩλ • ࠓ೥5݄:$altjs෢ಆձͰcoffeeҎ֎ͷൃද͢Δʁ • ։ൃ࠶։͢Δ͔ʂ

Slide 22

Slide 22 text

ઃܭࢦ਑ • ܕΞϊςʔγϣϯߏจΛ௥Ճ • ੩తղੳ • ίϯύΠϥʹ͸ۃྗखΛೖΕͳ͍(Ϛʔδ͕ࠔ೉ʹͳΔͨΊ) • ίϯύΠϥͱ͸ผʹAST'TraverserΛॻ͘ • ϊʔυ͝ͱʹtypeAnnota2onΛղܾ͢Δܕਪ࿦ثΛ࡞Δ ઃܭํ਑:"ݎ࿚ͳઃܭ"<"طଘίʔυ͔ΒͷҠߦίετ࠷খԽ

Slide 23

Slide 23 text

ϚΠϧετʔϯ • v0.11 • return,,෼ׂ୅ೖ,,δΣωϦΫε,,super,ͷਪ࿦ • ΤϥʔϨϙʔτͷվળ • v0.12 • module • typealias • typescript,d.ts,importer

Slide 24

Slide 24 text

͓ΘΓ mizchi/TypedCoffeeScript!͸͋ͳͨͷ ߩݙΛ଴͍ͬͯ·͢ʂ