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
200
プログラミングの暗黙知
takoeight0821
0
90
git logで振り返る大学4年間
takoeight0821
1
190
自作言語にモジュールを実装した話
takoeight0821
0
420
量子コンピュータで乱数を生成した話
takoeight0821
1
280
自作言語コンパイラを作った話
takoeight0821
0
180
自作言語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
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
150
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
450
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
4.1k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
5
1.5k
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
150
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
GISエンジニアから見たLINKSデータ
nokonoko1203
0
190
Java 25, Nuevas características
czelabueno
0
130
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
200
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
290
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
8
3.5k
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
340
Featured
See All Featured
Claude Code のすすめ
schroneko
67
210k
A Soul's Torment
seathinner
1
2.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Ruling the World: When Life Gets Gamed
codingconduct
0
120
Technical Leadership for Architectural Decision Making
baasie
0
200
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
97
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
34
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
100
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 ิɺగਖ਼͕͋Ε͓ئ͍͠·͢