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
cybozu-labs-youth-10th
Search
Drumato
March 30, 2021
Programming
1
1.2k
cybozu-labs-youth-10th
第10期ラボユース成果発表会での発表資料.
https://labs.cybozu.co.jp/en/
Drumato
March 30, 2021
Tweet
Share
More Decks by Drumato
See All by Drumato
仕様と実装で学ぶOpenTelemetry
drumato
2
2.8k
Activities about Kubernetes operation improvements as an SRE
drumato
3
660
DEMO Apps recently implemented
drumato
0
100
Writing an experimental eBPF disassembler
drumato
0
360
An incremental approach to implement an admission controller
drumato
0
260
Components of Kubernetes Cluster
drumato
0
350
Other Decks in Programming
See All in Programming
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
330
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
180
これならできる!個人開発のすゝめ
tinykitten
PRO
0
140
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
160
生成AI時代を勝ち抜くエンジニア組織マネジメント
coconala_engineer
0
37k
ゲームの物理 剛体編
fadis
0
390
GISエンジニアから見たLINKSデータ
nokonoko1203
0
190
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
4
1.1k
愛される翻訳の秘訣
kishikawakatsumi
3
370
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
310
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
300
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
440
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Leo the Paperboy
mayatellez
1
1.3k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
270
4 Signs Your Business is Dying
shpigford
187
22k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
100
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Color Theory Basics | Prateek | Gurzu
gurzu
0
170
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
220
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Test your architecture with Archunit
thirion
1
2.1k
Transcript
x64/aarch64コンパイラを含む ミニツールチェーン+αの開発 第10期ラボユース成果発表会 言語処理系ゼミ 菅原大和/Drumato
一年間まとめ • x86_64/AArch64コードの生成ができるコンパイラを設計/実装した ◦ 生成コードの効率は悪いが,Typed ASTという中間表現を用いてシンプル • x86_64用のELFを生成するミニツールチェーンを実装した ◦ 上記コンパイラ+アセンブラ/リンカが協調動作する
• 高い抽象度を持たせたRust用ELFライブラリを開発した • 上記ライブラリでTUI版readelfを実装した • 既存のリンカスクリプトの欠点を考察し,一つのアイデアを提案した ◦ 後ほど解説
目次 • デモ • 一年間で達成できた目標/できなかった目標 • Linker Script Generatorについて •
これからの目標
DEMO1: ツールチェーンの動作 (6/9時点の画像)
None
DEMO2:TUI版readelfでの解析
None
一年間で達成できた目標#実装物 • peachili … 自作言語とそれをサポートするコンパイラ ◦ アセンブラとリンカをシンプルにするため,Bundlerが動いて依存関係を解決しグラフを構築 ◦ 複数のファイルで構成されたPeachiliコードから,最終的に単一のアセンブリファイルを生成 •
asmpeach … x86_64のアセンブラ ◦ 構成としては,アセンブリファイルのパーサ/命令の変換/オブジェクトファイルの生成 • pld … x86_64のstatic linker • elf-utilities … RustでELFをスマートに使えるライブラリ ◦ できるだけスマートに使えるように多くを抽象化している ▪ ex. セクション追加時にユーザがehdr.e_shnumをインクリメントしなくていい等 • elfpeach … TUIで操作できるreadelf ◦ これも最低限の機能しか持っておらず,実質プロトタイプ • py-linkage … Linker Script Generator(ただしプロトタイプ) ◦ これについては後述
一年間で達成できなかった目標 • コンパイラのアーキテクチャは結局初歩的なものだった ◦ スタックマシン実装であり,生成コードの効率は非常に悪い ◦ SecHack365参加時はなんちゃってレジスタマシン実装だったが,よっぽど速い ◦ 最適化パスは実装できなかった •
作りたかった言語機能のいくつかを保留にした ◦ Arena Allocatorのような標準ライブラリ ◦ RustのEnumやZigのtagged unionのような機能 ◦ Goのような言語組み込みのテストフレームワーク
活動2ヶ月後に とりあえず "最小の自作ツールチェーン"は 達成した
まだまだ開発することは沢山ある (動的リンカ/言語拡張/LTO/etc)
ところで,他になにか "新しいこと"はできないか?
アイデア: Linker Script Generatorについて
Linker Script Generator#background • 既存のリンカはconfiguration interfaceにリンカスクリプトを用意 • リンカスクリプトは重要かつ便利だが,学習コストが高い ◦ 特に日本語のドキュメントは少なく,理解しづらい
• section size/location pointerの計算など,ある程度表現力を持つ ◦ yamlなどの(学習コストが低くて)読みやすい形式では代替できない ◦ "スクリプト"の機能がなければならない
Pythonライブラリを動かして configを"生成"できないか?
Linker Script Generator#proposal in Python • 新たに文法を覚える必要はない ◦ 普通のPythonライブラリを使ったコーディング •
Pythonの計算を経由して,最終的に数値がハードコードされたyamlを生成 ◦ 出力フォーマットを指定でき,リンカスクリプトのフォーマットも吐ける ▪ 既存リンカ/自作リンカのどちらでも役立つ • 別にPythonじゃなくても,"スクリプト"レベルのフットワークで書ければ良い
Linker Script Generator#proposal in Python • 現状はほぼプロトタイプであり,机上の空論 • 鋭意実装中 ◦
elf-parserとfile-translator, リンカスクリプトの仕様に即した計算機能
None
成果発表後の目標
これからの目標(一部) • elf-utilitiesはRustで一番使われるELFライブラリを目指したい • elfpeachにも高級な機能を用意したい ◦ e.g. シンボルテーブルのフィルタリング機能 • 最適化コンパイラの理論と実装
◦ まずはx64のバックエンドだけを変更する • py-linkageはGNU ldのデフォルトスクリプトを置き換えられるぐらいの規模 がほしい
最後に • メンターの方々には多くの助言を頂きました ◦ 特に川合さんにはラボユース活動自体の紹介もしていただきました • ユース生/研究生の皆さんの活動が励みになりました ◦ xxさんも頑張ってるし,私も頑張ろう ここで改めてお礼させていただきます
一年間(以上)ありがとうございました!