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
950
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
Activities about Kubernetes operation improvements as an SRE
drumato
2
460
DEMO Apps recently implemented
drumato
0
43
Writing an experimental eBPF disassembler
drumato
0
240
An incremental approach to implement an admission controller
drumato
0
150
Components of Kubernetes Cluster
drumato
0
200
ELFに蔓延るNULL三姉妹
drumato
1
2.8k
Other Decks in Programming
See All in Programming
とにかくHTTP3をライトニングに話す / Anyway, I'll talk to Lightning about HTTP3.
seike460
PRO
0
110
マイクロサービスがほしいと思ったときに本当に必要だったもの〜なぜ人は共通基盤の夢を見るのか〜 / why microservice
77web
5
840
Next.js で SPA を構築する際の辛み
hayatow
0
220
ISUCONってなんだか難しそう……!!でも、初めてのISUCONにPHPで挑戦してきました!
kotomin_m
0
260
PHP で読む楽しいコアダンプ
sji
0
220
TokyoR#111_ANOVA
kilometer
1
710
DDD, necessary but insufficient: physical design principles for microservices
cer
PRO
0
150
上手な探索的テストとその上達方法について
matsu802
1
430
decksh - a little language for decks
ajstarks
4
18k
開発者体験を変えるInfrastructure as Codeの新機能6選!
konokenj
4
850
Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
860
ここ1~2年くらいで 使えるようになった(主要ブラウザーの最新版 がすべて対応した ) ウェブの新機能について ランダムに喋る!
myzkyy
7
5.9k
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
43
9.6k
How to train your dragon (web standard)
notwaldorf
71
5k
Web development in the modern age
philhawksworth
201
10k
Automating Front-end Workflow
addyosmani
1353
200k
How GitHub (no longer) Works
holman
301
140k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
242
20k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
18
1.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
14
2.5k
Docker and Python
trallard
33
2.6k
Debugging Ruby Performance
tmm1
68
11k
Designing the Hi-DPI Web
ddemaree
275
33k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
113
18k
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さんも頑張ってるし,私も頑張ろう ここで改めてお礼させていただきます
一年間(以上)ありがとうございました!