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
型システム入門以前
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yuya Kono
November 11, 2017
Programming
2.2k
2
Share
型システム入門以前
ひろしま学生IT勉強会
https://connpass.com/event/70401/
で発表した資料です
Yuya Kono
November 11, 2017
More Decks by Yuya Kono
See All by Yuya Kono
自作プログラミング言語Malgoの紹介
takoeight0821
0
230
プログラミングの暗黙知
takoeight0821
0
110
git logで振り返る大学4年間
takoeight0821
1
210
自作言語にモジュールを実装した話
takoeight0821
0
450
量子コンピュータで乱数を生成した話
takoeight0821
1
310
自作言語コンパイラを作った話
takoeight0821
0
220
自作言語malgoのコンパイラをリファクタリングした話
takoeight0821
0
390
今日から始める自作コンパイラ ver 0.0.1
takoeight0821
0
1.1k
Language Server Protocolの話
takoeight0821
0
470
Other Decks in Programming
See All in Programming
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
140
JavaDoc 再入門
nagise
0
220
Moments When Things Go Wrong
aurimas
3
130
さぁV100、メモリをお食べ・・・
nilpe
0
120
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.1k
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
500
Inside Stream API
skrb
1
450
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.3k
初めてのRubyKaigiはこう見えた
jellyfish700
0
370
新規プロダクトを高速で生み出すハーネスエンジニアリング
seanchas116
18
7.6k
AI駆動開発勉強会 広島支部 第一回勉強会 AI駆動開発概要とワークショップ
hayatoshimiu
0
420
OSもどきOS
arkw
0
360
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
240
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How to Think Like a Performance Engineer
csswizardry
28
2.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
200
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
The Invisible Side of Design
smashingmag
302
52k
Statistics for Hackers
jakevdp
799
230k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Transcript
ܕγεςϜೖҎલ ౡࢢཱେֶใՊֶ෦ Տ ༤
ͷલʹ ࣗݾհ
͜ͷεϥΠυͷඪ w ʮܕʁ͋ʔ͋Εඒຯ͍͠ΑͶʙʯͳͲͷ൵ܶͷࢭ w ಈతܕ͚ͱ੩తܕ͚ͷҧ͍͕ͳΜͱͳ͔͘Δ w ʮܕγεςϜೖʯʢ௨শ5B1-ʣΛಡΉؾ࣋ͪʹͳΔ
ඵͰ͔Δ ܕγεςϜ
ඵͰ͔Δܕγες Ϝ w ϓϩάϥϜ͕ਖ਼͍͔͠Ͳ͏͔ςετ͢ΔγεςϜͷͭ w ಈతܕ͚ˠ࣮ߦ࣌ʹςετ͢Δ w ੩తܕ͚ˠ࣮ߦલʹςετ͢Δ w ͜ͷςετͷ͜ͱΛܕݕࠪͱݺͿ
ಈతܕ͚
ಈతܕ͚ w 3VCZɺ1ZUIPOɺ&SMBOHͳͲ w ࣮ࡍʹ࣮ߦͯ͠ΈͯɺμϝͩͬͨΒܕΤϥʔɺ ͏·͍ͬͨ͘Β࣍͏·͍͘͘ͱ͍͍Ͱ͢Ͷ w ܕΤϥʔΛॲཧ͢ΔͷϓϩάϥϚͷ w ྫ֎ॲཧΛॻ͍͓ͯ͘ɺಈతʹॲཧΛՃ͢ΔͳͲ
w ࣮ߦՄೳͳΒͲΜͳϓϩάϥϜͰܕݕࠪΛύε͢Δ
੩తܕ͚
੩తܕ͚ w $ɺ+BWBɺ4DBMBͳͲ w ϓϩάϥϜΛᢞΊͯɺܕ͕߹͍ͬͯΕจ۟ͳ͠ɺ ߹͍ͬͯͳ͚Εڭ͑ͯ͘ΕΔ w ܕݕࠪΛύεͨ͠ϓϩάϥϜɺগͳ͘ͱܕΤϥʔͰ ࢮ͵͜ͱͳ͍ʢͣʣ w
࣮ߦՄೳͰܕݕࠪΛύε͠ͳ͍͜ͱ͕͋Δ w ྫ JGUSVFUIFOFMTFBOTXFS
εςοϓ࣮ߦͰൺֱ
ࢼ͢ͷ͜Ε int f(int a, int b) { return a +
b; } f(19 + "23")を実⾏する この式は型エラーを起こす
ಈతܕݕࠪ f(19, "23") ੩తܕݕࠪ ࣮ࡍʹࢼͯ͠ΈΔ int f(int a, int b)
{ return a + b; } ؔఆٛΛܕݕࠪ͢Δ
ಈతܕݕࠪ ੩తܕݕࠪ 19 + "23" a :: int b ::
int f :: int * int → int ͦͷ·· Λ࣮ߦͯ͠ΈΔ ؔఆ͔ٛΒɺมͱܕͷࣙॻΛ࡞Δ
ಈతܕݕࠪ ੩తܕݕࠪ 19 + "23" ͱจࣈྻͤͳ͍ ͱΤϥʔΛు͘ ಉ࢜͠ࢉͰ͖Δ ؔఆٛܕݕࠪΛύε return
a + b;
ಈతܕݕࠪ ੩తܕݕࠪ 19 + "23" Τϥʔॲཧ͕ແ͘ɺ ϓϩάϥϚ͍ͳ͍ɻ ϓϩάϥϜͦͷ··ࢮΜͩɻ ࠷ѱͷࣄଶ int
a = 19 int b = "23" f(19, "23")
ಈతܕݕࠪ ੩తܕݕࠪ 19 + "23" Ͳ͏ͯ͜͠͏ͳͬͨ ऀ୭ͩ int a =
19 int b = "23" G ਖ਼͍ࣜ͠Ͱͳ͍ ίϯύΠϧΤϥʔ f(19, "23")
৭ʑͳܕγεςϜͷ հ
ύϥϝʔλଟ૬ w +BWBʢδΣωϦΫεʣɺ$ ʢςϯϓϨʔτʣɺ 0$BNMʢMFUଟ૬ʣɺ4ZTUFN'ʢཧతഎܠɻЕܭࢉ 㱼ʣͳͲ w શশܕ 㱼 Λಋೖ
w ৭ʑͳܕͷʹద༻Ͱ͖ΔؔΛఆٛ
ύϥϝʔλଟ૬ ∀a id(a x) { return x; } id(-1) ==
-1 id(3.14) == 3.14 id("hello") == "hello" id(12) + "32"のような式は 型エラーになる
ΞυϗοΫଟ૬ w +BWBʢΠϯλʔϑΣʔεʣɺ$ ʢΦʔόʔϩʔυʣɺ )BTLFMMʢܕΫϥεʣɺ3VTUʢτϨΠτʣͳͲ w ܕ͝ͱʹҟͳΔৼΔ͍Λ͢ΔؔΛఆٛ w จࣈྻʹͰ͖ΔܕɺൺֱͰ͖ΔܕͳͲͷ੍͕ॻ͚ Δ
ΞυϗοΫଟ૬ string show(int x) { int2str(x); } string show(int xs[])
{ concat(map(int2str, xs)); } void println(Show x) { printf("%s¥n", show(x)); }
ܕਪ w +BWB ɺ$ BVUP EFDMUZQF ɺ0$BNMɺ)BTLFMMͳͲ w มͷΘΕํͳͲΛௐɺࣗಈͰܕΛ͖͡ग़͢
w ܕΛॻ͘ख͕ؒݮΔ w ڧྗͳͷʹͳΔͱɺ·ͬͨ͘ܕΛࢦఆ͠ͳͯ͘ ͯ͢੩తʹܕΛ͖͡ग़ͤΔʢ0$BNMɺ)BTLFMMͳͲʣ w ܕγεςϜ͕ڧྗʹͳΔͱΘΓͱ͙͢ʹͭΒ͘ͳΔ
ܕਪ c_area(r) { return r * r * 3.14; }
上の宣⾔はコンパイル時に下の宣⾔に変換される double c_area(double r) { return r * r * 3.14; }
෦ܕଟ૬ w ͍ΘΏΔΦϒδΣΫτࢦݴޠɺ4.-ͳͲ w \B C^㱨\BJOU^ w +BWBͳͲͰ͜ͷؔΛ໌ه͢Δඞཁ͕͋Δʢܧঝʣ w ܕਪ͕ΘΓͱͭΒ͍
w 4.-Ͱ͜ͷؔΛਪͰ͖ΔɻεΰΠ
ܕԋࢉ w +BWBʢδΣωϦΫεʣɺ0$BNMɺ)BTLFMMͳͲ w -JTU*OU&JUIFS*OU4USJOHͳͲɺܕΛड͚औͬͯܕΛฦ ͢ܕίϯετϥΫλΛಋೖ w ܕίϯετϥΫλΛݕࠪ͢ΔͨΊܕͷܕͰ͋ΔΧΠϯυ Λಋೖ w
4ZTUFN'ʢύϥϝʔλଟ૬ʣͱΈ߹ΘͤΔͱ 4ZTUFN'ТʹͳΔɻδΣωϦΫεͱ͔͜Εϕʔε
ґଘܕ w $PRɺ*ESJTͳͲ w ܕίϯετϥΫλΛΛड͚औΕΔΑ͏ʹ֦ு͠ɺ ʹґଘ͢ΔܕΛಋೖ w DPOT㱼B O/BU
B7FDUPSBO7FDUPSB O Έ͍ͨͳࣄ͕Ͱ͖ Δ w 4ZTUFN'Тʹಋೖ͢Δͱ$BMDVMVTPG$POTUSVDUJPOTͱݺΕΔମܥʹͳ Δ w $PR$P$͕ϕʔεɻܕΛ໋ɺ࣮Λূ໌ͱղऍ͢Δ w ܕݕ͕ܾࠪఆՄೳੑΛؚΜͰ͍ΔͷͰɺखͰܕݕࠪΛαϙʔτ͢Δ ඞཁ͕͋Δ
%JBMZ[FS w &SMBOHͷ੩తιʔείʔυղੳπʔϧ w ௨ৗͷ੩తܕ͚ΑΓָ؍తʹܕਪɺܕݕࠪΛ͢Δ͜ ͱͰɺಈతܕ͚ͷݴޠʹޙͰ੩తܕݕࠪΛࡌ͍ͤͯ Δ w 3VCZɺ1ZUIPOͳͲɺ͍ۙ͏ͪʹ͜ͷྲྀΕʹΔͷͰ ɺͱݴΘΕ͍ͯΔʢ.BU[͕ݴͬͯͨɺΒ͍͠ʣ
w -JTQք۾Ͱੲ͔Βɺओʹ࠷దԽʹؔ͢ΔཁٻͷͨΊʹ ݚڀ͞Ε͖ͯͨ
·ͱΊ
·ͱΊ w ܕγεςϜˠϓϩάϥϜͷਖ਼͠͞Λςετ͢ΔγεςϜͷҰछ w ಈతܕ͚ˠ࣮ߦ࣌ʹςετɺϩʔίετϩʔϦλʔϯ w ੩తܕ͚ˠ࣮ߦલʹςετɺϋΠίετϋΠϦλʔϯ w ࠓճ੩తܕ͚دΓͰͨ͠ɻಈతܕ͚ͷརɺྫ͑ IUUQCMPHQSBDUJDBMTDIFNFOFUTIJSPEZOBNJDUZQJOH
͕Α͘ߟ͞Ε͍ͯ·͢ w ʮܕγεςϜೖʯ 5B1- ɺ͍͍ຊͰ͢ w ิɺగਖ਼͕͋Ε͓ئ͍͠·͢