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.1k
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.4k
Activities about Kubernetes operation improvements as an SRE
drumato
3
570
DEMO Apps recently implemented
drumato
0
78
Writing an experimental eBPF disassembler
drumato
0
320
An incremental approach to implement an admission controller
drumato
0
210
Components of Kubernetes Cluster
drumato
0
290
Other Decks in Programming
See All in Programming
PEPCは何を変えようとしていたのか
ken7253
2
240
ソフトウェアエンジニアの成長
masuda220
PRO
12
2.1k
メンテが命: PHPフレームワークのコンテナ化とアップグレード戦略
shunta27
0
300
GoとPHPのインターフェイスの違い
shimabox
2
210
Djangoアプリケーション 運用のリアル 〜問題発生から可視化、最適化への道〜 #pyconshizu
kashewnuts
1
260
Rubyで始める関数型ドメインモデリング
shogo_tksk
0
140
Rails 1.0 のコードで学ぶ find_by* と method_missing の仕組み / Learn how find_by_* and method_missing work in Rails 1.0 code
maimux2x
1
240
CSS Linter による Baseline サポートの仕組み
ryo_manba
1
150
Introduction to kotlinx.rpc
arawn
0
770
お前もAI鬼にならないか?👹Bolt & Cursor & Supabase & Vercelで人間をやめるぞ、ジョジョー!👺
taishiyade
7
4.2k
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.5k
sappoRo.R #12 初心者セッション
kosugitti
0
280
Featured
See All Featured
Gamification - CAS2011
davidbonilla
80
5.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
YesSQL, Process and Tooling at Scale
rocio
172
14k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Typedesign – Prime Four
hannesfritz
40
2.5k
Practical Orchestrator
shlominoach
186
10k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
The Invisible Side of Design
smashingmag
299
50k
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さんも頑張ってるし,私も頑張ろう ここで改めてお礼させていただきます
一年間(以上)ありがとうございました!