Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
自作言語進捗 2019 May / ojaml-2019-may
Search
todesking
May 28, 2019
Technology
980
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
自作言語進捗 2019 May / ojaml-2019-may
todesking
May 28, 2019
More Decks by todesking
See All by todesking
自作言語進捗 2020 Mar / ojaml-2020-mar
todesking
0
480
バンディット問題の理論とアルゴリズム 第8章 / bandit-8
todesking
0
130
オンライン広告におけるCTR/CVR推定関係の論文を30本くらい雑に紹介する / rtb-papers-ctr
todesking
3
1.8k
オンライン広告関連の論文を50本くらい雑に紹介する AdKDD編 / adkdd-all
todesking
4
2.5k
バンディット問題の理論とアルゴリズム 第二章 / bandit2
todesking
0
200
自作言語進捗 2019 Mar
todesking
0
540
ベイズ統計モデリング 10 // Doing Bayesian Data Analysis Chapter 10
todesking
0
130
実行時におけるJVMバイトコード最適化手法
todesking
16
13k
Other Decks in Technology
See All in Technology
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
140
omasushiというライブラリを作った
polidog
PRO
0
160
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
610
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
1
210
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
420
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
270
DEFCON_CHV_CTF_Write-up.pdf
bata_24
0
110
When Does a Local Qwen Start to Break
morshoto
0
190
生成AIのテナント制御とシャドーMCP対策 | AIを"止めずに"、情報を守る
yukun
0
140
GoにおけるFFIのこれまでとこれから
goccy
4
1.5k
多摩川(.dev)ランニング入門 / Tamagawa.dev#3
fujiwara3
3
430
HRC_Frontend_Conference_Fukuoka_2026.pdf
ts020
0
100
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
108
250k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
480
Navigating Weather and Climate Data
rabernat
0
510
sira's awesome portfolio website redesign presentation
elsirapls
0
410
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
510
What's in a price? How to price your products and services
michaelherold
247
13k
Design in an AI World
tapps
1
310
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Transcript
ࣗ࡞ݴޠਐḿ 2019 May @todesking
͋Β͢͡ • 1݄͝Ζ͔Βࣗ࡞ݴޠΛ࡞Γ࢝ΊͨͷͰɺͨ·ʹਐḿΛใ ࠂ͠Α͏ͱࢥ͍·͢…… • લճͷ͋Β͢͡: https://speakerdeck.com/todesking/zi- zuo-yan-yu-jin-bu-2019-mar • ಈػ
• Ұ෦ͰCίϯύΠϥࣗ࡞͕ྲྀߦͬͯͨ • ܕγεςϜͷ࣮ݧ͕͍ͨ͠ • JVMͰಈ͘MLܥݴޠΛ࡞͍ͬͯ·͢ • ηϧϑϗεςΟϯάඪͱ͢Δ • https://github.com/todesking/ojaml
ਐḿ Ϟδϡʔϧ Ϟδϡʔϧม ؔ ϩʔΧϧม(let/let rec) جຊతͳԋࢉ ݪ࢝తͳܕਪ Java FFI
ADT ·ͱͳܕਪ(HM) ύϥϝτϦοΫଟ૬ letଟ૬ REPL Refinement types ηϧϑϗεςΟϯά
ܕਪ • ܕ͕ෆ໌ͳ෦ʹܕมΛׂΓͯΔ • ܕม͕ै͏੍͖ΛٻΊΔ • ੍ͷղΛٻΊΔ • ৄࡉ͙͙Ε module
A { let add = fun x => fun y => x + y ;; (* add: int -> int -> int *) }
ܕਪ • ܕ͕ෆ໌ͳ෦ʹܕมΛׂΓͯΔ let add: T1 = (fun x: T2
=> (fun y: T3 => (x + y): T4 ): T5 ): T6 ;;
ܕਪ • ܕม͕ै͏੍͖ΛٻΊΔ let +: int -> int -> int;;
let add: T1 = (fun x: T2 => (fun y: T3 => (x + y): T4 ): T5 ): T6 ;; T1 = T6 T6 = T2 -> T5 T5 = T3 -> T4 T4 = int T2 = int T3 = int
ܕਪ • ੍ͷղΛٻΊΔ T1 = T6 T6 = T2 ->
T5 T5 = T3 -> T4 T4 = int T2 = int T3 = int T1 = T2 -> T5 T6 = T2 -> T5 T5 = T3 -> T4 T4 = int T2 = int T3 = int T1 = T2 -> T3 -> T4 T6 = T2 -> T3 -> T4 T5 = T3 -> T4 T4 = int T2 = int T3 = int
ܕਪ • ਪ݁Ռʹܕม͕Δ߹ɺܕύϥϝʔλͱͯ͠ந Խ͢ΔॲཧΛߦ͏ • நԽ͢Δ݅ͱ͔͍Ζ͍Ζ͋ΔΜͰ͕͢ʂ • let-polymorphismͰ͙͙Ε let id
= (fun x: T1 => x: T2): T3 T2 = T1 T3 = T1 -> T1 id: [T1] T1 -> T1
ܕਪ(FFI) • JavaϝιουΛݺͿػೳͷܕਪ • Φʔόϩʔυ͕͋ΔͨΊɺී௨ͷؔݺͼग़͠ͱҧ͏ϧʔϧ͕ඞཁ • ҾͷܕΛਪˠҾͷܕΛݩʹΦʔόϩʔυղܾˠฦΓͷܕΛ ܾఆ let x
= Integer##valueOf(1 + 1) ;;
REPL • JVMϕʔεݴޠͳͷͰͱָͯͩͬͨ • ͦΕ·Ͱʹఆٛ͞ΕͨมΛimport͓ͯ͘͠ • ೖྗΛϞδϡʔϧʹมͯ͠ίϯύΠϧ͢Δ REPL:1> 1 +
1 module Repl_1 { let res1 = 1 + 1 ;; } REPL:2> let x = res1 ;; import Repl_1.res1 module Repl_2 { let x = res1 ;; } REPL:3> x + 1 ;; import Repl_1.res1 import Repl_2.x module Repl_3 { let res3 = x + 1 ;; }
REPL • ίϯύΠϧͷ݁Ռͱͯ͠ɺϞδϡʔϧʹରԠͨ͠Ϋϥε͕Ͱ͖Δͷ ͰɺloadClassͯ͠ϑΟʔϧυͷΛಡΊΑ͍
ͦͷଞ • લճݴͬͯͳ͔ͬͨ͜ͱͳͲ • ύʔα • όΠτίʔυੜ • ςετڥ
ύʔα • scalaެࣜͷparser-combinatorsͱ͍͏ϥΠϒϥϦͬͯ·͢ • ͍ΘΏΔύʔαίϯϏωʔλʔ • ύϑΥʔϚϯε໘ͰෆརͬΆ͍͕ศར
όΠτίʔυੜ • ASMͱ͍͏ϥΠϒϥϦΛͬͯ·͢ • visitorܦ༝Ͱ໋ྩΛࢦఆ(visitXxxInsn)
ςετ • end-to-endςετͷΈ • සൟʹมΘΔ෦ߏʹґଘͨ͠ςετͳΔ͘ॻ͖ͨ ͘ͳ͍ͱ͍͏ҙࢥ͕͋Γ·͢
ςετ • src/test/resourcesͷԼʹ͜͏͍͏ͷΛஔ͘ͱࣗಈͰ࣮ߦ͢ ΔΈ • assertionίϝϯτͰॻ͘ • ਖ਼ৗܥ: ϑΟʔϧυ໊ɺظ͞ΕΔܕͱ •
ҟৗܥ: ίϯύΠϧΤϥʔ͕ظ͞ΕΔॴ
ࠓޙͷ༧ఆ • ADT+ύλʔϯϚονΛΓ·͢ • ͋ͱܕਪͷςετΛ……