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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
yagi
May 11, 2014
Technology
2.1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
HaskellでLLVM Frontend
parsecサイコー。llvm-general難しい
yagi
May 11, 2014
More Decks by yagi
See All by yagi
医療現場の解像度を上げるために 開発チームが行っている取り組み
sys1yagi
0
910
これどうやって動いてるんだ? Spring Framework/Bootのソースを読む
sys1yagi
1
1.4k
Kotlin コルーチンを 理解しよう 2019 - KotlinFest2019 -
sys1yagi
40
32k
5分でわかるKotlin Coroutines Flow
sys1yagi
21
19k
Androidと非同期処理 とCoroutine1.0.0
sys1yagi
12
14k
Kotlin コルーチンを 理解しよう
sys1yagi
41
26k
アーキテクチャと Scaffolding Template
sys1yagi
8
1.5k
Androidの非同期処理をKotlinコルーチンで行う
sys1yagi
3
24k
解剖Kotlin ~バイトコードを読み解く~
sys1yagi
18
11k
Other Decks in Technology
See All in Technology
Claude Codeの体系的な理解と知識のフック
oikon48
8
6k
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
77k
『自分で判断できるか』を基準に、プロダクトのハンズオン研修でAI利用の線を引いてみた / Where We Drew the Line on AI in Hands-on Training
honyanya
1
440
markdown-poster Introduction
kazamori
0
400
Digital Credentials API × OpenID4VP ブラウザ完結型本人確認の実装知見(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
340
形式手法特論:Hyperproperty とモデル検査 #kernelvm / Kernel VM Study Tokyo 19th
ytaka23
1
880
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
0
180
EMの役割で 変わったこと・変わらなかったこと
sansantech
PRO
1
190
Kiro Crew で始める マルチエージェント開発
miu_crescent
PRO
0
200
エージェント化するAI:現在地とその先に起きる変化 / AI as Agents: The Current State and the Changes Ahead
ks91
PRO
0
160
Oracle AI Databaseデータベース・サービス: BaseDB/ExaDB-Dの可用性
oracle4engineer
PRO
1
960
Claude Codeで開発以外の業務も爆速化しよう!
minorun365
PRO
11
9k
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Writing Fast Ruby
sferik
630
63k
Building Adaptive Systems
keathley
44
3.2k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
390
Visualization
eitanlees
152
17k
The SEO Collaboration Effect
kristinabergwall1
1
530
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
310
Rails Girls Zürich Keynote
gr2m
96
14k
The Cult of Friendly URLs
andyhume
79
7k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
380
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
220
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Ͱ৭ʑΕͦ͏