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
December 20, 2020
Programming
0
380
自作言語にモジュールを実装した話
第33回 #hiro_it で発表したスライド
https://github.com/takoeight0821/kagami
Yuya Kono
December 20, 2020
Tweet
Share
More Decks by Yuya Kono
See All by Yuya Kono
自作プログラミング言語Malgoの紹介
takoeight0821
0
180
プログラミングの暗黙知
takoeight0821
0
79
git logで振り返る大学4年間
takoeight0821
1
170
量子コンピュータで乱数を生成した話
takoeight0821
1
250
自作言語コンパイラを作った話
takoeight0821
0
160
自作言語malgoのコンパイラをリファクタリングした話
takoeight0821
0
330
今日から始める自作コンパイラ ver 0.0.1
takoeight0821
0
1.1k
Language Server Protocolの話
takoeight0821
0
420
GraalVMで遊ぶ
takoeight0821
0
160
Other Decks in Programming
See All in Programming
エラーって何種類あるの?
kajitack
5
260
単体テストの始め方/作り方
toms74209200
0
510
2度もゼロから書き直して、やっとブラウザでぬるぬる動くAIに辿り着いた話
tomoino
0
160
Gleamという選択肢
comamoca
6
740
GraphRAGの仕組みまるわかり
tosuri13
7
440
DroidKnights 2025 - 다양한 스크롤 뷰에서의 영상 재생
gaeun5744
3
300
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
540
F#で自在につくる静的ブログサイト - 関数型まつり2025
pizzacat83
0
310
Cursor AI Agentと伴走する アプリケーションの高速リプレイス
daisuketakeda
1
120
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
220
Datadog RUM 本番導入までの道
shinter61
1
310
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
240
Featured
See All Featured
Docker and Python
trallard
44
3.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Scaling GitHub
holman
459
140k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
920
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Unsuck your backbone
ammeep
671
58k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
700
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Transcript
ࣗ࡞ݴޠʹϞδϡʔϧΛ ࣮ͨ͠ ʹΌʔΜʢ!UBLPFJHIUʣ
ࣗ࡞ݴޠ(SJ f module HelloImport = { import Prelude; main =
{ putStr (String# "hello"#); putStrLn |> { f -> f (String# " world"#) }; }; } ͍ͱ͜ΖΛ࡞ͬͨ
ݴޠ༷ͷઃܭ
จ๏ ϞδϡʔϧΛѻ͏จ๏ʹ͍͔ͭ͘ͷύλʔϯ͕͋Δ #include <stdio.h>ɹϓϦϓϩηοαϨϕϧͰѻ͏ package com.example.hello;ɹτοϓϨϕϧͷએݴͱͯ͠ѻ͏ import java.util.Calendar;ɹͱΓ͋͑ͣ͜ΕΛ࣮͢Δͷ͕ඪ structure
Alist = structɹʢಛผͳҙຯΛ࣋ͭʣͱͯ͠ѻ͏ open List end
จ๏ͷઃܭ w ࣮͕େมͳͷͰɺ࣍ͷػೳޙճ͠ w Ϟδϡʔϧʹผ໊Λ͚ͭΔ w ϞδϡʔϧΛ֊Խ͢Δ w ಛఆͷؔΛΤΫεϙʔτɾΠϯϙʔτ͢Δ͔ΛϓϩάϥϚ͕બͿ $ͷΑ͏ʹɺΠϯϙʔτͨ͠ϞδϡʔϧͰએݴ͞Εͨͯ͢ͷܕؔ
ΛࢀরͰ͖Δɻʢ໊લۭؒʹʮͿͪ·͚Δʯʣ
จ๏ʢϞδϡʔϧͷએݴʣ ϞδϡʔϧΛୈҰڃͷͱͯ͠ѻ͑ͨΒ৭ʑخ͍͕͠ɺ࣮͕େม ݟͨͬΆ͍͚ͲɺΩπ੍͍Λઃ͚Δ͜ͱʹ͢Δ module <Ϟδϡʔϧ໊> = {
<֤छએݴ>; } Λ̍ϑΝΠϧʹ͖͚ͭ̍ͭͩॻ͚Δ
จ๏ʢϞδϡʔϧͷར༻ʣ import Prelude; Prelude.grfͷதΛͯ͢ಡΈࠐΉ import Prelude as P; import
Prelude.Int; Ͱ͖ͳ͍
(SJ f f ͷϞδϡʔϧͷจ๏ module Hello = { -- ϞδϡʔϧHelloͷએݴ
import Prelude; -- ϞδϡʔϧPreludeͷΠϯϙʔτ main = { putStr (String# "hello"#); putStrLn |> { f -> f (String# " world"#) }; }; }
ॲཧܥͷ࣮
࣮ͷํ w Ϟδϡʔϧͷ࣮ʹେ͖͘Θ͚ͯ̎ͭͷύλʔϯ͕͋Δ ιʔείʔυΛ̍ͭʹͭͳ͛Δ ࣮؆୯͕ͩɺιʔείʔυͷαΠζ͕രൃ͔͠Ͷͳ͍ ϦϯΫ࣌·Ͱ֤ϞδϡʔϧΛόϥόϥʹѻ͏
࣮େม͕ͩɺׂίϯύΠϧͰ͖ͯੑೳతʹ༗ར w ࠓճΛ࣮ʢ$ίϯύΠϥΛ࡞ͬͨͱ͖ʹͬͨͷͰʣ
࣮ͷ࡞ઓʢ̍ʣ w Λ؆୯ʹ͢ΔͨΊɺ࣍ͷΑ͏ͳιʔείʔυΛߟ͑Δ NPEVMF$IJME\ JNQPSU1BSFOU ^
$IJME͕1BSFOUΛΠϯϙʔτ͍ͯ͠Δ
࣮ͷ࡞ઓʢ̎ʣ w $IJMEΛίϯύΠϧ͢ΔͨΊʹɺ1BSFOUʹؔ͢ΔҎԼͷใ͕ඞཁ w ܕએݴͷҰཡ w ؔͷܕͷҰཡ w ιʔείʔυ্ͷ໊ؔͱɺ໊લղܾޙͷ໊ؔͷରԠද w
(SJ f f Ͱͷ໊ؔͱɺ--7.*3Ͱͷ໊ؔʢΞηϯϒϥͷϥϕϧ໊ʣͷରԠද w தஔԋࢉࢠͷ݁߹ॱҐͷҰཡ
࣮ͷ࡞ઓʢ̏ʣ w ຖճ1BSFOUͷιʔείʔυΛಡΈऔΔͱඇޮ 1BSFOUͷίϯύΠϧ࣌ʹɺඞཁͳใ͚ͩϝϞ͓ͯ͘͠ w ϝϞ1BSFOUHS f i ʹอଘɻ$ͷϔομϑΝΠϧͷΑ͏ͳΠϝʔδ
ʢਓ͕ؒಡΉඞཁͳ͍ͷͰదʹΤϯίʔυͯ͠อଘ͢Δʣ
ίϯύΠϧͷྲྀΕ 1BSFOUHSGͷίϯύΠϧ 1BSFOUPɺ1BSFOUHS f i ͷੜ $IJMEHSGͷίϯύΠϧ
1BSFOUHS f i ͷಡΈࠐΈ $IJMEPɺ$IJMEHS f i Oͷੜ 1BSFOUPͱ$IJMEPͷϦϯΫ
·ͱΊ w ࣗ࡞ݴޠ(SJ f f ʹϞδϡʔϧΛ࣮ͨ͠ w ͍͔ͭ͘ͷ%FTJHODIPJDF͕͋ͬͨ w จ๏ɺػೳɺ࣮ํ๏
50%0ɿϞδϡʔϧͷґଘؔΛࣗಈͰղܾ͢ΔϏϧυγεςϜ ɹɹɹɹΑΓߴػೳͳϞδϡʔϧͷ࣮ݱ ɹɹɹɹඪ४ϥΠϒϥϦͷඋ
༨ஊ HS f i ϑΝΠϧͷੜʹ)BTLFMMͷγϦΞϥΠζϥΠϒϥϦTFSJBMJ[FΛͬ ͨɻੜ͞ΕͨϑΝΠϧΛݟͯΈΔͱͨΒ͕ଟ͍ɻ Ͳ͏ͯͩ͠Ζ͏ͱߟ͑ͯΈΔͱɺ)BTLFMMͷ$IBSʢจࣈܕʣ6OJDPEF DPEFQPJOUΛද͍ͯ͠ΔɻTFSJBMJ[F͜ΕΛ65'-&ͰΤϯίʔυ͢Δͷ Ͱ͕ଟ͘ͳΔͬΆ͍ɻ