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
自作言語進捗 2019 May / ojaml-2019-may
Search
todesking
May 28, 2019
Technology
0
890
自作言語進捗 2019 May / ojaml-2019-may
todesking
May 28, 2019
Tweet
Share
More Decks by todesking
See All by todesking
自作言語進捗 2020 Mar / ojaml-2020-mar
todesking
0
350
バンディット問題の理論とアルゴリズム 第8章 / bandit-8
todesking
0
86
オンライン広告におけるCTR/CVR推定関係の論文を30本くらい雑に紹介する / rtb-papers-ctr
todesking
3
1.5k
オンライン広告関連の論文を50本くらい雑に紹介する AdKDD編 / adkdd-all
todesking
4
2.1k
バンディット問題の理論とアルゴリズム 第二章 / bandit2
todesking
0
110
自作言語進捗 2019 Mar
todesking
0
450
ベイズ統計モデリング 10 // Doing Bayesian Data Analysis Chapter 10
todesking
0
96
実行時におけるJVMバイトコード最適化手法
todesking
16
12k
Other Decks in Technology
See All in Technology
JBUG岡山 #6 WordCamp男木島の チームビルディング
takeshifurusato
0
150
DevIO2024_レガシー運用からの脱却 -クラウド活用の実践事例とベストプラクティス-
jun2882
0
210
What if...? 처음부터 다시 LLM 어플리케이션을 개발한다면
huffon
0
1k
20240725 LLMによるDXのビジョンと、今何からやるべきか @Azure OpenAI Service Dev Day
nrryuya
3
1.2k
フルリモートワークはエンジニアの夢を叶えたか? #cm_odyssey
mamohacy
2
600
エンジニアの生存戦略 〜クラウド潮流の経験から紐解く技術トレンドのメカニズムと乗りこなし方〜
shimy
9
1.9k
コンテナ・K8s研修 - 後半 Kubernetes 基礎&ハンズオン【MIXI 24新卒技術研修】
mixi_engineers
PRO
1
120
How to Think Like a Performance Engineer
csswizardry
4
590
公共領域から学ぶ クラウド移行についてエンジニアが意識していること
kawakawa2222
0
140
[NIKKEI Tech Talk] KDDI/KAG Scrum & Community for Engineering Training
curanosuke
2
220
開発生産性をむしろ向上させる セキュリティパートナーの作り方 / Dev Productivity Con 2024
flatt_security
0
360
コミュニティサービスに「あなたへ」フィードを リリースするまでの試行錯誤
takapy
1
150
Featured
See All Featured
Teambox: Starting and Learning
jrom
130
8.6k
How to Think Like a Performance Engineer
csswizardry
4
590
Designing with Data
zakiwarfel
96
5k
GraphQLとの向き合い方2022年版
quramy
36
13k
Building a Modern Day E-commerce SEO Strategy
aleyda
25
6.7k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.8k
The Brand Is Dead. Long Live the Brand.
mthomps
52
36k
Pencils Down: Stop Designing & Start Developing
hursman
118
11k
Testing 201, or: Great Expectations
jmmastey
33
6.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
155
14k
Unsuck your backbone
ammeep
666
57k
The Illustrated Children's Guide to Kubernetes
chrisshort
39
47k
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+ύλʔϯϚονΛΓ·͢ • ͋ͱܕਪͷςετΛ……