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
HaskellでLLVM Frontend
Search
yagi
May 11, 2014
Technology
3
2k
HaskellでLLVM Frontend
parsecサイコー。llvm-general難しい
yagi
May 11, 2014
Tweet
Share
More Decks by yagi
See All by yagi
医療現場の解像度を上げるために 開発チームが行っている取り組み
sys1yagi
0
770
これどうやって動いてるんだ? Spring Framework/Bootのソースを読む
sys1yagi
1
1.3k
Kotlin コルーチンを 理解しよう 2019 - KotlinFest2019 -
sys1yagi
40
31k
5分でわかるKotlin Coroutines Flow
sys1yagi
21
18k
Androidと非同期処理 とCoroutine1.0.0
sys1yagi
12
14k
Kotlin コルーチンを 理解しよう
sys1yagi
41
24k
アーキテクチャと Scaffolding Template
sys1yagi
8
1.4k
Androidの非同期処理をKotlinコルーチンで行う
sys1yagi
3
23k
解剖Kotlin ~バイトコードを読み解く~
sys1yagi
18
10k
Other Decks in Technology
See All in Technology
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
500
Unlocking the Power of AI Agents with LINE Bot MCP Server
linedevth
0
120
AWSを利用する上で知っておきたい名前解決のはなし(10分版)
nagisa53
10
3.2k
AIエージェントで90秒の広告動画を制作!台本・音声・映像・編集をつなぐAWS最新アーキテクチャの実践
nasuvitz
3
360
スクラムガイドに載っていないスクラムのはじめかた - チームでスクラムをはじめるときに知っておきたい勘所を集めてみました! - / How to start Scrum that is not written in the Scrum Guide 2nd
takaking22
2
210
今日から始めるAWSセキュリティ対策 3ステップでわかる実践ガイド
yoshidatakeshi1994
0
120
AI時代を生き抜くエンジニアキャリアの築き方 (AI-Native 時代、エンジニアという道は 「最大の挑戦の場」となる) / Building an Engineering Career to Thrive in the Age of AI (In the AI-Native Era, the Path of Engineering Becomes the Ultimate Arena of Challenge)
jeongjaesoon
0
260
新アイテムをどう使っていくか?みんなであーだこーだ言ってみよう / 20250911-rpi-jam-tokyo
akkiesoft
0
350
企業の生成AIガバナンスにおけるエージェントとセキュリティ
lycorptech_jp
PRO
3
200
複数サービスを支えるマルチテナント型Batch MLプラットフォーム
lycorptech_jp
PRO
1
970
LLM時代のパフォーマンスチューニング:MongoDB運用で試したコンテキスト活用の工夫
ishikawa_pro
0
170
COVESA VSSによる車両データモデルの標準化とAWS IoT FleetWiseの活用
osawa
1
400
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
Into the Great Unknown - MozCon
thekraken
40
2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Bash Introduction
62gerente
615
210k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Embracing the Ebb and Flow
colly
87
4.8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Transcript
HaskellͰLLVM Frontend 2014/5/11 Toshihiro Yagi
About me Twitter : @sys1yagi Blog : http://sys1yagi.com ! !
Android Engineer at
Status • ͍͢͝HຊΛಡॻձͰಡΜͩ • Haskell͕ଟগಡΊΔΑ͏ʹͳͬͨ • MaybeϞφυཧղ͍ͯ͠Δɻଟ • ීஈॻ͍͍ͯΔίʔυ98%͘Β͍Java
Ζ͏ͱࢥͬͯͨࣄ • EBNFύʔαΛ࡞Δ • EBNFΛύʔεͯ͠ੜͨ͠ASTΛͬͯLLVM IRΛ ు͘ϞδϡʔϧΛ࡞Δ • EBNFϑΝΠϧͱɺLLVM IRు͘ϞδϡʔϧͰͳΜ
͔͍͍ײ͡ʹίϯύΠϧ͢Δ
ͬͨࣄ • ʮ48࣌ؒͰSchemeΛॻ͜͏ʯͰSchemeͷΠϯλϓϦ λΛREPLลΓ·Ͱ࣮ • Implementing a JIT Compiled Language
with Haskell and LLVMͰṖݴޠΛLLVM IRʹίϯύΠϧ͢ΔౕΛ৮Δ • SchemeΛίϯύΠϧͯ͠LLVM IRʹు͘Α͏ʹͨ͠(ͱ ͍ͬͯܭࢉ෦ͷΈ) • LLVM IRΛemscriptenͰjsʹ͢Δ http://ja.wikibooks.org/wiki/48%E6%99%82%E9%96%93%E3%81%A7Scheme%E3%82%92%E6%9B%B8%E3%81%93%E3%81%86 http://www.stephendiehl.com/llvm/
Demo https://github.com/sys1yagi/scheme-haskell-llvm
Environment • Mac Book Pro OSX 10.9.2 • GHC 7.6.3
• Cabal 1.20.0.1 • Sublime Text 2
Scheme • ParsecͰΰϦΰϦɻ • ϦετදݱɺϓϦϛςΟϒͳؔͱifࣜ·Ͱ࣮ • REPLͰಈ͘ • ΄΅͜Εˣ http://ja.wikibooks.org/wiki/48%E6%99%82%E9%96%93%E3%81%A7Scheme%E3%82%92%E6%9B%B8%E3%81%93%E3%81%86
Parsec • ੜ࢈ੑ͕ߴ͘ϞφσΟοΫͳύʔαίϯϏωʔλɻ ඪ४ϥΠϒϥϦɻBNFΆ͍هड़Ͱॻ͚Δ • <|> : ࣈ۟ղੳΛ͢ΔύʔαΛͭͳ͛Δ ex: var
| val • many : ࢦఆͨ͠ύλʔϯʹ0ճҎ্Ϛον͢Δɻ ex:{ args } • many1 : ࢦఆͨ͠ύλʔϯʹ1ճҎ্Ϛον͢Δ ex:{ Uppercase }+ • optional : ࢦఆͨ͠ύλʔϯ͕1ճ͋ͬͯͳͯ͘Մ ex: [ args ] • try : ࢦఆͨ͠ύλʔϯʹϚον͠ͳ͍߹όοϑΝΛר͖ͯ࣍͠ͷύλʔϯ ͷϚονΛࢼΈΔ
γϯϘϧΛఆٛ ύʔαΛฒΔ ύʔαΛॻ͘
LLVM • http://www.stephendiehl.com/llvm/ Λࢀߟʹɻ • LLVM3.4ΛίϯύΠϧͯ͠Πϯετʔϧ • llvm-general, llvm-general-pureͱ͍͏packageΛ͏ •
࡞ͬͨASTΛḷͬͯLLVM IRΛు͔ͤΔ • emscriptenΛΠϯετʔϧɺemscriptenଆfastcomp ͱ͍͏LLVM࣮Λ͏
৭ʑLLVMͷઃఆͱ͔ॻ͍ͯ ASTḷͬͯ.llΛు͘
શମ૾ Main.hs Syntax.hs Lexer.hs Codegen.hs Emit.hs source file(scheme) input AST
LLVM Assembly ࠓճ࡞ͬͨൣғ llvm-ac emcc LLVM Bitcode hoge.js
·ͱΊ • ࣮ݱੑΛઌʹߟ͑ͯ͠·࣮ͬͯ༻ੑ…·ͰͨͲΓ ண͚ͳ͔ͬͨ • ΠϯλϓϦλͱLLVMͷ྆ํେมͳͷͰɺ1ͭͣͭ ͬͨํ͕Α͔ͬͨ • ParsecšŘŠŖɻJavaCCͱ͔ͰΔΑΓѹతʹָ •
LLVMͱ͔͘ɺParsecͰ৭ʑΕͦ͏