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
880
自作言語進捗 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
330
バンディット問題の理論とアルゴリズム 第8章 / bandit-8
todesking
0
78
オンライン広告におけるCTR/CVR推定関係の論文を30本くらい雑に紹介する / rtb-papers-ctr
todesking
3
1.4k
オンライン広告関連の論文を50本くらい雑に紹介する AdKDD編 / adkdd-all
todesking
4
2.1k
バンディット問題の理論とアルゴリズム 第二章 / bandit2
todesking
0
92
自作言語進捗 2019 Mar
todesking
0
450
ベイズ統計モデリング 10 // Doing Bayesian Data Analysis Chapter 10
todesking
0
92
実行時におけるJVMバイトコード最適化手法
todesking
16
12k
Other Decks in Technology
See All in Technology
エンジニアブランディングチームの KPI / KPI's of engineer branding team
chaspy
1
140
依存ライブラリはどこに?
takesection
0
110
大規模なアジャイル開発の現場と技術負債 / Technical Debt
yoshiitaka
21
4.1k
検証からプロダクトへ: シームレスなLLM開発の ためのしくみ作り
nunukim
1
210
サービスメッシュ環境における OpenTelemetry 活用 / OpenTelemetry in Service Mesh
k6s4i53rx
2
860
生成AI・LLM時代における 機械学習エンジニアとしてのキャリア戦略・開発戦略 / my-career-and-development-strategies-for-ml-engineer-2024
yuya4
4
880
LLM + RAG を使った SORACOM Support Bot の裏側の歴史
soracom
PRO
1
640
家族アルバム みてねで直面してきた技術的負債 / MIXI KAG 2024
isaoshimizu
17
7.7k
KubeCon EU 2024 : Knative Maintainers Session
salaboy
0
380
Tohoku.Tech #1 「Cursorを使ったRaspberry Piの開発」by ねこまた
jun2882
0
250
大規模データとの戦い方
knih
1
480
サービス成長と共に肥大化するモノレポ、長くなるCI時間 / As services grow, monorepos get bigger and CI time gets longer
kohbis
5
2.1k
Featured
See All Featured
Clear Off the Table
cherdarchuk
82
310k
Web development in the modern age
philhawksworth
201
10k
KATA
mclloyd
14
11k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.8k
The Invisible Side of Design
smashingmag
293
49k
Debugging Ruby Performance
tmm1
68
11k
What's new in Ruby 2.0
geeforr
335
31k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
153
14k
What’s in a name? Adding method to the madness
productmarketing
PRO
14
2.6k
A better future with KSS
kneath
230
16k
10 Git Anti Patterns You Should be Aware of
lemiorhan
644
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+ύλʔϯϚονΛΓ·͢ • ͋ͱܕਪͷςετΛ……