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
Koutarou Chikuba
June 08, 2014
Technology
7
11k
TypedCoffeeScriptって、あったらよくないですか
altjs武闘会
Koutarou Chikuba
June 08, 2014
Tweet
Share
More Decks by Koutarou Chikuba
See All by Koutarou Chikuba
CI/CD 改善の勘所
mizchi
0
130
極限環境で最終ビルドを絞るためのフロントエンド設計
mizchi
16
5.6k
Server Side JavaScript のためのバンドル最適化
mizchi
5
7.4k
V8 as a container on CDN Edge worker
mizchi
6
2.3k
Edge Side Frontend という新領域
mizchi
35
14k
バンドル最適化マニアクス at tfconf
mizchi
8
4.5k
「たかがJavaScript」のその先 #TECHPLAY
mizchi
47
20k
Deno Node 両刀
mizchi
7
2.5k
「フロントエンド領域」を再定義する
mizchi
50
37k
Other Decks in Technology
See All in Technology
VCC 2025 Write-up
bata_24
0
180
いま注目しているデータエンジニアリングの論点
ikkimiyazaki
0
590
組織観点からIAM Identity CenterとIAMの設計を考える
nrinetcom
PRO
1
170
[2025-09-30] Databricks Genie を利用した分析基盤とデータモデリングの IVRy の現在地
wxyzzz
0
470
OpenAI gpt-oss ファインチューニング入門
kmotohas
2
950
Azure Well-Architected Framework入門
tomokusaba
0
280
extension 現場で使えるXcodeショートカット一覧
ktombow
0
210
Azure SynapseからAzure Databricksへ 移行してわかった新時代のコスト問題!?
databricksjapan
0
140
生成AIとM5Stack / M5 Japan Tour 2025 Autumn 東京
you
PRO
0
210
M5製品で作るポン置きセルラー対応カメラ
sayacom
0
140
BirdCLEF+2025 Noir 5位解法紹介
myso
0
190
KMP の Swift export
kokihirokawa
0
330
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
54
3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Fireside Chat
paigeccino
40
3.7k
Building Applications with DynamoDB
mza
96
6.6k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
Balancing Empowerment & Direction
lara
4
680
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Build your cross-platform service in a week with App Engine
jlugia
232
18k
Done Done
chrislema
185
16k
Navigating Team Friction
lara
189
15k
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!͋ͳͨͷ ߩݙΛ͍ͬͯ·͢ʂ