Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
HaskellでLLVM Frontend
Search
yagi
May 11, 2014
Technology
3
2.1k
HaskellでLLVM Frontend
parsecサイコー。llvm-general難しい
yagi
May 11, 2014
Tweet
Share
More Decks by yagi
See All by yagi
医療現場の解像度を上げるために 開発チームが行っている取り組み
sys1yagi
0
790
これどうやって動いてるんだ? Spring Framework/Bootのソースを読む
sys1yagi
1
1.3k
Kotlin コルーチンを 理解しよう 2019 - KotlinFest2019 -
sys1yagi
40
31k
5分でわかるKotlin Coroutines Flow
sys1yagi
21
19k
Androidと非同期処理 とCoroutine1.0.0
sys1yagi
12
14k
Kotlin コルーチンを 理解しよう
sys1yagi
41
25k
アーキテクチャと Scaffolding Template
sys1yagi
8
1.4k
Androidの非同期処理をKotlinコルーチンで行う
sys1yagi
3
23k
解剖Kotlin ~バイトコードを読み解く~
sys1yagi
18
10k
Other Decks in Technology
See All in Technology
原理から解き明かす AIと人間の成長 - Progate BAR
teba_eleven
2
290
オープンデータの内製化から分かったGISデータを巡る行政の課題
naokim84
2
1.3k
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.9k
インフラ室事例集
mixi_engineers
PRO
2
180
IPv6-mostly field report from RubyKaigi 2026
sorah
0
250
セキュリティAIエージェントの現在と未来 / PSS #2 Takumi Session
flatt_security
3
1.1k
一億総業務改善を支える社内AIエージェント基盤の要諦
yukukotani
9
2.6k
AI エージェント活用のベストプラクティスと今後の課題
asei
2
450
翻訳・対話・越境で強いチームワークを作ろう! / Building Strong Teamwork through Interpretation, Dialogue, and Border-Crossing
ar_tama
4
1.2k
その設計、 本当に価値を生んでますか?
shimomura
2
140
Digital omtanke på Internetdagarna 2025
axbom
PRO
0
160
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
37k
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
Thoughts on Productivity
jonyablonski
73
4.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
960
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
RailsConf 2023
tenderlove
30
1.3k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Balancing Empowerment & Direction
lara
5
780
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
A Tale of Four Properties
chriscoyier
162
23k
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Ͱ৭ʑΕͦ͏