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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yuya Kono
December 20, 2020
Programming
440
0
Share
自作言語にモジュールを実装した話
第33回 #hiro_it で発表したスライド
https://github.com/takoeight0821/kagami
Yuya Kono
December 20, 2020
More Decks by Yuya Kono
See All by Yuya Kono
自作プログラミング言語Malgoの紹介
takoeight0821
0
220
プログラミングの暗黙知
takoeight0821
0
110
git logで振り返る大学4年間
takoeight0821
1
210
量子コンピュータで乱数を生成した話
takoeight0821
1
300
自作言語コンパイラを作った話
takoeight0821
0
210
自作言語malgoのコンパイラをリファクタリングした話
takoeight0821
0
390
今日から始める自作コンパイラ ver 0.0.1
takoeight0821
0
1.1k
Language Server Protocolの話
takoeight0821
0
460
GraalVMで遊ぶ
takoeight0821
0
200
Other Decks in Programming
See All in Programming
AIを導入する前にやるべきこと
negima
2
340
【26新卒研修資料】TDD実装演習
dip_tech
PRO
0
180
過去のレビュー知見をSkillsで資産化した話
pkshadeck
PRO
1
1.8k
Building on Bluesky's AT Protocol with Ruby
mackuba
0
110
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
250
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
310
Spec Driven Development | AI Summit Vilnius
danielsogl
PRO
1
150
PicoRuby for IoT: Connecting to the Cloud with MQTT
yuuu
2
770
ハーネスエンジニアリングにどう向き合うか 〜ルールファイルを超えて開発プロセスを設計する〜 / How to approach harness engineering
rkaga
28
19k
「OSSがあるなら自作するな」は AI時代も正しいか ── Build vs Adopt の新しい判断基準
kumorn5s
7
2.5k
ふにゃっとしない名前の付け方 〜哲学で茹で上げる、コシのあるソフトウェア設計〜
shimomura
0
110
Import assertionsが消えた日~ECMAScriptの仕様はどう決まり、なぜ覆るのか~
bicstone
2
180
Featured
See All Featured
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
140
Building Flexible Design Systems
yeseniaperezcruz
330
40k
The Spectacular Lies of Maps
axbom
PRO
1
740
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
From π to Pie charts
rasagy
0
180
The agentic SEO stack - context over prompts
schlessera
0
770
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
エンジニアに許された特別な時間の終わり
watany
106
240k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.4k
Ethics towards AI in product and experience design
skipperchong
2
270
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'-&ͰΤϯίʔυ͢Δͷ Ͱ͕ଟ͘ͳΔͬΆ͍ɻ