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
Yuya Kono
November 11, 2017
Programming
2
2.2k
型システム入門以前
ひろしま学生IT勉強会
https://connpass.com/event/70401/
で発表した資料です
Yuya Kono
November 11, 2017
Tweet
Share
More Decks by Yuya Kono
See All by Yuya Kono
自作プログラミング言語Malgoの紹介
takoeight0821
0
190
プログラミングの暗黙知
takoeight0821
0
87
git logで振り返る大学4年間
takoeight0821
1
190
自作言語にモジュールを実装した話
takoeight0821
0
410
量子コンピュータで乱数を生成した話
takoeight0821
1
270
自作言語コンパイラを作った話
takoeight0821
0
180
自作言語malgoのコンパイラをリファクタリングした話
takoeight0821
0
350
今日から始める自作コンパイラ ver 0.0.1
takoeight0821
0
1.1k
Language Server Protocolの話
takoeight0821
0
440
Other Decks in Programming
See All in Programming
[堅牢.py #1] テストを書かない研究者に送る、最初にテストを書く実験コード入門 / Let's start your ML project by writing tests
shunk031
11
6.1k
2025 컴포즈 마법사
jisungbin
0
150
Micro Frontendsで築いた 共通基盤と運用の試行錯誤 / Building a Shared Platform with Micro Frontends: Operational Learnings
kyntk
0
1.6k
アーキテクチャと考える迷子にならない開発者テスト
irof
9
3.3k
How Software Deployment tools have changed in the past 20 years
geshan
0
14k
目的で駆動する、AI時代のアーキテクチャ設計 / purpose-driven-architecture
minodriven
11
3.5k
Flutterアプリ運用の現場で役立った監視Tips 5選
ostk0069
1
520
Java_プロセスのメモリ監視の落とし穴_NMT_で見抜けない_glibc_キャッシュ問題_.pdf
ntt_dsol_java
0
230
Stay Hacker 〜九州で生まれ、Perlに出会い、コミュニティで育つ〜
pyama86
2
2.7k
Building AI with AI
inesmontani
PRO
1
260
Herb to ReActionView: A New Foundation for the View Layer @ San Francisco Ruby Conference 2025
marcoroth
0
200
Developing Specifications - Jakarta EE: a Real World Example
ivargrimstad
0
230
Featured
See All Featured
How to Ace a Technical Interview
jacobian
280
24k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Six Lessons from altMBA
skipperchong
29
4.1k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
The Language of Interfaces
destraynor
162
25k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Producing Creativity
orderedlist
PRO
348
40k
A Tale of Four Properties
chriscoyier
162
23k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
How STYLIGHT went responsive
nonsquared
100
5.9k
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 ิɺగਖ਼͕͋Ε͓ئ͍͠·͢