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.3k
Activities about Kubernetes operation improvements as an SRE
drumato
3
570
DEMO Apps recently implemented
drumato
0
77
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
280
Other Decks in Programming
See All in Programming
Honoのおもしろいミドルウェアをみてみよう
yusukebe
1
210
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
0
210
Pythonでもちょっとリッチな見た目のアプリを設計してみる
ueponx
1
570
富山発の個人開発サービスで日本中の学校の業務を改善した話
krpk1900
5
390
Lottieアニメーションをカスタマイズしてみた
tahia910
0
130
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
170
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
48
17k
苦しいTiDBへの移行を乗り越えて快適な運用を目指す
leveragestech
0
640
密集、ドキュメントのコロケーション with AWS Lambda
satoshi256kbyte
0
190
Amazon S3 TablesとAmazon S3 Metadataを触ってみた / 20250201-jawsug-tochigi-s3tables-s3metadata
kasacchiful
0
170
Conform を推す - Advocating for Conform
mizoguchicoji
3
690
メンテが命: PHPフレームワークのコンテナ化とアップグレード戦略
shunta27
0
120
Featured
See All Featured
A designer walks into a library…
pauljervisheath
205
24k
Thoughts on Productivity
jonyablonski
69
4.5k
Site-Speed That Sticks
csswizardry
4
380
Agile that works and the tools we love
rasmusluckow
328
21k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
The Invisible Side of Design
smashingmag
299
50k
Code Review Best Practice
trishagee
67
18k
Building an army of robots
kneath
303
45k
Producing Creativity
orderedlist
PRO
344
39k
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さんも頑張ってるし,私も頑張ろう ここで改めてお礼させていただきます
一年間(以上)ありがとうございました!