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
930
自作言語進捗 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
390
バンディット問題の理論とアルゴリズム 第8章 / bandit-8
todesking
0
110
オンライン広告におけるCTR/CVR推定関係の論文を30本くらい雑に紹介する / rtb-papers-ctr
todesking
3
1.7k
オンライン広告関連の論文を50本くらい雑に紹介する AdKDD編 / adkdd-all
todesking
4
2.3k
バンディット問題の理論とアルゴリズム 第二章 / bandit2
todesking
0
160
自作言語進捗 2019 Mar
todesking
0
480
ベイズ統計モデリング 10 // Doing Bayesian Data Analysis Chapter 10
todesking
0
110
実行時におけるJVMバイトコード最適化手法
todesking
16
12k
Other Decks in Technology
See All in Technology
Kubernetes における cgroup v2 でのOut-Of-Memory 問題の解決
pfn
PRO
0
460
生成AI時代のデータ基盤設計〜ペースレイヤリングで実現する高速開発と持続性〜 / Levtech Meetup_Session_2
sansan_randd
1
140
DuckDB-Wasmを使って ブラウザ上でRDBMSを動かす
hacusk
1
140
ライブサービスゲームQAのパフォーマンス検証による品質改善の取り組み
gree_tech
PRO
0
540
AWSで始める実践Dagster入門
kitagawaz
0
230
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
170
AI駆動開発に向けた新しいエンジニアマインドセット
kazue
0
200
DevIO2025_継続的なサービス開発のための技術的意思決定のポイント / how-to-tech-decision-makaing-devio2025
nologyance
0
180
AI開発ツールCreateがAnythingになったよ
tendasato
0
110
LLM翻訳ツールの開発と海外のお客様対応等への社内導入事例
gree_tech
PRO
0
540
進捗
ydah
2
230
Platform開発が先行する Platform Engineeringの違和感
kintotechdev
2
350
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
74
5k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
How STYLIGHT went responsive
nonsquared
100
5.8k
Automating Front-end Workflow
addyosmani
1370
200k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
Thoughts on Productivity
jonyablonski
70
4.8k
Navigating Team Friction
lara
189
15k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Site-Speed That Sticks
csswizardry
10
810
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
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+ύλʔϯϚονΛΓ·͢ • ͋ͱܕਪͷςετΛ……