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.1k
型システム入門以前
ひろしま学生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
83
git logで振り返る大学4年間
takoeight0821
1
180
自作言語にモジュールを実装した話
takoeight0821
0
400
量子コンピュータで乱数を生成した話
takoeight0821
1
260
自作言語コンパイラを作った話
takoeight0821
0
170
自作言語malgoのコンパイラをリファクタリングした話
takoeight0821
0
340
今日から始める自作コンパイラ ver 0.0.1
takoeight0821
0
1.1k
Language Server Protocolの話
takoeight0821
0
430
Other Decks in Programming
See All in Programming
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
0
480
Reading Rails 1.0 Source Code
okuramasafumi
0
250
Swift Updates - Learn Languages 2025
koher
2
510
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
3.4k
AI時代のUIはどこへ行く?
yusukebe
18
9.1k
2025 年のコーディングエージェントの現在地とエンジニアの仕事の変化について
azukiazusa1
24
12k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
420
Putting The Genie in the Bottle - A Crash Course on running LLMs on Android
iurysza
0
140
AI Agents: How Do They Work and How to Build Them @ Shift 2025
slobodan
0
110
Improving my own Ruby thereafter
sisshiki1969
1
160
複雑なドメインに挑む.pdf
yukisakai1225
5
1.2k
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
240
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
26
1.9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
How to Ace a Technical Interview
jacobian
279
23k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
A designer walks into a library…
pauljervisheath
207
24k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
530
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 ิɺగਖ਼͕͋Ε͓ئ͍͠·͢