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
700
これどうやって動いてるんだ? Spring Framework/Bootのソースを読む
sys1yagi
1
1.2k
Kotlin コルーチンを 理解しよう 2019 - KotlinFest2019 -
sys1yagi
40
30k
5分でわかるKotlin Coroutines Flow
sys1yagi
21
18k
Androidと非同期処理 とCoroutine1.0.0
sys1yagi
12
14k
Kotlin コルーチンを 理解しよう
sys1yagi
41
24k
アーキテクチャと Scaffolding Template
sys1yagi
8
1.3k
Androidの非同期処理をKotlinコルーチンで行う
sys1yagi
3
23k
解剖Kotlin ~バイトコードを読み解く~
sys1yagi
18
10k
Other Decks in Technology
See All in Technology
急成長する企業で作った、エンジニアが輝ける制度/ 20250214 Rinto Ikenoue
shift_evolve
3
1.9k
JEDAI Meetup! Databricks AI/BI概要
databricksjapan
0
280
ローカルLLMを活用したコード生成と、ローコード開発ツールへの応用
kazuhitoyokoi
0
130
「正しく」失敗できる チームの作り方 〜リアルな事例から紐解く失敗を恐れない組織とは〜 / A team that can fail correctly
i35_267
1
510
転生CISOサバイバル・ガイド / CISO Career Transition Survival Guide
kanny
3
1.1k
Building Products in the LLM Era
ymatsuwitter
10
6.1k
生成 AI プロダクトを育てる技術 〜データ品質向上による継続的な価値創出の実践〜
icoxfog417
PRO
5
1.8k
クラウドサービス事業者におけるOSS
tagomoris
3
950
Exadata Database Service on Cloud@Customer セキュリティ、ネットワーク、および管理について
oracle4engineer
PRO
1
1.5k
TAMとre:Capセキュリティ編 〜拡張脅威検出デモを添えて〜
fujiihda
2
360
現場で役立つAPIデザイン
nagix
35
13k
「海外登壇」という 選択肢を与えるために 〜Gophers EX
logica0419
0
900
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
RailsConf 2023
tenderlove
29
1k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
Bash Introduction
62gerente
611
210k
Designing Experiences People Love
moore
140
23k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
Scaling GitHub
holman
459
140k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
133
33k
Done Done
chrislema
182
16k
How GitHub (no longer) Works
holman
314
140k
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Ͱ৭ʑΕͦ͏