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
2
1.9k
HaskellでLLVM Frontend
parsecサイコー。llvm-general難しい
yagi
May 11, 2014
Tweet
Share
More Decks by yagi
See All by yagi
医療現場の解像度を上げるために 開発チームが行っている取り組み
sys1yagi
0
560
これどうやって動いてるんだ? Spring Framework/Bootのソースを読む
sys1yagi
1
1.1k
Kotlin コルーチンを 理解しよう 2019 - KotlinFest2019 -
sys1yagi
40
30k
5分でわかるKotlin Coroutines Flow
sys1yagi
21
17k
Androidと非同期処理 とCoroutine1.0.0
sys1yagi
12
13k
Kotlin コルーチンを 理解しよう
sys1yagi
42
23k
アーキテクチャと Scaffolding Template
sys1yagi
8
1.3k
Androidの非同期処理をKotlinコルーチンで行う
sys1yagi
3
23k
解剖Kotlin ~バイトコードを読み解く~
sys1yagi
18
9.7k
Other Decks in Technology
See All in Technology
超入門 SRE
ryuichi1208
3
810
生成 AI の評価方法
asei
6
790
iPaaS入門&自社サービスで利用してみた
ippei2480
0
140
feature flag と OpenTelemetry
biwashi
4
940
顧客価値に向き合うためのCREのススメ
zakiyama
4
490
Go Global! In the AWS Community Global Initiatives
hiroramos4
PRO
1
130
フロントエンドの Monorepo をやめてリポジトリ分割したワケ / Why did we stop using Monorepo on the frontend and split the repository?
kaminashi
5
2k
Comment nous avons transformé les Restos du Coeur en Cloud Provider
ju_hnny5
1
280
Data Processing in PHP - PHPers 2024 Poznań
norzechowicz
0
110
Claude3 on Bedrock with Converse API + Tool use でチャットアプリを作成してみた/Building-a-Chat-App-Using-Claude3-on-Bedrock-with-the-Converse-API+Tool-Use
ren8k
0
500
半年かけてPHP5.6からPHP7.4までバージョンアップした苦労と工夫 PHPカンファレンス福岡2024
kechiiin
1
140
OpenTelemetry Meetup 2024-06 - ABEMA と分散トレーシングのあゆみ
tetsuya28
0
190
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Scaling GitHub
holman
457
140k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
42
4.6k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
222
21k
Building Effective Engineering Teams - LeadDev
addyosmani
40
2.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
23
2k
Creatively Recalculating Your Daily Design Routine
revolveconf
213
11k
Web Components: a chance to create the future
zenorocha
307
41k
Git: the NoSQL Database
bkeepers
PRO
423
64k
Done Done
chrislema
178
15k
What's new in Ruby 2.0
geeforr
338
31k
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Ͱ৭ʑΕͦ͏