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
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
200
プログラミングの暗黙知
takoeight0821
0
92
git logで振り返る大学4年間
takoeight0821
1
190
自作言語にモジュールを実装した話
takoeight0821
0
420
量子コンピュータで乱数を生成した話
takoeight0821
1
280
自作言語コンパイラを作った話
takoeight0821
0
190
自作言語malgoのコンパイラをリファクタリングした話
takoeight0821
0
370
今日から始める自作コンパイラ ver 0.0.1
takoeight0821
0
1.1k
Language Server Protocolの話
takoeight0821
0
450
Other Decks in Programming
See All in Programming
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
580
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
450
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.7k
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
500
AIエージェントの設計で注意するべきポイント6選
har1101
7
3.3k
Oxlintはいいぞ
yug1224
5
1.2k
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.4k
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
180
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
590
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
260
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
220
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
430
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
82
From π to Pie charts
rasagy
0
120
What's in a price? How to price your products and services
michaelherold
247
13k
How to Ace a Technical Interview
jacobian
281
24k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
2.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
100k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
130
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2k
The Limits of Empathy - UXLibs8
cassininazir
1
210
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 ิɺగਖ਼͕͋Ε͓ئ͍͠·͢