Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TypedCoffeeScriptって、あったらよくないですか
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Koutarou Chikuba
June 08, 2014
Technology
11k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TypedCoffeeScriptって、あったらよくないですか
altjs武闘会
Koutarou Chikuba
June 08, 2014
More Decks by Koutarou Chikuba
See All by Koutarou Chikuba
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
8.1k
CI/CD 改善の勘所
mizchi
0
250
極限環境で最終ビルドを絞るためのフロントエンド設計
mizchi
16
6.2k
Server Side JavaScript のためのバンドル最適化
mizchi
5
8k
V8 as a container on CDN Edge worker
mizchi
6
2.6k
Edge Side Frontend という新領域
mizchi
35
14k
バンドル最適化マニアクス at tfconf
mizchi
8
4.7k
「たかがJavaScript」のその先 #TECHPLAY
mizchi
47
21k
Deno Node 両刀
mizchi
7
2.7k
Other Decks in Technology
See All in Technology
信頼性はSREだけのものじゃない
hkawaras
0
320
分割40%キーボードにスムーズに入門するには
hoto17296
1
180
Kiro5兄弟のいまどきのセキュリティ基礎知識
kentapapa
0
390
Kiro Crew で始める マルチエージェント開発
miu_crescent
PRO
0
200
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
360
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3.2k
「面白い!」を信じ抜け。激動の時代を貫く、オンリーワン・エンジニアの条件
kizawa2020
2
410
EMの役割で 変わったこと・変わらなかったこと
sansantech
PRO
1
190
The Django UUID Story - DjangoCon US 2026
pauloxnet
0
310
会計事務所と顧問先の契約関係をOIDC・OAuthで表現する
terara
0
500
紙 to デジタル
ichien178
0
380
Introduction to Bill One Development Engineer
sansan33
PRO
0
480
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Raft: Consensus for Rubyists
vanstee
141
7.7k
Code Reviewing Like a Champion
maltzj
528
40k
How to make the Groovebox
asonas
2
2.4k
Fireside Chat
paigeccino
42
4k
We Have a Design System, Now What?
morganepeng
55
8.3k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
220
[SF Ruby Conf 2025] Rails X
palkan
2
1.3k
Are puppies a ranking factor?
jonoalderson
2
3.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
970
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Statistics for Hackers
jakevdp
799
230k
Transcript
TypedCoffeeScriptͬͯɺ͋ͬͨΒΑ ͘ͳ͍Ͱ͔͢ @mizchi altjsಆձ
About&me • @mizchi • ओʹϑϩϯτΤϯυΤϯδχΞ • AltJSϚχΞ • ࠷ۙLLVMphaser.js(WebGLͷ2dήʔϜΤϯδϯ)ʹڵຯ
TypedCoffeeScript ͱ
ͳʹ͜Ε? • mizchi/TypedCoffeeScript • ʮܕ͖ʯCoffeeScript • CoffeeScriptͷεʔύʔηοτ(ݩͷcoffeeશ෦௨͢) • CoffeeScriptͷจ๏.+.TypeScript෩Subtyping •
൵؍తܕਪ(ޙड़) • ੩తղੳ
CoffeeScript:,એݴ n = 42 p = x: 1, y: 2
TypeCoffeeScript:.એݴ n :: Number = 42 struct Point x ::
Int y :: Int p :: Point = x: 1, y: 2
TypedCoffeeScriptԿΛ͔ͨ͠ʁ • ܕΞϊςʔγϣϯͷղऍ • ߏମએݴ • ೖ࣌ܕνΣοΫ • ΦϒδΣΫτϦςϥϧͷਪ •
Int%&>%NumberͷμϯΩϟετ(Number%:>%Float%:>%Int)
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
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
TypedCoffeeScript:/ؔ foo = Int -> Int -> Int foo =
(m) -> (n) -> m * n n :: Int = foo(3)(2) ͜Μͳ͜ͱ
TypedCoffeeScriptԿΛ͔ͨ͠ʁ • લஔܕΞϊςʔγϣϯ • BinaryOperatorͷਪ:.(+.Float.Float).4>.Float • ؔࣜͷܕνΣοΫ • ؔద༻ͷܕνΣοΫ •
ະఆٛγϯϘϧͷAnyܕͷϑΥʔϧόοΫ(consoleະఆٛ)
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 • ೖઌ͕αϒΫϥεͰ͋Δ͜ͱΛཁٻ͢Δ • ܕΞϊςʔγϣϯ͕એݴ͞ΕͨγϯϘϧ(ม)Ҏ߱ͦͷΠϯλ ʔϑΣʔεͰৼΔ͏
൵؍తܕਪ • ͯ͢ͷࣜimplicitଐੑͩͱԾఆ͢Δ • implicitଐੑಉ࢜ͰܕਪΛࢼΈࣦͯഊͨ͠߹" implicitଐੑͷAnyܕʹϑΥʔϧόοΫ͢Δ • Ϣʔβʔ͕ΞϊςʔγϣϯΛهड़ͨࣜ͠ඇimplicitଐੑ • ඇimplicitଐੑ͕ؔΘͬͯܕਪ͕ࣦഊͨ͠߹ɺΤϥʔͱ
ͳΔ
ͦͷଞͷػೳ • array • nullable • class͔ࣜΒͷߏମࣗಈநग़ • generics(wip) •
TypeScript5importer(wip)
ͳͥ࡞͔ͬͨ • CoffeeScriptͰϥΠϒϥϦΛࢼͭͭ͠ϓϩτλΠϓΛ࡞Γ·͘Δ • ݎ࿚ͳઃܭΛࢦ͢ͱΓܕ͕΄͘͠ͳΔ • TypeScriptͰॻ͖ͳ͓͢ͱܕఆٛΛॻ͍ͯҰ͕ऴΘΔ • CoffeeScriptͷତམͨ͠จ๏ͷ··Ͱɺܕ͕ͳ͍ঢ়ଶ͔Βɺஈ֊ తʹҠߦͰ͖ΔΑ͏ͳݴޠ͕΄͍͠ͳΝ…
ݱ࣮తͳधཁ • HTML5ΞϓϦέʔγϣϯͷڊେԽ • ͱ͘ʹγϯάϧϖʔδΞϓϦέʔγϣϯ(SPA)ͷधཁ • ֤͕ࣾେنCoffeeScriptͷϦιʔεΛ๊͑ͯΔͬΆ͍ • εʔύʔηοτͳίϯύΠϥஔ͖͑Ͱஈ֊తʹܕڥͷҠߦ
ओ؍ʹجͮ͘coffeeͱtypescriptͷൺֱ • CoffeeScriptͷϝϦοτ • ͔͍͍ͬ͜ • CoffeeScriptͷσϝϦοτ • ܕ͕ͳ͍ •
TypeScriptͷϝϦοτ • ܕ͕͋Δ
CoffeeScript+++TypeScript Զ͕ߟ͑ͨ࠷ڧͷAltJS
࠷ۙͷਐḿ • CoffeeScriptReduxͷsuper࣮ • TypeScriptͷܕఆٛϑΝΠϧͷύʔαΛ࡞ͬͨ(mizchi/dts8 parser) • ↑ʹରԠ͢ΔͨΊʹ෦ASTΛ΄΅θϩ͔Βॻ͖ͨ͠
ݱࡏͷϓϩδΣΫτͷ՝ • झຯ࣌ؒͰ࡞Δʹ։ൃ͔͔࣌ؒΓ͗͢ • ΫϥυϑΝϯσΟϯάͰ͖ͳ͍͔ߟҊத • ύτϩϯืूதɻͷͷϞνϕʔγϣϯΛۚͰങ͍·ͤΜ ͔?#$>#اۀ༷ • ʮΔؾʯ͕͋ͬͨΒSublimeText/VimͷΠϯςϦηϯε͙Β͍
·Ͱ࡞ΕΔ͔Ͷ??? • ֎ਓ͔Β͍Ζ͍Ζཁ͕͘Δ
ྺ࢙ • ࡢ8݄:$jashkenas/coffeescript$ͷίʔυಡΈ࢝ΊΔ • ࡢ10݄:$ϩϯυϯग़ுதͷඈߦػͷதͰϓϩτλΠϓΛ࡞Δ • ࡢ12݄:$ܕਪΛҰ௨Γ࡞Δ • ࠓ1~3݄:$ଔ͗͢͠ϫϩλ •
ࠓ5݄:$altjsಆձͰcoffeeҎ֎ͷൃද͢Δʁ • ։ൃ࠶։͢Δ͔ʂ
ઃܭࢦ • ܕΞϊςʔγϣϯߏจΛՃ • ੩తղੳ • ίϯύΠϥʹۃྗखΛೖΕͳ͍(Ϛʔδ͕ࠔʹͳΔͨΊ) • ίϯύΠϥͱผʹAST'TraverserΛॻ͘ •
ϊʔυ͝ͱʹtypeAnnota2onΛղܾ͢ΔܕਪثΛ࡞Δ ઃܭํ:"ݎ࿚ͳઃܭ"<"طଘίʔυ͔ΒͷҠߦίετ࠷খԽ
ϚΠϧετʔϯ • v0.11 • return,,ׂೖ,,δΣωϦΫε,,super,ͷਪ • ΤϥʔϨϙʔτͷվળ • v0.12 •
module • typealias • typescript,d.ts,importer
͓ΘΓ mizchi/TypedCoffeeScript!͋ͳͨͷ ߩݙΛ͍ͬͯ·͢ʂ